# Драйвер высокоточного датчика температуры DS_TMP112 Низкоуровневый драйвер на Си для работы с ультракомпактным цифровым датчиком температуры **TMP112** (а также совместимыми TMP102 / TMP112A/B) по интерфейсу I2C. Датчик обладает высокой точностью (до 0.5°C) и возможностью работы в 12-битном или 13-битном (Extended) режимах. ## 📌 Особенности реализации * **Объектно-ориентированный дескриптор**: Драйвер инкапсулирует конфигурацию и указатель на шину I2C, позволяя опрашивать несколько физических датчиков TMP112 на разных адресах. * **Прямая оцифровка**: Функция чтения автоматически собирает два байта данных из регистра температуры (`0x00`), учитывая формат Big-Endian и знаковые биты (дополнение до двух), возвращая готовое вещественное значение температуры. * **Минимальное энергопотребление**: Поддержка перевода датчика в режим Shutdown Mode для экономии батарейного питания между замерами. --- ## 🚀 Способ добавления в ваш проект (Git Submodule) Библиотека подключается к вашему текущему проекту как подмодуль Git. Это позволяет фиксировать рабочую версию драйвера и обновлять её независимо от основного кода. ### 1. Подключение подмодуля Откройте терминал в корневом каталоге вашего проекта и выполните команду: ```bash git submodule add https://git.domstudent.ru/Library/DS_TMP112 Library/DS_TMP112 ``` *После этого Git создаст в папке `Library/` директорию `DS_TMP112` и скачает актуальные файлы драйвера.* ### 2. Автоматическое обновление сборки CMake Перейдите в папку с вашими автоматизированными утилитами и запустите PowerShell-скрипт обновления (из репозитория `DS_UpdateCMakeList`): ```powershell cd tools/ ./UpdateCMakeList.ps1 ``` Скрипт рекурсивно обойдет добавленную папку подмодуля, автоматически найдет пути к заголовочным файлам `Library/DS_TMP112/Inc` и исходному коду `DS_TMP112.c`, интегрируя их в ваш `CMakeLists.txt`. --- ## 🔌 Схема подключения (I2C) Стандартный 7-битный адрес датчика на шине I2C по умолчанию равен `0x48` (если пин `ADD0` подключен к GND). Для передачи в функции HAL адрес необходимо смещать влево на 1 бит (`0x48 << 1 = 0x90`). | Вывод датчика TMP112 | Вывод STM32 | Назначение | | :--- | :--- | :--- | | **V+ / VCC** | 3.3V | Питание датчика (1.4V — 3.6V) | | **GND** | GND | Общая земля | | **SCL** | I2Cx_SCL | Тактовая линия шины I2C | | **SDA** | I2Cx_SDA | Линия данных шины I2C | | **ALT** | Любой GPIO_Input | Выход аппаратного оповещения ALERT (опционально) | --- ## 💻 Пример использования в `main.c` ```c #include "DS_TMP112.h" extern I2C_HandleTypeDef hi2c1; DS_TMP112 cabinet_sensor; int main(void) { // ... Автоматическая инициализация HAL, GPIO, I2C ... /* 1. Инициализация датчика (адрес 0x48 сдвигаем для HAL: 0x90) */ DS_TMP112_Init(&cabinet_sensor, &hi2c1, 0x90); /* 2. Конфигурирование (например, включение 12-битного режима, частота обновления 4 Гц) */ DS_TMP112_Configure(&cabinet_sensor); while (1) { /* 3. Чтение реальной температуры в градусах Цельсия */ float current_temp = DS_TMP112_ReadTemperature(&cabinet_sensor); // Переменная current_temp готова для логирования или вывода на дисплей HAL_Delay(1000); } } ``` --- ## 📋 Справочник API функций ### `void DS_TMP112_Init(DS_TMP112 *sensor, I2C_HandleTypeDef *hi2c, uint8_t DevAddr)` Выполняет первичную логическую привязку дескриптора датчика к конкретной аппаратной шине I2C и I2C-адресу чипа на плате. ### `void DS_TMP112_Configure(DS_TMP112 *sensor)` Записывает базовые настройки в 16-битный регистр конфигурации `0x01` (установка шага конвертации, режима работы и порогов компаратора). ### `float DS_TMP112_ReadTemperature(DS_TMP112 *sensor)` Выполняет чтение регистра температуры `0x00`, сдвигает 12-битное/13-битное значение, восстанавливает математический знак температуры для отрицательных величин и умножает сырое значение на шаг шкалы (`0.0625 °C`). Возвращает результат типа `float`.