www.mikrocontroller.net

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


Autor: Haemi (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: crazy horse (Gast)
Datum:

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

Autor: Haemi (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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!!

Autor: Haemi (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.