16Bit über RS232

Persönliche Seite #814005
Lesenswert?

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.
Gast #814086
Lesenswert?

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?
#814119
Lesenswert?

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.
#814236
Lesenswert?

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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren