Gast
#4976861
Hallo zusammen, ich habe einen NXP MPL3115A2 mit einem AVR 328 p. Laut Datenblatt wird der Temperaturmesswert in 2 Registern mit der Adresse 0x4h und 0x5h gespeichert. http://www.nxp.com/assets/documents/data/en/data-sheets/MPL3115A2.pdf The temperature data is stored as a signed 12-bit integer with a fractional part. The OUT_T_MSB (04h) register contains the integer part in °C and the OUT_T_LSB (05h) register contains the fractional part. This value is representative as a Q8.4 fixed point format where there are eight integer bits (including the signed bit) and four fractional bits. Heisst also, in Register 4 steht der Teil vor dem Komma, inclusive Vorzeichen. Wie darf ich mir das dann vorstellen? ist das dann ein in Bit 7 ein Vorzeichenbit und in bit 6...0 ein Wert von 0..127? Im Zweiten Byte 0x05 stehen dann die Nachkommastellen mit 4Bit left adjusted. Die 4 LSB sind leer. Mein Problem ist dass ich nicht ganz verstehe wie der Datentyp float bei Arduino funktioniert und ich generell auch nicht genau verstehe wie die Konversion funktioniert. Im Beispielcode wird das ganze erst in einen 16 bit integer kopiert: int16_t t; t = Wire.read(); // receive DATA t <<= 8; t |= Wire.read(); // receive DATA t >>= 4; Jetzt steht ja das ja quasi als signed integer da drin, die ersten 4 MSB sind leer, oder? float temp = t; temp /= 16.0; Jetzt wird durch 16 geteilt, durch den Punkt ist eine Floating point operation forciert. Und ich teile durch 16, weil durch 16 teilen das gleiche ist wie 4 bit nach links schieben und ich damit die 4 nachkommastellen-bits in den nachkommabreich verschiebe? aber genau da hört mein Verständnis auf weil ich nicht genau weiss wie die 32Bit der float auf arudino funktioniert. wenn mir das einer erklären könnte wäre super.. grüße und danke.