Forum: Compiler & IDEs UART Kommunikationsprotokoll


von Peter E. (paritybit)


Lesenswert?

Hallo ans Forum,

seit kurzem beschäftige ich mich mit der seriellen Schnittstelle (UART) 
der ATMega-Reihe. Den UART zu Initialisieren und zu betreiben ist Dank 
Manual und diesem Forum eigentlich nicht schwer.

Zur Zeit schaffe ich es Zeichen oder auch Strings von einem µC an den 
anderen zu übergeben. Testweise auch an einen UART/USB Wandler und mit 
einem Hyperterminal als 2ter µC Ersatz.
Nun möchte ich einen Schritt weiter gehen und eine Art 
Kommunikationsprotokoll aufbauen. In einem sehr simplen Verfahren 
funktioniert das schon. Dazu wird das einzelne empfangene Byte mit einer 
IF-Schleife auf 2 Bits kontrolliert (Minimaler Aufwand zum Test) und 
entsprechend vom µC ausgeführt.

Mein gewünschtes Protokoll (angelehnt an den I²C-BUS) besteht aus 
4-Byte. Es soll zu erst ein Adressbyte, 1 Befehlsbyte, 1 Datenbyte und 
zum Schluss ein CRC8-Byte beinhalten. Die Kontrolle des CRC8-Bytes würde 
ich im ersten Schritt unter den Tisch fallen lassen, da es mir in erster 
Linie um die Verarbeitung des Datenrahms geht.

Nun möchte ich euch gerne Fragen wie man dies Umsetzen kann?

Rein logisch müssen die 4 Byte erst einmal irgendwie gesammelt und im 
nachhinein irgendwie ausgewertet werden. Kann man hier trotzdem mit dem 
Interrupthandler "ISR(USART_RX_vect)" arbeiten? Stehe irgendwie auf dem 
Schlauch.

Hinweise:
-> Für die Berechnung von CRC8 habe ich bereits eine Routine im Internet 
gefunden.
-> meine bevorzugte Programmiersprache ist C in der AtmelStudio 6.0 
Umgebung

Vielen Dank
Paritybit

von Timmo H. (masterfx)


Lesenswert?

Peter E. schrieb:
> Dazu wird das einzelne empfangene Byte mit einer
> IF-Schleife auf 2 Bits kontrolliert (Minimaler Aufwand zum Test) und
> entsprechend vom µC ausgeführt.
http://www.if-schleife.de/

> Rein logisch müssen die 4 Byte erst einmal irgendwie gesammelt und im
> nachhinein irgendwie ausgewertet werden. Kann man hier trotzdem mit dem
> Interrupthandler "ISR(USART_RX_vect)" arbeiten? Stehe irgendwie auf dem
> Schlauch.
Du kannst in der RX ISR einfach die empfangenen Daten in einen Buffer 
schreiben und dann in der Main (oder wo auch immer) schauen ob deine 
Start und Endbedingung eingetrudelt sind. Also z.B. ein Byte mit Start 
und Ende-Kennung (wo ei \n,\r, EOF oder was weiß ich).

> Hinweise:
> -> Für die Berechnung von CRC8 habe ich bereits eine Routine im Internet
> gefunden.
i.d.R. reicht auch einfach ein XOR über das Datenpacket.

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.