Forum: Mikrocontroller und Digitale Elektronik Data Conversion


von Florian (Gast)


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

von Jim M. (turboj)


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.

von G. H. (schufti)


Lesenswert?

na überleg mal:
wenn eine Zahl X multipliziert mit 100 einen Wert Y im Bereich Null bis 
Einhundert ergeben soll, welcher Art wird die X dann wohl sein?

Integer? Float? Float kleiner 1? Du hast vier Versuche ....

Edit: ok, zu spät

von Stefan K. (stefan64)


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

von Amateur (Gast)


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.

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
Noch kein Account? Hier anmelden.