mikrocontroller.net

Forum: Haus & Smart Home KNX: 16-Bit Float: negative Zahl


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
Autor: Holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich habe gerade ein Projekt, bei dem ich KNX-Daten mit einem µC 
auswerten muß.

Die Temperatur wird in 16-Bit Gleitkomma übertragen (DPT09), wobei die 
Aufteilung der Bits bei KNX etwas "besonders" ist:

Bit 0...10: Mantisse (11 Bit)
Bit 11..14: Exponent (4 Bit)
Bit 15: Vorzeichen (1 Bit)

Die KNX-Berechnung des Temperaturwertes ist wie folgt:
Mantisse * 0,01 * 2^Exponent

Positive Werte sind mir klar, aber wie ist das mit negativen Zahlen? Ich 
hätte erwartet, daß der einzige Unterschied das 15. Byte ist, scheint 
aber nicht so zu sein. Hier z.B. folgende KNX-Werte:
-1°C:  KNX-Wert 0x899C
-2°C:  KNX-Wert 0x8738
-3°C:  KNX-Wert 0x86D4
-10°C:  KNX-Wert 0x8418
-20°C:  KNX-Wert 0x8030
-30°C:  KNX-Wert 0x8A24

Wie komme ich vom KNX-Wert auf die entsprechende negative Temperatur?

Grüße
Holger

Autor: Max M. (jens2001)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Holger schrieb:
> hätte erwartet, daß der einzige Unterschied das 15. Byte ist, scheint
> aber nicht so zu sein.

Wiso?


> Wie komme ich vom KNX-Wert auf die entsprechende negative Temperatur?

Hast du's mal mit rechnen versucht?

Mal die Bits auf, separier sie nach V,E,M.
und rechne aus.

: Bearbeitet durch User
Autor: Holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Max M.

mache ich einen Fehler? Hier ein Beispiel:

Beispiel -10°C:
0x8418 = 0b1000 0100 0001 1000
Vorzeichen: 1 (Minus)
Exponent: 0b0000
Mantisse: 0b100 0001 1000  ==> 524 (dezimal)

Mantisse * 0,01 * 2^Exponent
524 * 0,01 * 2^0 = 5,24

==> 5,24 ist nicht 10...

Autor: Holger (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Habe was gefunden (siehe Anhang). Das mit " two’s complement notation" 
(zweierkomplement) bringt mich auch nicht wirklich weiter.

Irgend wie stehe ich auf dem Schlauch...

Autor: Walter T. (nicolas)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Holger schrieb:
> Das mit " two’s complement notation"
> (zweierkomplement) bringt mich auch nicht wirklich weiter.




-2^11+0x418 * 2^0 -> -1000 Klingt doch sinnvoll.
-2^11+0x224 * 2^1 -> -3000. Passt auch bei den anderen.

: Bearbeitet durch User
Autor: zitter_ned_aso (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Holger schrieb:
> Beispiel -10°C:
> 0x8418 = 0b1000 0100 0001 1000
> Vorzeichen: 1 (Minus)
> Exponent: 0b0000
> Mantisse: 0b100 0001 1000  ==> 524 (dezimal)
>
> Mantisse * 0,01 * 2^Exponent
> 524 * 0,01 * 2^0 = 5,24
Die Mantisse ist dann falsch. (2er Komplement)

0b1000 0100 0001 1000

Exponent-Bits löschen:

0b1xxx x10000011000 = 0b1100 0001 1000 (2er Komplement-Darstellung der Mantisse)

Umwandeln (eine 1 dazu addieren und alles negieren) liefert:
Mantisse=-1000


-1000*0,01*2^0=-10


Autor: Walter T. (nicolas)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mist. Klammern vergessen bei dem ganzen Herumgeeditiere.

Autor: zitter_ned_aso (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hier kannst du von 2er Komplement nach dezimal umwandeln:

https://www.exploringbinary.com/twos-complement-converter/

(hoffentlich rechnet es korrekt ;-)

Autor: Holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
jetzt ist alles klar. Vielen Dank!

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.