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

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.