Dev #1

Merged
Mikhail merged 2 commits from Dev into main 2026-06-30 07:07:31 -04:00
2 changed files with 40 additions and 1 deletions
Showing only changes of commit 76df3b7bf9 - Show all commits
+5
View File
@@ -17,5 +17,10 @@
#include "stm32l1xx_hal.h" #include "stm32l1xx_hal.h"
#endif #endif
/**
* Возвращает температуру в миллиградусах Цельсия (1/1000 °C)
* Пример: 25500 означает 25.5°C
*/
int32_t DS_TMP112_ReadTemperature(I2C_HandleTypeDef *hi2c);
#endif //DS_TMP112_H #endif //DS_TMP112_H
+34
View File
@@ -1 +1,35 @@
#include <DS_TMP112.h> #include <DS_TMP112.h>
int32_t DS_TMP112_ReadTemperature(I2C_HandleTypeDef *hi2c)
{
// Адрес TMP112 (обычно 0x48 << 1, если ножка ADD0 на GND)
#define TMP112_ADDR (0x48 << 1)
#define TMP112_REG_TEMP 0x00
uint8_t data[2];
int16_t raw;
// Читаем 2 байта из регистра температуры
if (HAL_I2C_Mem_Read(hi2c, TMP112_ADDR, TMP112_REG_TEMP, I2C_MEMADD_SIZE_8BIT, data, 2, 100) != HAL_OK) {
return -999000; // Ошибка чтения
}
// Объединяем байты: MSB — это целая часть, LSB — дробная (4 верхних бита)
raw = (data[0] << 4) | (data[1] >> 4);
// Поддержка отрицательных температур (12-битное число с дополнением до 2)
if (raw > 0x7FF) {
raw -= 4096;
}
// Шаг датчика 0.0625°C (или raw / 16)
//return (float)raw * 0.0625f;
// Расчет в целых числах:
// Один шаг (LSB) = 0.0625°C = 1/16°C
// Чтобы получить миллиградусы: (raw * 1000) / 16
// Это эквивалентно: raw * 62.5. Используем raw * 125 / 2
return (int32_t)raw * 125 / 2;
}