Kommabinärzahl in lesbares umrechnen

Gast #3765558
Lesenswert?

Ich möchte die Binärausgabe eines MAX31855 auswerten. Das ist ein ein 
AuswerteIC für ein Typ K Thermoelement.

Das Datenblatt sagt, dass Bit D31 Bis D18 die Temperatudaten enthält 
wobei D31 das Vorzeichen ist und Bit D18 und D17 die beiden 
Nachkommestellen.

Ich frage micht nun wie ich mit einer Kommabinärzahl in C umgehen soll. 
Normalerweise deklairiere ich sie einfach als signed und gut ist. Wie 
kann ich das aber bei der Kommabinärzahl machen? Wie rechne ich sie am 
einfachsten in was lesbares um?

Vielen Dank im Voraus.
Gast #3765568
Lesenswert?

printf( "%d,%02d", vorkomma, nachkomma*25);

Nachkommastelle:
00b = 0.00
01b = 0.25
10b = 0.50
11b = 0.75

Du kannst natürlich auch eine 14 Bit zahl raus machen, alles mit 25 
Multiplizieren und hast dann die Temperatur in 0.01°C Einheiten.

3700 ist dann 37°C

Wie hättest Du es denn gerne?
Gast #3765583
Lesenswert?

Ok, meine Frage ist nun teils beantwortet.

Ich habe einen Wert:
sagen wir mal    11011,11

Mit dem Teil vor dem Komma geht der compiler ja wie gewohnt vor. Die 
erste 1 von rechts ist 2⁰ die zweite 2¹ usw. Aber ich weiss nicht wie 
ich dem Compiler sagen soll dass er die stellen hinter dem Komma eben 
anders gewichten soll. dann ist ja die erste Stelle nach dem Komma 2⁻¹ , 
zweite 2⁻² usw. Da hängt es eigentlich.
#3765608
Lesenswert?

Mike schrieb:
> Aber ich weiss nicht wie
> ich dem Compiler sagen soll dass er die stellen hinter dem Komma eben
> anders gewichten soll. dann ist ja die erste Stelle nach dem Komma 2⁻¹ ,
> zweite 2⁻² usw. Da hängt es eigentlich.
Dem Kompiler ist das egal, da der uC mit ganzen und Festkommazahlen 
gleich rechnet. Nur die funktion zur Ausgabe muss sie als Festkommazahl 
interpretieren.
Gast #3765613
Lesenswert?

Ich steh voll auf dem Schlauch.
Kann mir jemand Schritt für Schritt aufschreiben wie ich 11011,11 ins 
lesbare umrechne.MSB sei das Vorzeichen.


Im Datenblatt steht als Beispeil:

0000 0110 0100 11    entspricht   +100,25 °C
1111 1111 1111 00    entspricht   -1,0 °C
1111 1111 1111 11    entspricht   -0,25 °C

wie komme ich dort hin ?
Gast #3765626
Lesenswert?

Da steht:

0000 0110 0100 11    entspricht   +100,75 °C
1111 1111 1111 00    entspricht   -1,0 °C
1111 1111 1111 11    entspricht   -0,25 °C

Weil die ganze Zahl im 2er-Komplement vorliegt, mußt du bei negativem 
Vorzeichen die 2 Nachkomma-Bits negieren.
11 -> 01. D.h. 0,25. Alles passt!
#3765631
Lesenswert?

Mike schrieb:
> Im Datenblatt steht als Beispeil:
>
> 0000 0110 0100 11    entspricht   +100,25 °C
> 1111 1111 1111 00    entspricht   -1,0 °C
> 1111 1111 1111 11    entspricht   -0,25 °C

Das erste sollte aber 100.75°C sein?

Wenn du die Zahl*100/4 rechnest, hast du die Temperatur in Zentigrad,
z.B. 0000 0110 0100 11 = 403
     403*100=40300
     4030/4=10075

Für die negativen Temperaturen sieh dir mal das Zweierkomplement an.

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