Hallo, ich möchte 16-Bit Zahlen über RS232 verschicken und am PC diese Zahlen richtig auslesen. Leider klappts nicht. Die Reihenfolge der 8-Bits Parts ist nicht immer korrekt. Welche Abhilfe gibt es? Wie kann man es sicher realisieren?
Am besten schickst du ein start byte (zB 0x55), dann deine Daten, dann eine CRC Prüfsumme. Dann kann eigentlich nix mehr schief gehen. An sich sollte es auch gehen wenn du einfach deine beiden Bytes verschickst, die kommen immer in der gleichen Reihenfolge in den Buffer.
ja, das Problem ist beim Auslesen mit MatLab. Wie kann ich wissen, welcher Wert gehört zu welcher Variable? Und wie versendet man einen Startbyte?
Du wartest einfach so lange bis du 2 bytes empfangen hast, daraus baust du dir wieder deinen 16 bit wert. So lange du immer 2 bytes sendest und auf dem PC wieder einliest müsste das immer passen - problematisch wird es wenn der PC fälschlicherweise ein byte einliest. Das Startbyte würde vom controller verschickt werden und soll dazu dienen, das der PC weiss wann eine Datenübertragung beginnt.
Ist es eine hi-Byte Lo-Byte Vertauschung (big endian / little endian)? Welche Proz unterhalten sich miteinander? Hast Du nur 16Bit Werte?
Ich habe nur 16 Bit werte. Atmega tastet 10 verschiedene Sensoren und versendet in je Programmzyklus 10 Werte an den PC (MatLab). MatLab soll dann diese 10 Sensorwerte einlesen und verstehen welcher Wert zu welchem Sensor passt. Wie kann man das realisieren? 16Bit kann man in 2x8Bit einteilen und verschicken. Da kommt schon das Problem welches Byte MatLab als erstes empfängt und wie kann MatLab wissen welches Wert zu welchem Sensor passt?
Uzer wrote: > Ich habe nur 16 Bit werte. Atmega tastet 10 verschiedene Sensoren und > versendet in je Programmzyklus 10 Werte an den PC (MatLab). MatLab soll > dann diese 10 Sensorwerte einlesen und verstehen welcher Wert zu welchem > Sensor passt. Wie kann man das realisieren? > 16Bit kann man in 2x8Bit einteilen und verschicken. Da kommt schon das > Problem welches Byte MatLab als erstes empfängt und wie kann MatLab > wissen welches Wert zu welchem Sensor passt? Gar nicht! Gegenfrage: WoherweistdueigentlichimDeutschen,woeinbestimmtesWortanfängtund woeswiederaufhört.Antwort:DadurchdassdudirspezielleZeicheneinbaust, imKonkretensinddasLeerzeichenoderSatzzeichen,diedichbeimLesen leiten. Falls du das obige nicht lesen kannst, dann hast du genau dasselbe Problem wie dein Matlab. Der Abschnitt lautet: Woher weist du eigentlich im Deutschen, wo ein bestimmtes Wort anfängt und wo es wieder aufhört. Antwort: Dadurch dass du dir spezielle Zeichen einbaust, im Konkreten sind das Leerzeichen oder Satzzeichen, die dich beim Lesen leiten.
Danke für deine Antwort :) Ich verstehe, ich kann ein Leerzeichen dazwischen einbauen. Aber das löst das obige Problem trotzdem nicht.
Uzer wrote: > Danke für deine Antwort :) Ich verstehe, ich kann ein Leerzeichen > dazwischen einbauen. Aber das löst das obige Problem trotzdem nicht. Wer sagt, dass es immer ein Leerzeichen sein muss? Alles was du brauchst, ist ein bestimmtes Byte, welches den Empfänger beim Lesen leitet. Daher. Frage: Gibt es einen bestimmten Byte Wert, der in deinen Sensor-Daten nie vorkommen wird? Wenn ja: Super! Den kannst du benutzen, damit sich der Empfänger mit dem Sender synchronisieren kann (Sozusagen ist das der Punkt am Ende eines Satzes, der dem Empfänger mitteilt: Jetzt beginnt ein neuer Satz). Das könnte zb sein 2 0xFF Bytes hintereinander. Wenn der EMpfänger die sieht, weiß er, dass jetzt 20 Bytes kommen werden, wobei die ersten beiden Bytes vom Sensor 1 sind, die nächsten beiden vom Sensor 2, etc. Wenn nein: Schlecht. Dann ist binäre Übertragung nicht so gut geeignet. Wechsle über auf eien textuelle Übertragung. D.h. der Sender sendet einen String. Der könnte zb so aussehen "A0B10C1023D12E8F512G246H78I90J987K" Und die Bedeutung dieses Strings ist Sensor 1: 0 Sensor 6: 512 Sensor 2: 10 Sensor 7: 24 Sensor 3: 1023 Sensor 8: 78 Sensor 4: 12 Sensor 8: 90 Sensor 5: 8 Sensor 9: 987 Die Ziffernstrings werden von ihrer Textform wieder auf binär umgewandelt und können wunderbar weiterverarbeitet werden.
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.