我正在研究ST温度传感器(hts221),我使用I2C命令与传感器通信。 我是新来的......
我已引用Data sheet for HTS221,并从Sensor获取值。 但我不知道如何将该值转换为实际温度。
从传感器获取的值如下:
Read HTS221 TEMP_OUT_L: 0x2a value is 0x15
Read HTS221 TEMP_OUT_H: 0x2b value is 0xFF
Read HTS221 T0_degC_x8: 0x32 value is 0xBF
Read HTS221 T1_degC_x8: 0x33 value is 0xBF
Read HTS221 T1/T0 msb: 0x35 value is 0x4
Read HTS221 T0_OUT-3C: 0x3C value is 0x0
Read HTS221 T0_OUT-3D: 0x3D value is 0x0
Read HTS221 T1_OUT-3E: 0x3E value is 0x0
Read HTS221 T1_OUT-3F: 0x3F value is 0x0
温度寄存器的描述如下图所示。
它给出了校准系数和温度转换的例子,如下图所示,但我仍然明白其含义。
有人可以教我如何将上述值转换为传感器的温度吗? 我不知道这个...... 提前谢谢。
答案 0 :(得分:3)
您需要阅读以下校准寄存器:
T0_degC_x8 (Calibration register 32)
T1_degC_x8 (Calibration register 33)
T1_T0msb (Calibration register 35)
T0_OUT (Calibration register 3C and 3D)
T1_OUT (Calibration register 3E and 3F)
T0_degC_x8和T1_degC_x8是10位值,因此您需要从寄存器35中获取最后2位。
然后只需简单插值即可得到测量温度:
double T_DegC;
double T0_degC = (T0_degC_x8 + (1 << 8) * (T1_T0msb & 0x03)) / 8.0;
double T1_degC = (T1_degC_x8 + (1 << 6) * (T1_T0msb & 0x0C)) / 8.0; // Value is in 3rd and fourth bit, so we only need to shift this value 6 more bits.
T_DegC = (T0_degC + (T_OUT - T0_OUT) * (T1_degC - T0_degC) / (T1_OUT - T0_OUT));
注意:强>
寄存器编号是十六进制的,因此寄存器32,33和35实际上是寄存器0x32,0x33和0x35。