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.
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?
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.
Du hast 2Bit, also 1/2 und 1/4. 0..3 * 25/100 ergibt dein Ergebnis. Und die 100 stecken in den 2 Stellen hinterm Komma beim printf(). Klarer?
Wenn Du mit float arbeiten willst: float f; int vorkommastelle = 0b11011; int nachkommastelle = 0b11; f = vorkommastelle + float(nachkommastelle) / 4;
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.
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 ?
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!
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.
:
Bearbeitet durch User
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.