Кучу всего, переструктурирован проект все должно работать
- onewire: модуль для отправик комманд в DS18B20 - ds18b20_driver: модуль для отправик комманд в DS18B20 - dallas_tools: модуль для общения с DS18B20
This commit is contained in:
@@ -1,8 +1,14 @@
|
||||
/**
|
||||
******************************************************************************
|
||||
* @file : dallas_tools.h
|
||||
* @brief : DALLAS driver
|
||||
* @author : MicroTechnics (microtechnics.ru)
|
||||
* @file dallas_tools.h
|
||||
* @brief Драйвер датчиков температуры DALLAS
|
||||
******************************************************************************
|
||||
* Этот файл предоставляет объявления и определения для работы с датчиками
|
||||
* температуры DS18B20. Он включает структуры данных, макросы и прототипы
|
||||
* функций для инициализации, чтения температуры
|
||||
* и управления датчиками.
|
||||
*
|
||||
* Работа с датчиками ведётся через протокол OneWire.
|
||||
*****************************************************************************/
|
||||
|
||||
#ifndef DALLAS_TOOLS_H
|
||||
@@ -12,33 +18,21 @@
|
||||
|
||||
/* Includes -----------------------------------------------------------------*/
|
||||
#include "stm32f1xx_hal.h"
|
||||
#include "ds18b20.h"
|
||||
#include "ds18b20_driver.h"
|
||||
#include "onewire.h"
|
||||
|
||||
/* Определения пользовательских байтов для записи чтения */
|
||||
#define DALLAS_USER_BYTE_1 (1<<0) ///< Первый пользовательский байт
|
||||
#define DALLAS_USER_BYTE_2 (1<<1) ///< Второй пользовательский байт
|
||||
#define DALLAS_USER_BYTE_3 (1<<2) ///< Третий пользовательский байт
|
||||
#define DALLAS_USER_BYTE_4 (1<<3) ///< Четвёртый пользовательский байт
|
||||
|
||||
#define DALLAS_USER_BYTE_1 (1<<0)
|
||||
#define DALLAS_USER_BYTE_2 (1<<1)
|
||||
#define DALLAS_USER_BYTE_3 (1<<2)
|
||||
#define DALLAS_USER_BYTE_4 (1<<3)
|
||||
|
||||
#define DALLAS_USER_BYTE_12 (DALLAS_USER_BYTE_1|DALLAS_USER_BYTE_2)
|
||||
#define DALLAS_USER_BYTE_34 (DALLAS_USER_BYTE_3|DALLAS_USER_BYTE_4)
|
||||
|
||||
#define DALLAS_USER_BYTE_ALL (DALLAS_USER_BYTE_12|DALLAS_USER_BYTE_34)
|
||||
#define DALLAS_USER_BYTE_12 (DALLAS_USER_BYTE_1|DALLAS_USER_BYTE_2) ///< Первые два байта
|
||||
#define DALLAS_USER_BYTE_34 (DALLAS_USER_BYTE_3|DALLAS_USER_BYTE_4) ///< Вторые два байта
|
||||
#define DALLAS_USER_BYTE_ALL (DALLAS_USER_BYTE_12|DALLAS_USER_BYTE_34) ///< Все пользовательские байты
|
||||
|
||||
/* Declarations and definitions ---------------------------------------------*/
|
||||
#define DALLAS_ROM_SIZE 8
|
||||
#define DALLAS_SERIAL_NUMBER_LEN_BYTES 6
|
||||
#define DALLAS_SERIAL_NUMBER_OFFSET_BYTES 1
|
||||
|
||||
#define DALLAS_SCRATCHPAD_T_LSB_BYTE_IDX 0
|
||||
#define DALLAS_SCRATCHPAD_T_MSB_BYTE_IDX 1
|
||||
#define DALLAS_SCRATCHPAD_T_LIMIT_H_BYTE_IDX 2
|
||||
#define DALLAS_SCRATCHPAD_T_LIMIT_L_BYTE_IDX 3
|
||||
#define DALLAS_SCRATCHPAD_CONFIG_BYTE_IDX 4
|
||||
#define DALLAS_SCRATCHPAD_USER_BYTE_3_IDX 6
|
||||
#define DALLAS_SCRATCHPAD_USER_BYTE_4_IDX 7
|
||||
#define DALLAS_SCRATCHPAD_CRC_IDX 8
|
||||
#define DALLAS_ROM_SIZE 8
|
||||
|
||||
#define DALLAS_CONFIG_9_BITS 0x1F
|
||||
#define DALLAS_CONFIG_10_BITS 0x3F
|
||||
@@ -51,112 +45,98 @@
|
||||
#define DALLAS_DELAY_MS_12_BITS 750
|
||||
#define DALLAS_DELAY_MS_MAX DALLAS_DELAY_MS_12_BITS
|
||||
|
||||
#define DALLAS_9_BITS_DATA_MASK 0x7F8
|
||||
#define DALLAS_10_BITS_DATA_MASK 0x7FC
|
||||
#define DALLAS_11_BITS_DATA_MASK 0x7FE
|
||||
#define DALLAS_12_BITS_DATA_MASK 0x7FF
|
||||
|
||||
#define DALLAS_SIGN_MASK 0xF800
|
||||
|
||||
#define DALLAS_T_STEP 0.0625
|
||||
|
||||
#define DALLAS_READ_ROM_RX_BYTES_NUM 8
|
||||
#define DALLAS_READ_SCRATCHPAD_RX_BYTES_NUM 9
|
||||
|
||||
|
||||
/** @brief Структура Scratchpad датчика DALLAS */
|
||||
typedef struct
|
||||
{
|
||||
uint8_t TemperatureLSB;
|
||||
uint8_t TemperatureMSB;
|
||||
uint8_t tHighRegister;
|
||||
uint8_t tLowRegister;
|
||||
uint8_t ConfigRegister;
|
||||
uint8_t reserved;
|
||||
uint8_t UserByte3;
|
||||
uint8_t UserByte4;
|
||||
uint8_t ScratchpadCRC;
|
||||
uint8_t TemperatureLSB; ///< Младший байт температуры
|
||||
uint8_t TemperatureMSB; ///< Старший байт температуры
|
||||
uint8_t tHighRegister; ///< Верхний температурный порог
|
||||
uint8_t tLowRegister; ///< Нижний температурный порог
|
||||
uint8_t ConfigRegister; ///< Конфигурационный регистр
|
||||
uint8_t reserved; ///< Зарезервировано
|
||||
uint8_t UserByte3; ///< Пользовательский байт 3
|
||||
uint8_t UserByte4; ///< Пользовательский байт 4
|
||||
uint8_t ScratchpadCRC; ///< Контрольная сумма
|
||||
}DALLAS_ScratchpadTypeDef;
|
||||
|
||||
/** @brief Структура флагов ошибок датчиков DALLAS */
|
||||
typedef struct
|
||||
{
|
||||
unsigned disconnect_cnt;
|
||||
unsigned read_temperature_err_cnt;
|
||||
unsigned timeout_convertion_cnt;
|
||||
|
||||
unsigned disconnect_cnt; ///< Счетчик отключений датчика
|
||||
unsigned read_temperature_err_cnt; ///< Счетчик ошибок чтения температуры
|
||||
unsigned timeout_convertion_cnt; ///< Счетчик ошибок таймаута конвертации
|
||||
unsigned other_err_cnt; ///< Счетчик других ошибок
|
||||
}DALLAS_FlagsTypeDef;
|
||||
|
||||
|
||||
/** @brief Структура инициализации датчика DALLAS */
|
||||
typedef struct
|
||||
{
|
||||
uint64_t ROM;
|
||||
uint16_t UserBytes12;
|
||||
uint16_t UserBytes34;
|
||||
uint8_t SensInd;
|
||||
uint8_t Resolution;
|
||||
|
||||
HAL_StatusTypeDef (*init_func)();
|
||||
}DALLAS_InitStructTypeDef;
|
||||
uint64_t ROM; ///< Уникальный ROM-код датчика
|
||||
uint16_t UserBytes12; ///< Пользовательские байты 1 и 2
|
||||
uint16_t UserBytes34; ///< Пользовательские байты 3 и 4
|
||||
uint8_t SensInd; ///< Индекс сенсора
|
||||
uint8_t Resolution; ///< Разрешение датчика
|
||||
HAL_StatusTypeDef (*init_func)(); ///< Функция инициализации
|
||||
} DALLAS_InitStructTypeDef;
|
||||
|
||||
/** @brief Основная структура обработчика датчика DALLAS */
|
||||
typedef struct
|
||||
{
|
||||
uint8_t isConnected;
|
||||
uint8_t isInitialized;
|
||||
uint8_t isLost;
|
||||
#ifdef ONEWIRE_UART_H
|
||||
UART_HandleTypeDef *uart;
|
||||
#else
|
||||
OneWire_t *onewire;
|
||||
#endif
|
||||
|
||||
uint8_t sensROM[DALLAS_ROM_SIZE];
|
||||
DALLAS_ScratchpadTypeDef scratchpad;
|
||||
float temperature;
|
||||
unsigned isConnected:1; ///< Флаг соединения
|
||||
unsigned isInitialized:1; ///< Флаг инициализации
|
||||
unsigned isLost:1; ///< Флаг потери связи
|
||||
|
||||
DALLAS_InitStructTypeDef Init;
|
||||
DALLAS_FlagsTypeDef f;
|
||||
OneWire_t *onewire; ///< Интерфейс OneWire
|
||||
uint8_t sensROM[DALLAS_ROM_SIZE]; ///< ROM-код датчика
|
||||
|
||||
}DALLAS_HandleTypeDef;
|
||||
extern DALLAS_HandleTypeDef outdoor;
|
||||
extern DALLAS_HandleTypeDef indoor;
|
||||
extern DALLAS_HandleTypeDef bathroom;
|
||||
extern DALLAS_HandleTypeDef kitchen;
|
||||
extern DALLAS_HandleTypeDef big_room;
|
||||
extern DALLAS_HandleTypeDef small_room;
|
||||
extern DALLAS_HandleTypeDef living_room;
|
||||
extern DALLAS_HandleTypeDef basement;
|
||||
DALLAS_ScratchpadTypeDef scratchpad; ///< Scratchpad датчика
|
||||
float temperature; ///< Текущая температура
|
||||
|
||||
DALLAS_InitStructTypeDef Init; ///< Структура инициализации
|
||||
DALLAS_FlagsTypeDef f; ///< Флаги
|
||||
|
||||
} DALLAS_HandleTypeDef;
|
||||
|
||||
|
||||
|
||||
/** @brief Варианты ожидания окончания конверсии */
|
||||
typedef enum
|
||||
{
|
||||
DALLAS_WAIT_NONE = 0x00,
|
||||
DALLAS_WAIT_BUS = 0x01,
|
||||
DALLAS_WAIT_DELAY = 0x02,
|
||||
} DALLAS_WaitCondition;
|
||||
DALLAS_WAIT_NONE = 0x00, ///< Без ожидания окончания конверсии
|
||||
DALLAS_WAIT_BUS = 0x01, ///< Ожидание окончания конверсии по шине (опрос датчиков - чтение бита)
|
||||
DALLAS_WAIT_DELAY = 0x02, ///< Без ожидания окончания через задержку (максимальная задержка для заданной разрядности)
|
||||
} DALLAS_WaitConvertionTypeDef;
|
||||
|
||||
|
||||
|
||||
/* Functions ---------------------------------------------------------------*/
|
||||
|
||||
void Dallas_Init(DALLAS_HandleTypeDef *sensor, UART_HandleTypeDef *huart);
|
||||
void Dallas_ReadAll(void);
|
||||
void Dallas_FirstInit(void);
|
||||
/* Функция для нахождения нового датчика на место потерянного */
|
||||
HAL_StatusTypeDef Dallas_ReplaceLostedSensor(DALLAS_HandleTypeDef *sensor);
|
||||
/* Функция для иниицализации нового датчика в структуре */
|
||||
HAL_StatusTypeDef Dallas_AddNewSensors(OneWire_t *onewire, DALLAS_HandleTypeDef *sensor);
|
||||
/* Инициализирует структуру датчика по ROM */
|
||||
HAL_StatusTypeDef Dallas_SensorInitByROM(OneWire_t *onewire, DALLAS_HandleTypeDef *sensor);
|
||||
/* Инициализирует структуру датчика по пользовательским байтам */
|
||||
HAL_StatusTypeDef Dallas_SensorInitByUserBytes(OneWire_t *onewire, DALLAS_HandleTypeDef *sensor);
|
||||
/* Инициализирует структуру датчика по порядковому номеру */
|
||||
HAL_StatusTypeDef Dallas_SensorInitByInd(OneWire_t *onewire, DALLAS_HandleTypeDef *sensor);
|
||||
/* Инициализирует датчик для работы */
|
||||
HAL_StatusTypeDef Dallas_SensorInit(OneWire_t *onewire, DALLAS_HandleTypeDef *sensor, uint8_t (*ROM)[DALLAS_ROM_SIZE]);
|
||||
/* Деинициализирует структуру датчика */
|
||||
HAL_StatusTypeDef Dallas_SensorDeInit(DALLAS_HandleTypeDef *sensor);
|
||||
HAL_StatusTypeDef Dallas_StartConvertTAll(OneWire_t *onewire, DALLAS_WaitCondition waitCondition, uint8_t dallas_delay_ms);
|
||||
HAL_StatusTypeDef Dallas_ConvertT(DALLAS_HandleTypeDef *sensor, DALLAS_WaitCondition waitCondition);
|
||||
/* Запускает измерение температуры на всех датчиках */
|
||||
HAL_StatusTypeDef Dallas_StartConvertTAll(OneWire_t *onewire, DALLAS_WaitConvertionTypeDef waitCondition, uint8_t dallas_delay_ms);
|
||||
/* Измеряет температуру на датчике */
|
||||
HAL_StatusTypeDef Dallas_ConvertT(DALLAS_HandleTypeDef *sensor, DALLAS_WaitConvertionTypeDef waitCondition);
|
||||
/* Читает измеренную датчиком температуру */
|
||||
HAL_StatusTypeDef Dallas_ReadTemperature(DALLAS_HandleTypeDef *sensor);
|
||||
HAL_StatusTypeDef Dallas_ReadScratchpad(DALLAS_HandleTypeDef *sensor);
|
||||
HAL_StatusTypeDef Dallas_WriteScratchpad(DALLAS_HandleTypeDef *sensor, uint8_t ExtendUserBytes);
|
||||
/* Проверяет подключен ли датчик (чтение scratchpad) */
|
||||
HAL_StatusTypeDef Dallas_IsConnected(DALLAS_HandleTypeDef *sensor);
|
||||
HAL_StatusTypeDef Dallas_ReadRom(DALLAS_HandleTypeDef *sensor);
|
||||
HAL_StatusTypeDef Dallas_SkipRom(DALLAS_HandleTypeDef *sensor);
|
||||
|
||||
/* Записывает пользовательские байты */
|
||||
HAL_StatusTypeDef Dallas_WriteUserBytes(DALLAS_HandleTypeDef *sensor, uint16_t UserBytes12, uint16_t UserBytes34, uint8_t UserBytesMask);
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user