Forum: Mikrocontroller und Digitale Elektronik 16bit-Wert per SPI versenden


von Hannes (Gast)


Lesenswert?

Hi Leuts,

ich hab einen SPI-Bus mit einem Master und drei Slaves. Einer der Slaves 
holt über den 16bit-ADC Messwerte, die über SPI an den Master gesendet 
werden sollen.

Wie würdet ihr die Daten vor dem Versenden Zwischenspeichern? Ich würde 
einen Fifo benutzen.  Aber ich stehe in erster Linie vor dem Problem des 
Versendends der Messwerte, weil SPI in einem Takt nur 8bit auf einmal 
überträgt und nicht 16bit.

Ich bin doch bestimmt nicht der erste mit diesem Problem. Falls ihr mir 
ein paar Tipps geben könntet, würde ich mich riesig drüber freuen.

von Mike A. (Gast)


Lesenswert?

Hannes schrieb:
> Aber ich stehe in erster Linie vor dem Problem des
> Versendends der Messwerte, weil SPI in einem Takt nur 8bit auf einmal
> überträgt und nicht 16bit.

Wie kommst du von PC-Programmierung auf SPI?
Was für eine Schnittstelle benutzt du am PC?
Und nein, SPI überträgt pro Takt genau ein Bit, bestimmt nicht 8 und 
auch nicht 16.

von Martin M. (capiman)


Lesenswert?

Da schickst du einfach 2 mal 8 Bit...

Jetzt ist natürlich die Frage, wie du erkennen kannst,
welche der 8 Bit das 1. oder 2. Byte sind.

Der Master muss (mindestens) 2 Dummy-Bytes senden,
damit der Slave 2 Bytes zurücksenden kann.
Normalerweise wird jetzt CS (vom Master generiert)
am Anfang auf 0 gesetzt, dann wird der
entsprechende Slave angesprochen.
Dieser sendet jetzt zuerst das erste Byte, dann das zweite Byte.
Dann, wenn der Transfer beendet ist, CS wieder auf 1.

Reihenfolge ist dann natürlich beliebig.
Du kannst auch mehr wie 2 Bytes übertragen und
z.B. deine Daten erst in das 2. und 3. Byte packen.

von Hannes (Gast)


Lesenswert?

Mike A. schrieb:
> Was für eine Schnittstelle benutzt du am PC?

Mein PC hat eine SPI-Schnittstelle.

Mike A. schrieb:
> Und nein, SPI überträgt pro Takt genau ein Bit

Das ist Definitionssache. Da ich den Hardware-SPI benutze, schreibe ich 
in einem Takt die ganzen 8bit in das SPI-Register. Dass der Master 8 mal 
steigende und fallende Flanken über Clock sendet hast Du wahrscheinlich 
gemeint.

Martin Maurer schrieb:
> Da schickst du einfach 2 mal 8 Bit...

Danke für Deinen Beitrag - ich glaube, dass ich Dein Prinzip verstanden 
hab.

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.