www.mikrocontroller.net

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


Autor: Philip (Gast)
Datum:

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

Autor: ja (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Steht im Datenblatt schön erklärt.

Autor: Zacc (Gast)
Datum:

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

Autor: Sven P. (haku) Benutzerseite
Datum:

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

Autor: Philip (Gast)
Datum:

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

Autor: Sven P. (haku) Benutzerseite
Datum:

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

Autor: STK500-Besitzer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja.

Autor: Philip (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke ! :-D

Autor: Michael U. (amiga)
Datum:

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

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.