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