SPI Abfrage korrekt ?

Gast
Ich weiß ja nicht, was für einen Controller Du verwendest... Beim MSP430
muß man zum Lesen erst ein Byte schreiben, damit der Takt vom MSP
generiert wird. Sonst kommt immer 'ne Null rein.
Gast
Wie gesagt, beim Empfangen mußt Du gleichzeitig was senden (0xFF). Halte
doch beim Empfangen mal das Oszi an die Clock - Leitung und gucke, ob
die auch so arbeitet wie sie soll...
Gast
Hi.

Wie Johannes schon erwähnt hat musst du tatsächlich zum lesen eines
bytes vorher (eigentlich währenddessen) ein Byte schreiben. Der 74HC165
kann nur als Slave arbeiten und somit ist der ATM32 der SPI-Master und
ist dafür zuständig den Takt zu generieren. Dieser tut das allerdings
nur wenn er Daten sendet.

Beispiel (wie es ist den meisten fällen abläuft):

// Kommando an den Slave senden damit dieser weiss das er dir mit der
folgenden Taktung Daten schicken soll
SPDR = 0x..;
// Beliebige Daten senden damit der uC dem slave einen Takt zum Daten
senden bereitstellt
SPDR = 0xFF;
// während 0xFF gesendet wird wird "zeitgleich" das Datenbyte vom
74HC165 empfangen
data = SPDR;

Es sei angemerkt das der SPDR Register für den Empfang ein anderer ist
als der für das Senden. Somit wird im obigen beispiel nicht
gleichzeitig lesend und schreibend auf ein und den selben SPDR register
zugegriffen wie es den Anschein hat.

Rev
Gast
Da es einen FIFO gibt würde ich sagen: Ja. Im Datenblatt steht ja auch
"Full Duplex". Leider gibt's da kein Codebeispiel zum Empfangen über
SPI als Master. Aber Du kannst das mit dem Senden einfach mal
ausprobieren.
Das Oszi kannst Du evtl. auch durch einen Kopfhörer mit
Entkoppelungskondensator ersetzen.
Pullup an Port B, Pin 3 ist aus?
Gast
Hmm, also ich denke, ohne Oszi mit uCs zu entwickeln, ist ziemlich
schwierig... Wenn nicht gar unmöglich, wenn man das Echtzeitverhalten
von Pins betrachten muss.

Stephan.
Gast
Naja, bei SPI ist das wenig problematisch da der uC in diesem Fall ja
für einen Sauberen Takt sorgt.
Allerdings geb ich Stephan recht das ein Oszi extrem hilfreich sein
kann....ein Digitales in erster Linie ist schon echt was nettes.
Gast
"Hmm, also ich denke, ohne Oszi mit uCs zu entwickeln, ist ziemlich
schwierig"


Ich würde eher sagen: "ohne Datenblatt mit uCs zu entwickeln, ist
ziemlich schwierig"


Erstmal muß man das SPI initialisieren.

Dann muß man den 165 parallel einlesen und dann wieder auf seriell
Schieben umschalten.

Und dann erst kann man schieben (Dummy-Byte reinschreiben: SPDR = 0;).

Dann wartet man, bis das Schieben vorbei ist (festes Delay oder
Busy-Bit testen).

Und jetzt kann man auch was sinnvolles auslesen.


Nur "data = SPDR;" muß daher unbedingt gegen den Baum gehen.


Peter

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 21 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.