Forum: Mikrocontroller und Digitale Elektronik SPI Datenübertragung


von A. C. (michael1988)


Lesenswert?

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....

von Kai F. (kai-) Benutzerseite


Lesenswert?

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.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.