我正在研究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的值转换为温度数据?
提前致谢?
答案 0 :(得分:2)
通过连接两个值中的位,形成一个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);
可以用来读出两个寄存器。
当然,下一步是将这个原始二进制数转换为某个适当单位的实际温度(如摄氏度或开尔文)。为此,您需要从数据表中获取更多信息。
答案 1 :(得分:2)
在datasheet的第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
之间。该偏移量将为负值。我把它留给你找到这个偏移。
答案 2 :(得分:0)
0xFF
0xFFA8
的一部分对我来说似乎很可疑,可能是设备配置为在8位模式下工作(如果它甚至可能),在{24页}上{3}}它说
T0和T1是实际校准温度值乘以 8。
所以0xA8
除以8得出:31.25 - 目前你周围的气温是不是?