Data Conversion

Gast #4271644
Lesenswert?
• ▲
▼
Hallöchen,

ich bekomme von meinem Feuchtigkeitssensor Daten in Buffer. Daten aus 
zwei Buffereinträgen müssen nach folgender Formel zusammengebracht 
werden:

((RH_High[5:0]*256 + RH_LOW[7:0])/2^14) * 100

Es ergibt sich beispielsweise ein 16 Bit-Wert von 0010100110011001 bevor 
mit 14 geshiftet wird. Problem ist jetzt aber das shiften um 14. Danach 
habe ich doch einen Wert von null, oder? Weil alle Nachkommastellen 
wegfallen.

Muss ich da mit Gleitkommazahlen arbeiten?

Grüße,

Florian
#4271654
Lesenswert?
• ▲
▼
Festkomma würde hier reichen, also int32_t. Ist auf µCs of besser als 
float.

Achtung:
Die Formel vom OP funktioniert nur als float, für Festkomma müsste man 
anders shiften. Es wird eine Zahl zwischen 0 und 1 ausgerechnet und mit 
100 für den Prozentwert multipliziert.
#4271669
Lesenswert?
• ▲
▼
Ich verstehe den TE-Post so, daß das eine Formel aus einem 
Sensor-Datenblatt ist. Und die scheint nicht ganz richtig zu sein. Es 
fehlt ein cast von (RH_High[5:0]*256 + RH_LOW[7:0]) auf float, damit die 
Formel funktioniert, oder  man entzerrt das Ganze etwas:

float rawVal = RH_High[5:0]*256 + RH_LOW[7:0];  // == 0 .. 0.9999..
float erg    = (rawVal / 2^14) * 100;           // == 0 .. 99.99..

Gruß, Stefan
Gast #4271682
Lesenswert?
• ▲
▼
Wozu die armen Bits durch die Gegend schubsen?

Du hast (bekommst) einen 16-Bit-Wert mit 14 Interessanten Stellen. Wozu 
diesen versauen.
Schiebst Du den 14 Mal nach rechts und multiplizierst Du das Ergebnis 
mit 100, so bekommst Du konstant Null.
Rechnest Du anders herum bleibt auch nicht viel mehr über.
Also freu' dich über die 14 vielleicht gültigen Bit und Fummel nur dann 
daran herum, wenn Du es brauchst.
Für eine, von Menschen lesbare, Anzeige kannst Du explizit den Wert, 
eventuell mit Hilfe von Ganzzahlarithmetik umstellen.
Übrigens die meisten µP lieben 16 Bit. Die Speicherverwaltung ebenfalls.

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.