UART Wert auf 16 bit Variable

Gast #3432073
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
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
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

Eine eigene Frage? Dieser Thread ist über 12 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.