如何转换温度传感器的值?
我正在研究ST Temperature sensor( hts221 )
,我使用I2C
命令与传感器通信。
我从文档中看到如下文字。
enter code here Temperature data are expressed as TEMP_OUT_H & TEMP_OUT_L as 2's complement numbers.
以下图片是文档中的描述。
从传感器读取的Temperature data
如下所示
TEMP_OUT_L is 0xA8 TEMP_OUT_H is 0xFF
如何将TEMP_OUT_L和TEMP_OUT_H的值转换为温度数据?
提前致谢 ?
通过连接两个值中的位,形成一个16位值:
const temp_h = i2c_read_byte(TEMP_OUT_H); const temp_l = i2c_read_byte(TEMP_OUT_L); const uint16_t temp = (temp_h << 8) | temp_l;
这只是假设你有一个函数uint8_t i2c_read_byte(uint8_t address);
可以用来读出两个寄存器。
当然,下一步是将这个原始二进制数转换为某个适当单位的实际温度(如摄氏度或开尔文)。 为此,您需要数据表中的更多信息。
在数据表的第6页上,它说:
Temperature sensitivity 0.016 °C/LSB
所以这就是你需要做的:
#define TEMP_SENSITIVITY 0.016f #define TEMP_OFFSET ??? /* Get this value from the datasheet. */ unsigned char tempOutH; unsigned char tempOutL; /* Here you get the values for tempOutH and tempOutL. */ uint16_t tempData = (tempOutH << 8) | tempOutL; float temp = (tempData * TEMP_SENSITIVITY) + TEMP_OFFSET;
所以你要做的是连接两个8位高和低值。 这为您提供了一个16位值。 然后将0到65535之间的数字转换/缩放到实际温度值。
我假设数据表中必须有一个偏移,否则温度只能为正:介于0.0
和65363 * 0.016
。 该偏移量将为负值。 我把它留给你找到这个偏移量。
0xFFA8
0xFF
部分对我来说似乎很可疑,可能是设备配置为工作在8位模式(如果它甚至可能),在数据表的第24页上说它
T0和T1是实际校准温度值乘以8。
所以0xA8
除以8给出:31.25 – 你现在的气温不是吗?