Forum: Mikrocontroller und Digitale Elektronik Generelle Fragen zum SPI bei AVR


von Philip (Gast)


Lesenswert?

Hallo,
ich habe folgende Fragen:

Wenn ein AVR Controller als Master definiert wird kann er dennoch Daten 
empfangen - ist das richtig?

In welchem Register wird das empfangene byte gespeichert? Ich vermute 
SPDR (mega8) - aber da ist doch das gesendete byte?

Wie sehe ich das, dass der empfang abgeschossen ist?

Danke für die Hilfe...

von ja (Gast)


Lesenswert?

Steht im Datenblatt schön erklärt.

von Zacc (Gast)


Lesenswert?

Der Master definiert den Clock, den muss nicht kontinuierlich sein.
Das SPDR register ist ein doppelregister, lesen sieht das angekommene 
Byte, schreiben tut's in den ausgehenden Buffer. Es gibt ein Complete 
Flag.

von Sven P. (Gast)


Lesenswert?

Philip schrieb:
> Wenn ein AVR Controller als Master definiert wird kann er dennoch Daten
> empfangen - ist das richtig?
Ja.

> In welchem Register wird das empfangene byte gespeichert? Ich vermute
> SPDR (mega8) - aber da ist doch das gesendete byte?
Nein, das hast du ja gerade durch die Slaves durchgeschoben. Aus dem 
SPDR liest du das Byte, welches wärend des Sendens empfangen wurde.

> Wie sehe ich das, dass der empfang abgeschossen ist?
Dazu gibt es Interrupts und Interrupt-Merker, die ausführlich im 
Datenblatt beschrieben sind, u.A. SPIF.

von Philip (Gast)


Lesenswert?

danke erst mal für die Antworten... helfen mir schon weiter...

Sehe ich es richtig, dass diese Funktion sowohl ein byte schreibt als 
auch liest?

char ReadByteSPI(char cData)
{
   SPDR = cData;               //Load byte to Data register
   while(!(SPSR & (1<<SPIF)));    // Wait for transmission complete
   cData = SPDR;
   return cData;
}

von Sven P. (Gast)


Lesenswert?

Jeder_ SPI-Transfer liest _und schreibt ein Byte, das hat SPI so an 
sich. Es bleibt lediglich dir überlassen, ob du das gerade gelesene oder 
empfangene Byte auch verwertest.

Es ist mit dem SPI unmöglich, nur_ ein Byte zu _senden; du musst in 
diesem Fall ein Dummybyte senden.

von STK500-Besitzer (Gast)


Lesenswert?

Ja.

von Philip (Gast)


Lesenswert?

Danke ! :-D

von Michael U. (amiga)


Lesenswert?

Hallo,

Sven P. schrieb:
> Es ist mit dem SPI unmöglich, nur_ ein Byte zu _senden; du musst in
> diesem Fall ein Dummybyte senden.

Du meinst nur ein Byte zu _empfangen

Gruß aus Berlin
Michael

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.