101 lines
5.7 KiB
Markdown
101 lines
5.7 KiB
Markdown
# Библиотека для работы с датчиками температуры 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_driver.c/h`)
|
||
|
||
---
|
||
|
||
## Примечания
|
||
- Функции работы с датчиками возвращают статус в формате `HAL_StatusTypeDef`.
|
||
- Ожидание окончания преобразования температуры настраивается через `DALLAS_WaitConvertionTypeDef`:
|
||
- `DALLAS_WAIT_BUS` — ожидание по состоянию линии 1-Wire.
|
||
- `DALLAS_WAIT_DELAY` — фиксированная задержка, зависящая от выбранного разрешения.
|
||
- `DALLAS_WAIT_NONE` — без ожидания (асинхронный режим).
|
||
- При потере связи с датчиком функция `Dallas_IsConnected` помечает датчик как потерянный. Для восстановления работы можно вызвать `Dallas_ReplaceLostedSensor`, она будет искать датчик и пытаться его инициализировать по заданной функции инициализации. |