malthy
03.01.2015, 22:34
Moin!
Ich fummel gerade das RS232 Protokoll von einem älteren Thermometer auseinander. Praktisch funktioniert auch alles, allerdings habe ich ein Verständnisproblem, das mir irgendwie gerade keine Ruhe lässt. Die Sache ist eigentlich ziemlich simpel.
In dem Datenstrom ist der für mich relevante Temperaturwert in der Form ###.# °C in zwei Bytes BCD codiert repräsentiert. D. h. das untere (low) Nibble vom zweiten Byte gibt die Zehntelstellen an, das obere (high) Nibble gibt die Einerstellen an, das untere Nibble vom ersten Byte gibt die Zehnerstellen an, das obere Nibble des zweiten Bytes gibt die Hunderterstellen an. Das Vorzeichen wird in einem Bit eines anderes Bytes angezeigt. Nun das "Problem":
Dezimale Nullen im ersten Byte - dasjenige für Zehner- und Hunderterstelle - werden nicht etwa durch eine binäre Null (&b0000) sondern durch eine binäre 11 (&b1011) repräsentiert. Im zweiten Byte - dasjenige für die Einer- und Zehntelstelle - hingegen, so wie man es erwarten würde, durch eine binäre Null (&b0000). Im Auslesecode kann ich das natürlich ohne weiteres berücksichtigen und eine 11 als 0 lesen, das tue ich im Moment, und so funktioniert auch alles wunderbar. Aber verstehen würde ich es gerne noch ... Eine 10 für eine 0 hätte ich ja irgendwie noch einsehen können, aber eine 11? Hat jemand eine Idee dazu?
Dank&Gruß
Malte
P.S.: das Thema hätte man evnt auch bei "Software, Algorithmen und KI" einsortieren können, ich fand's hier wie dort nicht 100%ig passend ...
Ich fummel gerade das RS232 Protokoll von einem älteren Thermometer auseinander. Praktisch funktioniert auch alles, allerdings habe ich ein Verständnisproblem, das mir irgendwie gerade keine Ruhe lässt. Die Sache ist eigentlich ziemlich simpel.
In dem Datenstrom ist der für mich relevante Temperaturwert in der Form ###.# °C in zwei Bytes BCD codiert repräsentiert. D. h. das untere (low) Nibble vom zweiten Byte gibt die Zehntelstellen an, das obere (high) Nibble gibt die Einerstellen an, das untere Nibble vom ersten Byte gibt die Zehnerstellen an, das obere Nibble des zweiten Bytes gibt die Hunderterstellen an. Das Vorzeichen wird in einem Bit eines anderes Bytes angezeigt. Nun das "Problem":
Dezimale Nullen im ersten Byte - dasjenige für Zehner- und Hunderterstelle - werden nicht etwa durch eine binäre Null (&b0000) sondern durch eine binäre 11 (&b1011) repräsentiert. Im zweiten Byte - dasjenige für die Einer- und Zehntelstelle - hingegen, so wie man es erwarten würde, durch eine binäre Null (&b0000). Im Auslesecode kann ich das natürlich ohne weiteres berücksichtigen und eine 11 als 0 lesen, das tue ich im Moment, und so funktioniert auch alles wunderbar. Aber verstehen würde ich es gerne noch ... Eine 10 für eine 0 hätte ich ja irgendwie noch einsehen können, aber eine 11? Hat jemand eine Idee dazu?
Dank&Gruß
Malte
P.S.: das Thema hätte man evnt auch bei "Software, Algorithmen und KI" einsortieren können, ich fand's hier wie dort nicht 100%ig passend ...