Как преобразовать значение из датчика температуры?

Я работаю над Temperature sensor( hts221 ) 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); которые могут использоваться для считывания двух регистров.

Конечно, следующим шагом было бы преобразование этого необработанного двоичного числа в фактическую температуру в некотором правильном блоке (например, gradleусы objectiveсия или Кельвина). Для этого вам потребуется дополнительная информация из спецификации.

На странице 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 . Это смещение будет отрицательным. Я оставляю это для вас, чтобы найти это смещение.

0xFF часть 0xFFA8 кажется подозрительной для меня, возможно, устройство настроено на работу в 8-битном режиме (если это даже возможно), на странице 24 таблицы, о которой сказано

T0 и T1 – фактические значения температуры калибровки, умноженные на 8.

Итак, 0xA8 деленный на 8, дает: 31,25 – разве это не температура вокруг вас в настоящее время?