Проблема отрицательных температур - РЕШЕНА!И так, что бы понять, что и где меняет знак, я вывел данные из модуля в десятичном и двоичном коде (данные собраны с нескольких логов, которые были сгенерированы в разное время):
Как видно при переходе через ноль - появляется 1 в 20 разряде вычисляемой переменной Val1. Вот тут то и кроется корень зла. Это как раз и есть знаковый бит. Если в нём 1 - то температура отрицательная. Так же при переходе через 0 начинают врать давление и влажность.
Максимум который что может вычислить модуль - это 188,5 градусов, а минимум -143 градуса (+/- с моими коэффициентами dig_T1 - dig_T3).
Так же видно, что вычисляемая переменная Val2 - не может быть меньше 0.
По этому я добавил в код следующую строчку:
val1 = (((temper_raw>>3)-((int32_t)calibration_data.dig_T1<<1)))*((int32_t)calibration_data.dig_T2)>>11;
if (val1&(0x100000)) val1 |= 0xFFF00000;val2 = (((((temper_raw>>4)-((int32_t)calibration_data.dig_T1))*((temper_raw>>4)-((int32_t)calibration_data.dig_T1)))>> 12)*((int32_t)calibration_data.dig_T3))>>14;
получилось:
P.S. "Особо одаренным личностям" рекомендую сначала научиться читать, а затем писать.... Ну, если не получается одновременно.