KNX: 16-Bit Float: negative Zahl

Gast #5871291
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
Gast #5871357
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...
Gast #5871411
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
1
Die Mantisse ist dann falsch. (2er Komplement)
2

3
0b1000 0100 0001 1000
4

5
Exponent-Bits löschen:
6

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

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

12

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

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