Hallo
Ich möchte mit folgendem Code ein "r" von einem MIkrocontroller zum
nächsten übertragen. Das Ganze hat auch schon funktioniert, vor 2
Monaten, aber jetzt tut sich garnichts mehr!
Hier der Quellcode des Masters: 1 | .include "m8def.inc"
| 2 |
| 3 | .def temp1 = r16
| 4 | .def temp2 = r17
| 5 |
| 6 | .equ Bereit = 4 ;Gibt Status von COntroller an("Bereit"=Gesetzt->Controller
| 7 | .equ ZentBef = 5 ;EINGANG:Hierhin sendet Zentrale seine Befehle zur Verteilung
| 8 | ;(weg schicken;her holen;nix machen);muss global deklariert werden
| 9 |
| 10 | .equ DD_SS = 2 ;Mit DD_SS des Slave verbunden
| 11 | .equ DD_MOSI = 3 ;Mit DD_MISO des Slave verbunden
| 12 | .equ DD_MISO = 4 ;Mit DD_MOSI des Slave verbunden
| 13 | .equ DD_SCK = 5 ;Mit DD_SCK des Slave verbunden
| 14 |
| 15 | .equ vary = 4
| 16 | .equ DDR_SPI = DDRB
| 17 | .equ PORT_SPI = PORTB
| 18 |
| 19 | ldi temp1,LOW(RAMEND)
| 20 | out SPL,temp1
| 21 |
| 22 | ldi temp1,HIGH(RAMEND)
| 23 | out SPH,temp1
| 24 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
| 25 | rcall SPI_MasterInit
| 26 | loop: sbi PORTB,DD_SS
| 27 | ldi temp1,'r'
| 28 | rcall SPI_MasterTransmit
| 29 | rjmp loop
| 30 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
| 31 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
| 32 | SPI_MasterInit: ldi temp2,(1<<DD_MOSI)|(1<<DD_SCK)|(1<<DD_SS);|(1<<ComSignalausgang)|(0<<ComSignaleingang) ;Set MOSI and SCK output, all others input
| 33 | out DDR_SPI,temp2 ;Enable SPI, Master, set clock rate fck/16
| 34 | ldi temp2,(1<<SPE)|(1<<MSTR)|(1<<SPR1)|(1<<SPR0)
| 35 | out SPCR,temp2
| 36 | ret
| 37 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
| 38 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
| 39 |
| 40 | SPI_MasterTransmit: cbi PORT_SPI,DD_SS
| 41 |
| 42 | out SPDR,temp1 ;Start transmission of data (temp1)
| 43 | Wait_Transmit: sbis SPSR,SPIF ;Wait for transmission complete
| 44 | rjmp Wait_Transmit
| 45 | in temp1,SPDR
| 46 |
| 47 | sbi PORT_SPI,DD_SS
| 48 | ret
| 49 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
Und Hier der des Slaves: 1 | .include "m8def.inc"
| 2 |
| 3 | .def temp1 = r16
| 4 | .def transZ = r20
| 5 | .def temp2 = r17
| 6 | .def receiZ = r21
| 7 |
| 8 |
| 9 | .equ DD_SS = 2 ;Mit DD_SS des Slave verbunden
| 10 | .equ DD_MOSI = 3 ;Mit DD_MISO des Slave verbunden
| 11 | .equ DD_MISO = 4 ;Mit DD_MOSI des Slave verbunden
| 12 | .equ DD_SCK = 5 ;Mit DD_SCK des Slave verbunden
| 13 |
| 14 | .equ vary = 4
| 15 | .equ DDR_SPI = DDRB
| 16 |
| 17 | ldi temp1,LOW(RAMEND)
| 18 | out SPL,temp1
| 19 |
| 20 | ldi temp1,HIGH(RAMEND)
| 21 | out SPH,temp1
| 22 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
| 23 | ldi r16,0xff
| 24 | out DDRD,r16
| 25 |
| 26 | ;ldi r16,0xff
| 27 | ;out PORTD,r16
| 28 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
| 29 | rcall uart_init
| 30 | rcall SPI_SlaveInit
| 31 | loop: rcall SPI_SlaveReceive
| 32 | rcall uart_send
| 33 | rjmp loop
| 34 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
| 35 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
| 36 | SPI_SlaveInit: ldi temp2,(1<<DD_MISO) ;Set MISO output, all others input
| 37 | out DDR_SPI,temp2 ;Enable SPI
| 38 | ldi temp2,(1<<SPE)|(1<<SPR1)
| 39 | out SPCR,temp2
| 40 |
| 41 | ret
| 42 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
| 43 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
| 44 | SPI_SlaveReceive: out SPDR,temp1
| 45 | SPI_SlaveReceive_1: sbis SPSR,SPIF ;Wait for reception complete
| 46 | rjmp SPI_SlaveReceive_1 ;Read received data and return
| 47 | in temp1,SPDR
| 48 |
| 49 | ret
| 50 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
| 51 |
| 52 | .include "uart-routines.asm"
|
Wäre um schnelle Hilfe sehr Dankbar
P.S. Ja ich habe die SPI-Pins richtog verbunden....
wenn das ganze vor zwei Monaten schonmal funktioniert hat, würde ich
mich zuerst mal fragen was ich verändert habe, dass es nicht mehr
funktioniert.
Da würde ich als letztes im Code suchen, weil du den wohl nicht geändert
hast...
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
|