Forum: Mikrocontroller und Digitale Elektronik ATMega 128 SPI Probleme


von Bastler (Gast)


Lesenswert?

Hallo liebe Forengemeinde,
Ich arbeite gerade an einer Schaltung die einen ATMega128 und ein 74595 
Schieberegister beinhaltet. Irgendwie funktioniert das Ansprechen des 
Schieberegisters ueber die SPI Schnittstelle nicht. Selbst bei eine ganz 
einfachen ASM Programm tut sich nix. Ich habe schon gelesen, dass die 
Belegung vom ISP beim 128er abweicht. Das duerfte aber kein Problem sein 
da der Controller mittels JTAG programmiert wird. Ich komme echt nicht 
weiter. Waere echt froh wenn jemand den Fehler sehen wuerde.

Mfg Bastler
1
.include "m128def.inc"
2
.equ FCPU = 16000000
3
.org 0x0000
4
rjmp start
5
6
7
start:    ldi r16,LOW(RAMEND)
8
      out SPL,r16
9
      ldi r16,HIGH(RAMEND)
10
      out SPH,r16
11
12
      ldi r16,0xFF
13
      out DDRB,r16
14
15
      ldi r16,(1<<SPE)|(1<<MSTR)|(SPR0)|(1<<SPR1)
16
      out SPCR,r16
17
18
      clr r16
19
      out SPSR,r16
20
21
      ldi r16,0xFF
22
      rcall SPIPutByte
23
24
loop:    rjmp loop
25
26
SPIPutByte:  cbi PORTB,0
27
      out SPDR,r16
28
      sbis SPSR,SPIF
29
      rjmp PC-1
30
      in r16,SPDR
31
      ret

von der alte Hanns (Gast)


Lesenswert?

Ich kenne den 128 nicht, aber das

>      ldi r16,(1<<SPE)|(1<<MSTR)|(SPR0)|(1<<SPR1)

ist wohl nicht richtig.

von Bastler (Gast)


Lesenswert?

Oh ja, das ist mir nicht aufgefallen. Aendert aber nichts an der 
Bitmaske da SPR0 0 ist. Die Frequenz des Bus waere dann 16000000/64= 250 
kHz

von der alte Hanns (Gast)


Lesenswert?

Woran merken Sie, dass sich 'nix tut'?

von spess53 (Gast)


Lesenswert?

Hi

>      clr r16
>      out SPSR,r16

Kannst du weglassen. Macht eh nicht was du denkst.

MfG Spess

von Karl H. (kbuchegg)


Lesenswert?

Moment.
Da wird ein 595 Schieberegister angesteuert.

Da muss ein Puls auf den RCLK Eingang vom 595 hinten nach kommen, sonst 
tut sich an den Ausgängen vom 595 nichts. Bis jetzt ist das Byte 0xFF 
lediglich in das Schieberegister vom 595 eingetaktet worden. Aber es ist 
noch nicht ins Latch übernommen worden. Der Puls an RCLK macht genau 
das.

: Bearbeitet durch User
von Bastler (Gast)


Lesenswert?

Ja ich weiss. Hab den source nur schnell vereinfacht.
1
.include "m128def.inc"
2
.equ FCPU = 16000000
3
.org 0x0000
4
rjmp start
5
6
7
start:    ldi r16,LOW(RAMEND)
8
      out SPL,r16
9
      ldi r16,HIGH(RAMEND)
10
      out SPH,r16
11
12
      ldi r16,0xFF
13
      out DDRB,r16
14
15
      ldi r16,(1<<SPE)|(1<<MSTR)|(1<<SPR0)|(1<<SPR1)
16
      out SPCR,r16
17
18
      clr r16
19
      out SPSR,r16
20
21
      ldi r16,0xFF
22
      rcall SPIPutByte
23
24
loop:    rjmp loop
25
26
SPIPutByte:  cbi PORTB,0
27
      out SPDR,r16
28
      sbis SPSR,SPIF
29
      rjmp PC-1
30
      in r16,SPDR
31
      sbi PORTB,0
32
      ret

von Karl H. (kbuchegg)


Lesenswert?

/OE      (Output Enable) vom 595 ist angeschlossen?
/SRCLR   (Clear) vom 595 ist angeschlossen?

von der alte Hanns (Gast)


Lesenswert?

Da Sie meine Frage nicht beantworten, nehme ich an, dass SPI läuft, und 
dass das an 595 Angeschlossene, was auch immer, nicht das Gewünschte 
bringt.
Also stellt sich die Frage nach dem Schaltplan.

von Karl H. (kbuchegg)


Lesenswert?

Bastler schrieb:
> Ja ich weiss. Hab den source nur schnell vereinfacht.

Das klingt nicht gut.

Welcher Code läuft jetzt WIRKLICH auf dem Mega128. Nicht irgendwas, was 
so ähnlich aussieht, sondern der Code der tatsächlich läuft.

(BTW: die M103 Fuse vom Mega hast du abgeschaltet?)

: Bearbeitet durch User
von Karl H. (kbuchegg)


Lesenswert?

spess53, wenn du noch da bist
1
      sbis SPSR,SPIF
2
      rjmp PC-1

stimmt das -1 hier?

Ich bau bei solchen Sachen immer ein Label ein. Auf das Risiko mich hier 
zu verzählen lass ich mich erst gar nicht ein.

von spess53 (Gast)


Lesenswert?

Hi

>Ich bau bei solchen Sachen immer ein Label ein.

Ich auch. Aber das sollte passen.

MfG Spess

von der alte Hanns (Gast)


Lesenswert?

Ich nicht.
Ohne Label, aber eingerückt, finde ich es übersichtlicher.

von Karl H. (kbuchegg)


Lesenswert?

spess53 schrieb:
> Hi
>
>>Ich bau bei solchen Sachen immer ein Label ein.
>
> Ich auch. Aber das sollte passen.

OK.
Ich weiß bei solchen Dingen immer nie, ob da jetzt der PC von der 
aktuellen Anweisung benutzt wird, oder ob das schon der PC von der 
nächsten Anwweisung ist. :-)

von Bastler (Gast)


Lesenswert?

Das mit PC-1 passt. Mach ich aus gewohnheit so weil mich irgendwann bei 
langen Methoden die ganzen Label genervt haben. Das 595  ist korrekt 
angeschlossen. #OE auf 0 und #MR auf 1

von spess53 (Gast)


Lesenswert?

Hi

>Ich weiß bei solchen Dingen immer nie, ob da jetzt der PC von der
>aktuellen Anweisung benutzt wird, oder ob das schon der PC von der
>nächsten Anwweisung ist. :-)

So geht es mir auch. Das erinnert mich immer an das erste µC-System mit 
dem ich zu tun hatte. Von Hand assemblieren und dann den Hex-Code 
eingeben. war in den Achtzigern.

MfG Spess

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.