PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Übertragungsprotokoll problem mit Startbyte



DanielSan
12.06.2012, 21:33
Hi,

ich habe ein paar Sensoren an einem Atmel. Die Sensoren generieren einen 12bit Wert. Die Werte möchte ich an einen PC Senden. Ich habe mir also überlegt 2 Startbytes zu senden und dann immer ein Highbyte und ein Lowbyte. Der PC erkennt das Startbyte und zählt dann die Sensoren durch wobei er natürlich das High- und Lowbyte wieder zusammen setzt.

Mein Problem ist jetzt, das ich nicht weiss wie die Startbytes aussehen sollen. Ursprünglich dachte ich an "255;255". Aber wenn das letzte lowbyte der Übertragung auch "255" ist dann verzählt sich der PC doch!?

Beispiel einer Übertragungszeile (in DEZ):

255;255;20;124;............;5;255
Die Semikolons werden nicht übertragen, die dienen hier nur der Darstellung!

Wie kann ich jetzt die Startbytes wählen, das der PC sich nicht verzählt?
Die Werte einfach als ASCII Zeichen zu übertragen, kommt nicht in Frage. Ich habe den Ehrgeiz die Übertragung mit möglichst wenig Bytes durchzuführen.

Danke
Gruß Daniel

markusj
12.06.2012, 23:44
Stichwort: Escaping. Du musst in irgend einer Form differenzieren zwischen dem Startbyte und den Nutzdaten. Eine Möglichkeit ist Escaping, du definierst dir ein Sonderzeichen (255) und legst fest, dass 2xEscape den Start eines Pakets definiert. Escape+0 kann dann Beispielsweise den numerischen Wert 255 darstellen, das Protokoll erfordert also eine Übersetzung zwischen 255 in den Nutzdaten und Escape+0 im übertragenen Datenstrom.

Eine Alternative wäre ein etwas komplexeres (paketorientiertes) Protokoll, bei dem du nach Übertragungsbeginn mitteilst, wieviele Messwerte kommen. Dann kann der PC einfach mitzählen und läuft nicht Gefahr, Nutzdaten falsch zu interpretieren.

Noch ein letzter Gedanke: Bei 12-Bit-Werten (unsigned) hast du das Problem doch gar nicht! Da kann keine Sequenz von 2x255 auftreten, weil das 16 Bit wären. Eines der beiden Bytes wäre definitiv ungleich 255.

mfG
Markus