Hallo zusammen,
könnte mir jemand einen Tipp geben, wie man am besten einen Integer mit
über SPI übertägt. Ich habe eine Möglichkeit gesehen (siehe Code). Dabei
wird der Integer in einen String kopiert und der String übertragen. Ist
es okay so? Gibt es eine bessere Möglichkeit?
1. Strings werden hier nicht verwendet. unsigned char[] ungleich
"String"
2. Solltest du sagen für welchen µC
3. RTFM, da steht drin wie man Daten über den SPI überträgt
4. C-Buch kaufen
den Code den du dir rausgesucht hast, teilt eine wohl einen long (int
kann 16 oder 32 bit lang sein, sollte man defenetiv beachten) in 4 chars
auf, da wohl der SPI nur einen Buffer für 8 Bit bereit hält.
MfG
Stefan
@Jean
Solange er nicht sagt, was für einen µC er verwendet, ist der C-Code nur
schön anzuschauen. Wenn man sich das char-Array anguckt, besteht schon
der berechtigte Verdacht, dass der int 32bit beträgt.
Danke für die Antworten!!!
1. Ok, danke für die Berichtigung mit dem Begriff "String", habe nicht
gewusst, welcher Begriff hier richtig ist. Etwa Character-Array?
2. Der Code ist für einen MSP430, um genau zu sein, MSP430F5418.
3. Das RTFM (wenn the f.... manual gemeint ist) habe ich gelesen. Ich
habe mir das Kapitel über das Comunication Interface im SPI-Mode ganz
durchgelesen. Das mit Transmit- und Receive-Buffer, die zugehörigen
Interrupt-Flags, SOMI-, SIMO-, CLK- und CS-Leitungen verstehe ich ja
alles. Ich fragte mich nur, wie man einen Integer mit Software geschickt
in 8-Bit-Stücke zerlegt, um die dann einzeln zu übertragen.
4. C-Buch habe ich. In einem C-Buch steht zwar welche Datentypen es gibt
und vieles mehr aber solche speziellen Sachen (ich meine jetzt die
Übertragung per SPI von Datentypen die nicht 8-Bit breit sind) stehen
wohl nicht in jedem C-Buch.
Den Beispiel-Code habe ich selbst geschrieben, weil die Funktion, aus
der ich die Idee habe viel umfangreicher ist (mit Header, Checksumme und
sontigem). Die Länge des Char-Arrays habe ich nur selbst dimensioniert,
ohne zu wissen aus wievielen Bits der Integer hier speziell besteht.
Der Vorschlang mit Union gefällt mir viel besser als der mit Pointer und
memcpy. Danke!!!
noips schrieb:
> 2. Der Code ist für einen MSP430, um genau zu sein, MSP430F5418.
D.h. also um 2 MSP miteinander zu verbinden.
Dann ist es egal, wie Du die Daten splittest, Du mußt es nur auf beiden
Seiten gleich tun.
Ich hoffe mal der MSP hat kein ungepuffertes SPI, wie leider die AVRs.
Ansonsten gibts richtig Ärger.
Ich würd ja lieber I2C nehmen, das kostet nur 2 Leitungen (SPI
mindestens 4).
Und Handshake ist automatisch mit drin.
Peter
>Ich würd ja lieber I2C nehmen, das kostet nur 2 Leitungen (SPI>mindestens 4).
Es soll SPI sein, weil in Zukunft noch AD-Wandler dazu kommen und alles
auf einem Bus hängen soll und die schnelleren AD-Wandler haben als
serielle Schnittstelle nur SPI, die mit I2C sind zu langsam.
noips schrieb:
> Es soll SPI sein, weil in Zukunft noch AD-Wandler dazu kommen
Dann solltest Du das Datenformat (Byte-Order, Bit-Order, SPI-Mode)
benutzen, welches der ADC hat, damit Du nicht alle Routinen doppelt
schreiben mußt.
Auch ist es für die Fehlersuche einfacher, wenn man auf einem Bus nicht
verschiedene Formate hat.
Peter
>Dann solltest Du das Datenformat (Byte-Order, Bit-Order, SPI-Mode)>benutzen, welches der ADC hat, damit Du nicht alle Routinen >doppeltschreiben
mußt.
Stimmt, das habe ich noch nicht bedacht. Danke!!