-         
Ergebnis 1 bis 8 von 8

Thema: Darstellung der Null in BCD

  1. #1
    Erfahrener Benutzer Roboter Genie Avatar von malthy
    Registriert seit
    19.04.2004
    Ort
    Oldenburg
    Beiträge
    1.379

    Darstellung der Null in BCD

    Anzeige

    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 ...

  2. #2
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    27.08.2013
    Ort
    Region Basel
    Alter
    60
    Beiträge
    2.435
    Hallo Malte,

    Norm was das nie!

    Aber mit der 10 (0xA) kann es die Kombination 0x0A geben, welches das Steuerzeichen für LF ist.
    0x0D (CR) kann ja nicht vorkommen.
    0x00 wird als NUL, interpretiert, welches einfach unterschalgen wird.

    Die einfachsten Betriebssystem-Treiber für ASCII interpretieren aber NUK, CR und LF und im Binärmode wollte der Programmierer den Kanal wohl nicht öffnen ()oder es wusste nicht wie) ...

    MfG Peter(TOO)
    Manchmal frage ich mich, wieso meine Generation Geräte ohne Simulation entwickeln konnte?

  3. #3
    Erfahrener Benutzer Roboter Genie Avatar von malthy
    Registriert seit
    19.04.2004
    Ort
    Oldenburg
    Beiträge
    1.379
    Hallo Peter,

    vielen Dank! Aber ich kann Dir nicht ganz folgen. Das Protokoll von dem Thermometer ist für meinen Geschmack insgesamt etwas seltsam - wobei mir zugegebenermaßen die reichhaltige Erfahrung fehlt, was solche Protokolle angeht.

    Es kommen in der Steuerung des Thermometers grundsätzlich keine "klassischen" Steuerzeichen vor. Die Übertragung eines o.g. Datums wird mit ASCII 65 ('A') initiiert - ohne jede/s weitere/n Steuerzeichen. Das Antwortpaket des Thermometers darauf besteht aus 8 Bytes. Zwei von den Bytes enthalten in o.g. Weise die Daten. Und es sind ja wie gesagt auch Null-Bytes enthalten, zB für 20.0°C wäre des zweite Byte 0 (&b00000000). Das Datenpaket wird wiederrum nicht von irgendwelchen klassischen Steuerzeichen terminiert, es ist eingerahmt von einer '2' am Beginn des Paketes und einer '3' am Ende ...

    Gruß
    Malte

  4. #4
    Erfahrener Benutzer Robotik Einstein Avatar von i_make_it
    Registriert seit
    29.07.2008
    Ort
    Raum DA
    Alter
    49
    Beiträge
    2.812
    Ich denke nicht das es wegen ASCII Steuerzeichen ist. könnte eher sein um sowohl in Intel als auch in Motorola Darstellung das höherwertige Byte identifizieren zu können.
    http://de.wikipedia.org/wiki/Byte-Reihenfolge

  5. #5
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    07.03.2011
    Beiträge
    1.484
    Ich hätte da eine andere Idee: 0b1011 steht für ein Blank, die ganze Message ist direkt für ein mäßig intelligentes Display zur Unterdrückung führender Nullen gedacht. Man könnte das testen, indem man einen Wert größer 100 versucht darzustellen. Der Code müsste dann 0b00010000 lauten.

    MfG Klebwax
    Strom fließt auch durch krumme Drähte !

  6. #6
    Erfahrener Benutzer Roboter Genie Avatar von malthy
    Registriert seit
    19.04.2004
    Ort
    Oldenburg
    Beiträge
    1.379
    0b1011 steht für ein Blank
    Ha! Das ist eine sehr gute Idee! Das macht wirklich Sinn, und so verhält sich das Display auf dem Gerät auch: die führenden Nullen werden da nämlich nicht dargestellt. Das überzeugt mich!

    Danke sehr!
    Malte

  7. #7
    Erfahrener Benutzer Robotik Einstein Avatar von i_make_it
    Registriert seit
    29.07.2008
    Ort
    Raum DA
    Alter
    49
    Beiträge
    2.812
    Ich hatte einen Denkfehler

    Könnte aber eventuell mit der Signalcodierung bei RS232 zu tun haben.
    Bei einer und zehntel stellen ändert sich doch eher mal der Wert.
    Bei zehner und Hunderter Stellen nicht unbedingt so oft.
    Wenn man die "0" mit einer Bitfolge ungleich "00000000" codiert wird der Gleichspannungsanteil in der Übertragung bei temperaturen unter 10° kleiner.

  8. #8
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    27.08.2013
    Ort
    Region Basel
    Alter
    60
    Beiträge
    2.435
    Hallo Malte,
    Zitat Zitat von malthy Beitrag anzeigen
    Es kommen in der Steuerung des Thermometers grundsätzlich keine "klassischen" Steuerzeichen vor. Die Übertragung eines o.g. Datums wird mit ASCII 65 ('A') initiiert - ohne jede/s weitere/n Steuerzeichen. Das Antwortpaket des Thermometers darauf besteht aus 8 Bytes. Zwei von den Bytes enthalten in o.g. Weise die Daten. Und es sind ja wie gesagt auch Null-Bytes enthalten, zB für 20.0°C wäre des zweite Byte 0 (&b00000000). Das Datenpaket wird wiederrum nicht von irgendwelchen klassischen Steuerzeichen terminiert, es ist eingerahmt von einer '2' am Beginn des Paketes und einer '3' am Ende ...
    Wie sieht so ein ganzes 8-Byte Telegramm aus?

    Manchmal ist es nicht nachvollziehbar, was in den Köpfen von Programmierern abgelaufen ist ...
    Möglich ist auch, dass es da um Kompatibilität mit einem Vorgänger-Gerät geht. Je nach Alter kann das auch noch ohne µC gebaut gewesen sein.

    MfG Peter(TOO)
    Manchmal frage ich mich, wieso meine Generation Geräte ohne Simulation entwickeln konnte?

Ähnliche Themen

  1. [ERLEDIGT] Null durch Null ist was?
    Von robo_tom_24 im Forum Kopfnüsse / Wissensquiz
    Antworten: 8
    Letzter Beitrag: 10.11.2012, 13:55
  2. Subtrahieren unter Null
    Von BlaueLed im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 10
    Letzter Beitrag: 15.02.2010, 14:20
  3. division durch null
    Von manhunt im Forum C - Programmierung (GCC u.a.)
    Antworten: 2
    Letzter Beitrag: 08.02.2009, 19:24
  4. Muss der MOS 4543 (BCD)zum 7Seg eine Strombegrenzung haben?
    Von dibahh im Forum AVR Hardwarethemen
    Antworten: 1
    Letzter Beitrag: 24.08.2006, 17:21
  5. absolut Null Ahnung
    Von opl im Forum Allgemeines zum Thema Roboter / Modellbau
    Antworten: 2
    Letzter Beitrag: 12.03.2005, 16:33

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •