Forum: Mikrocontroller und Digitale Elektronik 'Trennzeichen' zwischen den Messwerten senden?


von Johannes (Gast)


Lesenswert?

hi,

mein µC sendet am ende einer messung alle messwerte zum pc.
das sind dann ca. 30 mal 6 bytes die bis jetzt einfach nacheinander 
übertragen werden.

macht es hier sinn ein trennbyte einzubauen? wenn ja welches? denn in 
den 6 byte vorher sind alle zustände von 0x00 bis 0xFF möglich und somit 
wäre das trennbyte nicht unbedingt von den richtigen daten zu 
unterscheiden?

gibts da eine lösung? oder einfach so lassen wie bis jetzt?

mfg, johannes

von Metaller (Gast)


Lesenswert?

Und sowas zu trennen benötigst Du ein Protokoll. Evtl. hilft Dir 
folgender Beitrag weiter: Beitrag "Bitte um Hilfe bei einer Protokollerstellung"

von Knut B. (Firma: TravelRec.) (travelrec) Benutzerseite


Lesenswert?

Übertrage die Messwerte nach dem ASCII-Standard, damit kannst Du alle 
Buchstaben, Ziffern und Sonderzeichen (Return und 
Zeilenabsatz/Wagenrücklauf) übertragen und einfach mit jedem 
x-beliebigen Terminalprogramm darstellen.

von Martin (Gast)


Lesenswert?

an sonsten kannst Du auch statt eines trennbytes eine Trennpause 
einbauen, vielleicht kannst Du die ja am PC detektieren...

von Johannes A. (Gast)


Lesenswert?

Solange Dein Controller den vollen 8bit-Bereich ausschöpft, hast Du auf 
der PC-Seite praktisch keine Chance, irgendwelche Trennbytes klar zu 
erkennen.

Ich würde daher, auch wenn es etwas mehr Aufwand bedeutet, wie Travel 
Rec vorschlagen, zur Übertragung der Werte druckbare ASCII-Zeichen zu 
verwenden, dann kannst Du zur String-Trennung alle üblichen 
Steuerzeichen wie CR, LF oder auch NUL verwenden, ohne Dir Sorgen um 
Misverständnisse zu machen.

Ansonsten besteht eigentlich nur die Möglichkeit, ein Blockprotokoll mit 
zumindest extra Längenbyte zu benutzen, das aber rein praktisch normal 
aufwendiger zu implementieren ist als die zuvor angesprochene Variante.

Gruß Johannes

von Johannes (Gast)


Lesenswert?

joa, das mit dem ascii hört sich auch nicht schlecht an.
aber wie mach ich das am besten in assembler, wenn ich das byte 0x8E 
oder 0b10001110 habe?

von mng (Gast)


Lesenswert?

Google mal nach "Consistent Overhead Byte Stuffing"... Eine ziemlich 
einfache und dennoch geniale Lösung, um sämtliche 0x00-Bytes aus den 
Nutzdaten herauszufiltern um die 0x00 dann als Trennzeichen verwenden zu 
können; und das bei annähernd garkeinem Overhead.

von Karl H. (kbuchegg)


Lesenswert?

> aber wie mach ich das am besten in assembler, wenn ich das byte 0x8E

Du nimmst das High-Nibble (4-Bit)
schiebst sie nach unten und

* wenns kleiner als 0A ist
    addierst den ASCII Code für '0'
* andernfalls
    addierst du den ASCII Code für 'A'

danach machst du dasselbe mit dem Low-Nibble

dadurch überträgst du 0x8E im Klartext zum Empfänger. 0x8E
wird als '8' 'E' übertragen und jedes Terminal schreibt dir
auch brav 8E hin. Sowas sollte eigentlich in jeden Werkzeugkasten
gehören.

von unsichtbarer WM-Rahul (Gast)


Lesenswert?

Man könnte die Datenübertragung ja auch mit einer "Präambel" starten, 
also einer Folge von Bytes, die nie oder eher/äusserst selten auftritt.
Die Klartext-Übertragung wie sie Karl-Heinz und andere schon ansprachen, 
wäre eine andere Möglichkeit.

von Sonic (Gast)


Lesenswert?

Ich betreibe seit 2002 einen Datenlogger mit 512k SRAM. Die Daten gehen 
binär, also der komplette Speicher am Stück, zum PC. Ich hatte in den 4 
Jahren noch keinen einzigen Fehler. Also wenn die Auswertung 
funktioniert würde ich nix ändern. Prüfungen würde ich nur einbauen, 
wenn's um lange Strecken oder Drahtlossysteme geht, ansonsten 
verlangsamt sich die Prozedur nur unnötig.

von Johannes (Gast)


Lesenswert?

habens grad geteste, scheint ganz gut ohne trennzeichen zu klappen

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.