2014-09-01 3 views
0

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 

설명은 아래 그림과 같다.

enter image description here

그리고 보정 계수와 아래 그림과 같은 온도 변환의 예를 제공합니다,하지만 난 아직도 무슨 뜻인지 이해합니다. enter image description here enter image description here

누군가는 어떻게 센서에서 온도에 위의 값을 변환하는 방법을 가르쳐 수 있습니까? 나는 이것에 대해 잘 모른다 ... 미리 감사드립니다.

+0

반대 방향으로 가려고 할 때, 우리에게 보여 주었던 수치가 나왔을 때의 온도는 얼마입니까? –

+0

가능한 [온도 센서에서 값 가져 오기를 변환하는 방법?] (http://stackoverflow.com/questions/25322210/how-to-convert-the-value-get-from-temperature-sensor) – usr2564301

답변

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 개 비트 값입니다을, 그래서 당신은 레지스터에서 2 개 마지막 비트를 얻을 필요가 35

그럼 단순한 보간의

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)); 

참고 :

측정 된 온도를 얻을 수 있습니다

레지스터 번호 매기기는 16 진수이므로 레지스터 32, 33 및 35는 실제로 0x32, 0x33 및 0x35 레지스터입니다.

+1

필요 'T1/T0 msb' 레지스터의 일부 비트를 사용한다. – user694733

+0

@ user694733 감사합니다. 나는 내 대답을 고쳤다. –

+1

'(1 << 8) * (T1_T0msb & 0x0C)'가 너무 많이 이동했다고 생각합니다. '(T1_T0msb & 0x0C) << 6'이면 충분합니다. – user694733

관련 문제