UART Wert auf 16 bit Variable

Gast #3432073
Lesenswert?

Hallo ich hoffe ihr könnt mir helfen
ich will über den UART eine 16 bit Variable empfangen also 2 x 8 bit und 
diese mit switch/ case verarbeiten.  Nur spielt mein Atmega2560 da nicht 
mit. Es werden max. 8 bit immer verarbeitet.
Ein Befehl sieht zb. so aus 0xFFFF.
Ich wollte das ganze mit der peter fleury Bibliothek realisieren.
Ich lese den Wert mit uart_getc ();  ein.
Persönliche Seite #3432085
Lesenswert?

saschhaa schrieb:
> Ich lese den Wert mit uart_getc ();  ein.

Damit liest Du keinen 16-Bit-Wert ein.

Du muss den Wert als zwei 8-Bit-Werte übertragen und kombinieren.

Und dann solltest Du darüber nachdenken, wie Du sicherstellen kannst, 
daß die beiden 8-Bit-Werte auch wirklich in der richtigen Reihenfolge 
eintreffen ... und nicht der zweite 8-Bit-Wert einer Übertragung mit dem 
ersten 8-Bit-Wert der folgenden Übertragung zusammengefasst wird. 
Schließlich fangen nicht unbedingt beide Seiten der Übertragung zum 
exakt gleichen Zeitpunkt an zu laufen.

Das Stichwort lautet hier Übertragungsprotokoll.
Gast #3438634
Lesenswert?

saschhaa schrieb:
> Hallo ich hoffe ihr könnt mir helfen
> ich will über den UART eine 16 bit Variable empfangen also 2 x 8 bit und
> diese mit switch/ case verarbeiten.  Nur spielt mein Atmega2560 da nicht
> mit. Es werden max. 8 bit immer verarbeitet.
Mit memcpy geht das auch. Die zwei byte pufferst du in 8 Bit langen 
Variablen und kopierst sie per memcpy in das Highbyte des 16Bit Integers 
und dessen Lowbyte.
Kannst es auch reinshiften (ver-ORen mit 1 und dann nach links schieben 
High-Byte zuerst), je nachdem was schneller ist.

IIRC kannst du das Register des UART auch direkt auslesen, dann brauchst 
du die Hilfsvariablen gar nicht, zumindest eine nicht. Hat der UART 
nicht noch nen Puffer, IIRC gibt es einen "Trick" dort 2x8Bit zu 
bevorraten oder war es das USI, schau in die Doku des Prozessors.

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