Forum: Mikrocontroller und Digitale Elektronik SPI zum shiftreg. klappt nicht, manuell gehts... ursache?


von Haemi (Gast)


Lesenswert?

Salut,

seit gestern abend quält mich folgendes undurchschaubares Problem:
Ich hab am Mega8 ein 595 Shiftregister. MOSI, SCLK beschaltet, als
ST_CP lege ich /SS an, was als output definiert ist.
Verwende ich das Hardware-SPI, passiert folgendes: Die Daten kommen
soweit an, nur daß alles links von einer "Null" abgeschnitten wird.

Beispiele:
Ich sende   Es kommt an
01010101    00000001
10101010    00000000
00001111    00001111
11001111    00001111

Dieses Verhalten kann ich überhaupt nicht nachvollziehen. Am 595 sind
alle Pins beschaltet, außer Q7' (weil output). Die /RESET-Leitungen
sind miteinander verbunden, mit 10k-Pullup.
Am Aufbau scheint es auch gar nicht zu liegen, denn setze ich die
Leitungen manuell, dann funktioniert auch alles wunderbar. Ich habe die
SPI-Routine sowohl in C, als auch in ASM getestet, beide Male dasselbe
Ergebnis. Auch nen zweiten Mega8 hab ich schon getestet. Aber es bleibt
dabei: Manuell geht es wunderbar (also Hardware ist ok), aber per
Hardware-SPI schneidet er die Daten weg. Es kommen nur dann die
gleichen Daten raus, wenn vom LSB her nur Einsen stehen.

Ich hab das ganze im SPI Mode 0 und Mode 3 probiert... kommt dasselbe
bei raus. Sonst hab ich mich an die Beispiele im Datenblatt gehalten.

Hat jemand von Euch eine Ahnung, was da faul sein könnte? Ich kann die
Listings bei Bedarf anhängen, aber die sind so trivial, daß es wohl
nicht lohnt. Und wie gesagt, kein Unterschied zwischen C und ASM (in
letzterem fühl ich mich sicherer ;).

Danke für Hilfe, Tips und Hinweise!
Mark

von crazy horse (Gast)


Lesenswert?

häng mal an, sonst wird das nichts.
Hast du cpol und cpha beachtet?

von Haemi (Gast)


Angehängte Dateien:

Lesenswert?

Salut,

wie gesagt, Mode 0 und Mode 3. Der 595 läuft lt. Datenblatt im Mode 0.
Ergebnis war bei beiden Modi dasselbe.
Bin grad dabei, mein Oszi anzuheizen... will der Sache mal auf den
Grund gehen. Hab mal das .asm angehängt, das .c ist im Prinzip
dasselbe.

Hab ich vergessen, was zu initialisieren?

Danke!!

von Haemi (Gast)


Lesenswert?

Salut,

ok... Problem gefunden. Es war das, was ich irgendwie schon gestern
abend vermutet hatte, was mir aber dennoch sehr unwahrscheinlich
vorkam: Der 10k Pullup am /RESET scheint zu hoch zu sein. Schließ ich
ihn kurz, funktioniert's auch mit SPI wunderbar. Die Takte sind halt
mit SPI wesentlich länger. Daß sich das so extrem auf den /MR auswirkt,
hätte ich nicht gedacht. Aber ich habe SCK und /MR nebeneinander im
Kabel verlegt, und die /MR-Leitung sieht aufm Oszi wirklich
erschreckend aus.

Danke für Eure Hilfe. Auch an Andreas, den ich gestern abend im Chat
schon damit genervt habe. :)

Mark

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.