SPI Abfrage korrekt ?

Gast #175928
Lesenswert?
• ▲
▼
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 #175929
Lesenswert?
• ▲
▼
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 #175931
Lesenswert?
• ▲
▼
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 #175932
Lesenswert?
• ▲
▼
"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

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren