# Библиотека для работы с датчиками температуры DS18B20 по 1-Wire --- ## Описание Данная библиотека предоставляет драйвер для работы с цифровыми температурными датчиками DS18B20, подключёнными по однопроводному интерфейсу 1-Wire. Библиотека поддерживает: - Инициализация шины 1-Wire и обнаружение всех датчиков на шине - Инициализация датчика по: - ROM-адресу - Пользовательским байтам (TH, TL, UserByte3, UserByte4) - Индексу (порядковому номеру) найденного устройства - Запуск преобразования температуры у всех или отдельных датчиков с выбором метода ожидания окончания преобразования (по шине или задержкой) - Чтение температуры и проверка статуса подключения датчика - Возможность замены потерянного датчика в структуре --- ## Быстрый старт ### 1. Настройка порта и таймера для 1-Wire (файл `ow_port.h`): ```c #define OW_GPIO_Port GPIOB #define OW_Pin_Numb 0 #define OW_Pin (1 << OW_Pin_Numb) #define OW_TIM TIM3 #define OW_TIM_1US_PERIOD 24 ``` ### 2. Подключение библиотеки и инициализация таймера: ```c #include "dallas_tools.h" MX_TIM_Init(); // Инициализация таймера (например, TIM3) ``` ### 3. Инициализация шины и поиск датчиков: ```c Dallas_BusFirstInit(&htim); ``` ### 4. Инициализация структуры датчика по одному из методов: ```c // Объявление хендлов датчиков DALLAS_SensorHandleTypeDef sens; // Инициализация по индексу (порядковому номеру найденного датчика) sens1.Init.init_func = &Dallas_SensorInitByInd; sens1.Init.InitParam.Ind = 0; // Инициализация по ROM-адресу sens.Init.init_func = &Dallas_SensorInitByROM; sens.Init.InitParam.ROM = rom_address; // Инициализация по пользовательским байтам sens.Init.init_func = &Dallas_SensorInitByUserBytes; sens.Init.InitParam.UserBytes.UserByte1 = 1; sens.Init.InitParam.UserBytes.UserByte2 = 2; sens.Init.InitParam.UserBytes.UserByte3 = 3; sens.Init.InitParam.UserBytes.UserByte4 = 4; // добавление датчика в структуру sens Dallas_AddNewSensors(&hdallas, &sens); ``` ### 5. Запуск измерения и чтение температуры: ```c Dallas_StartConvertTAll(&hdallas, DALLAS_WAIT_BUS, 0); Dallas_ReadTemperature(&sens); ``` --- ## Функции | Функция | Описание | | -------------------------------------------------------- | ---------------------------------------------------------- | | `Dallas_BusFirstInit(&htim)` | Инициализация шины 1-Wire, запуск таймера и поиск датчиков | | `Dallas_AddNewSensors(&hdallas, &sensor)` | Инициализация структуры датчика и добавление в работу | | `Dallas_ReplaceLostedSensor(&sensor)` | Замена потерянного датчика на новый, если доступен | | `Dallas_StartConvertTAll(&hdallas, waitCondition, delay)` | Запуск преобразования температуры на всех датчиках | | `Dallas_ConvertT(&sensor, waitCondition)` | Запуск преобразования температуры на одном датчике | | `Dallas_ReadTemperature(&sensor)` | Чтение температуры с датчика | | `Dallas_IsConnected(&sensor)` | Проверка подключения датчика (чтение scratchpad) | | `Dallas_WriteUserBytes(&sensor, bytes12, bytes34, mask)` | Запись пользовательских байт в датчик | ## Требуемые зависимости - Драйвер 1-Wire (`onewire.c/h`, `ow_port.c/h`) - Драйвер DS18B20 (`ds18b20.c/h`) --- ## Примечания - Функции работы с датчиками возвращают статус в формате `HAL_StatusTypeDef`. - Ожидание окончания преобразования температуры настраивается через `DALLAS_WaitConvertionTypeDef`: - `DALLAS_WAIT_BUS` — ожидание по состоянию линии 1-Wire. - `DALLAS_WAIT_DELAY` — фиксированная задержка, зависящая от выбранного разрешения. - `DALLAS_WAIT_NONE` — без ожидания (асинхронный режим). - При потере связи с датчиком функция `Dallas_IsConnected` помечает датчик как потерянный. Для восстановления работы можно вызвать `Dallas_ReplaceLostedSensor`, она будет искать датчик и пытаться его инициализировать по заданной функции инициализации.