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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.