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
Und sowas zu trennen benötigst Du ein Protokoll. Evtl. hilft Dir folgender Beitrag weiter: Beitrag "Bitte um Hilfe bei einer Protokollerstellung"
Ü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.
an sonsten kannst Du auch statt eines trennbytes eine Trennpause einbauen, vielleicht kannst Du die ja am PC detektieren...
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
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?
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.
> 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.
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.
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.