如何转换温度传感器的值?

时间:2014-08-15 06:36:12

标签: c sensor i2c

我正在研究ST Temperature sensor( hts221 ),我使用I2C命令与传感器进行通信。

我从文档中看到如下文字。

enter code here Temperature data are expressed as TEMP_OUT_H & TEMP_OUT_L as 2’s complement numbers.

以下图片是文件中的描述。 enter image description here

从传感器读取的Temperature data如下所示

TEMP_OUT_L is 0xA8
TEMP_OUT_H is 0xFF

如何将TEMP_OUT_L和TEMP_OUT_H的值转换为温度数据?

提前致谢?

3 个答案:

答案 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.065363 * 0.016之间。该偏移量将为负值。我把它留给你找到这个偏移。

答案 2 :(得分:0)

0xFF 0xFFA8的一部分对我来说似乎很可疑,可能是设备配置为在8位模式下工作(如果它甚至可能),在{24页}上{3}}它说

  

T0和T1是实际校准温度值乘以   8。

所以0xA8除以8得出:31.25 - 目前你周围的气温是不是?