168 lines
		
	
	
		
			9.5 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			168 lines
		
	
	
		
			9.5 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
/**
 | 
						||
******************************************************************************
 | 
						||
* @file           dallas_tools.h
 | 
						||
* @brief          Драйвер датчиков температуры DALLAS
 | 
						||
******************************************************************************
 | 
						||
* Этот файл предоставляет объявления и определения для работы с датчиками 
 | 
						||
* температуры DS18B20. Он включает структуры данных, макросы и прототипы 
 | 
						||
* функций для инициализации, чтения температуры 
 | 
						||
* и управления датчиками.
 | 
						||
*
 | 
						||
* Работа с датчиками ведётся через протокол OneWire.
 | 
						||
*****************************************************************************/
 | 
						||
 | 
						||
#ifndef DALLAS_TOOLS_H
 | 
						||
#define DALLAS_TOOLS_H
 | 
						||
 | 
						||
/* Includes -----------------------------------------------------------------*/
 | 
						||
#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_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_CONFIG_9_BITS                                              0x1F
 | 
						||
#define DALLAS_CONFIG_10_BITS                                             0x3F
 | 
						||
#define DALLAS_CONFIG_11_BITS                                             0x5F
 | 
						||
#define DALLAS_CONFIG_12_BITS                                             0x7F
 | 
						||
 | 
						||
#define DALLAS_DELAY_MS_9_BITS                                            94
 | 
						||
#define DALLAS_DELAY_MS_10_BITS                                           188
 | 
						||
#define DALLAS_DELAY_MS_11_BITS                                           375
 | 
						||
#define DALLAS_DELAY_MS_12_BITS                                           750
 | 
						||
#define DALLAS_DELAY_MS_MAX                                               DALLAS_DELAY_MS_12_BITS
 | 
						||
 | 
						||
typedef struct _SensorHandleStruct DALLAS_SensorHandleTypeDef;
 | 
						||
typedef struct _DallasHandleStruct DALLAS_HandleTypeDef;
 | 
						||
 | 
						||
/** @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;        ///< Пользовательский байт 3
 | 
						||
  uint8_t UserByte4;        ///< Пользовательский байт 4
 | 
						||
  uint8_t ScratchpadCRC;    ///< Контрольная сумма
 | 
						||
}DALLAS_ScratchpadTypeDef;
 | 
						||
 | 
						||
/** @brief Структура флагов ошибок датчиков DALLAS */
 | 
						||
typedef struct
 | 
						||
{
 | 
						||
  uint8_t disconnect_cnt;            ///< Счетчик отключений датчика
 | 
						||
  uint8_t read_temperature_err_cnt;  ///< Счетчик ошибок чтения температуры
 | 
						||
  uint8_t timeout_convertion_cnt;    ///< Счетчик ошибок таймаута конвертации
 | 
						||
  uint8_t write_err_cnt;             ///< Счетчик других ошибок
 | 
						||
}DALLAS_FlagsTypeDef;
 | 
						||
 | 
						||
 | 
						||
/** @brief Структура инициализации датчика DALLAS */
 | 
						||
typedef struct __packed
 | 
						||
{
 | 
						||
  union
 | 
						||
  {
 | 
						||
    uint64_t  Ind;          ///< порядковый номер датчика
 | 
						||
    uint64_t  ROM;          ///< ROM датчика
 | 
						||
    struct  
 | 
						||
    {
 | 
						||
      uint8_t UserByte1;    ///< Младший байт (бит 0–7)
 | 
						||
      uint8_t UserByte2;    ///< Следующий байт (бит 8–15)
 | 
						||
      uint8_t UserByte3;    ///< Байт (бит 16–23)
 | 
						||
      uint8_t UserByte4;    ///< Байт (бит 24–31)
 | 
						||
      uint8_t Reserved[4];  ///< Остальные байты (бит 32–63, если нужно)
 | 
						||
    } UserBytes;            ///< UserBytes датчика
 | 
						||
  }InitParam;                           ///< Параметр для инициализации: ROM/UserBytes/Индекс
 | 
						||
  uint8_t             Resolution;       ///< Разрешение датчика
 | 
						||
  HAL_StatusTypeDef   (*init_func)(DALLAS_HandleTypeDef *, DALLAS_SensorHandleTypeDef *);   ///< Функция инициализации
 | 
						||
} DALLAS_InitStructTypeDef;
 | 
						||
 | 
						||
 | 
						||
 | 
						||
/** @brief Cтруктура обработчика DALLAS для общения с датчиком*/
 | 
						||
struct _DallasHandleStruct
 | 
						||
{
 | 
						||
  OneWire_t                   *onewire;
 | 
						||
  DS18B20_Drv_t               *ds_devices;
 | 
						||
  DALLAS_ScratchpadTypeDef    scratchpad;  
 | 
						||
};
 | 
						||
extern DALLAS_HandleTypeDef hdallas;
 | 
						||
 | 
						||
/** @brief Основная структура обработчика датчика DALLAS */
 | 
						||
struct  _SensorHandleStruct 
 | 
						||
{
 | 
						||
  unsigned                  isConnected:1;            ///< Флаг соединения
 | 
						||
  unsigned                  isInitialized:1;          ///< Флаг инициализации
 | 
						||
  unsigned                  isLost:1;                 ///< Флаг потери связи
 | 
						||
	DALLAS_FlagsTypeDef       f;                        ///< Флаги
 | 
						||
	
 | 
						||
	float 										set_temp;	
 | 
						||
	int 											hyst;
 | 
						||
  
 | 
						||
  DALLAS_HandleTypeDef      *hdallas;
 | 
						||
  uint64_t                  sensROM;                  ///< ROM-код датчика
 | 
						||
  
 | 
						||
  float                     temperature;              ///< Текущая температура
 | 
						||
  
 | 
						||
  DALLAS_InitStructTypeDef  Init;                     ///< Структура инициализации
 | 
						||
  
 | 
						||
  
 | 
						||
};
 | 
						||
 | 
						||
 | 
						||
 | 
						||
/** @brief Варианты ожидания окончания конверсии */
 | 
						||
typedef enum
 | 
						||
{
 | 
						||
  DALLAS_WAIT_NONE      = 0x00,   ///< Без ожидания окончания конверсии
 | 
						||
  DALLAS_WAIT_BUS       = 0x01,   ///< Ожидание окончания конверсии по шине (опрос датчиков - чтение бита)
 | 
						||
  DALLAS_WAIT_DELAY     = 0x02,   ///< Без ожидания окончания через задержку (максимальная задержка для заданной разрядности)
 | 
						||
} DALLAS_WaitConvertionTypeDef;
 | 
						||
 | 
						||
 | 
						||
 | 
						||
/* Functions ---------------------------------------------------------------*/
 | 
						||
 | 
						||
HAL_StatusTypeDef Dallas_BusFirstInit(TIM_HandleTypeDef *htim);
 | 
						||
/* Функция для иниицализации нового датчика в структуре */
 | 
						||
HAL_StatusTypeDef Dallas_AddNewSensors(DALLAS_HandleTypeDef *hdallas, DALLAS_SensorHandleTypeDef *sensor);
 | 
						||
/* Инициализирует структуру датчика по ROM */
 | 
						||
HAL_StatusTypeDef Dallas_SensorInitByROM(DALLAS_HandleTypeDef *hdallas, DALLAS_SensorHandleTypeDef *sensor);
 | 
						||
/* Инициализирует структуру датчика по пользовательским байтам */
 | 
						||
HAL_StatusTypeDef Dallas_SensorInitByUserBytes(DALLAS_HandleTypeDef *hdallas, DALLAS_SensorHandleTypeDef *sensor);
 | 
						||
/* Инициализирует структуру датчика по порядковому номеру */
 | 
						||
HAL_StatusTypeDef Dallas_SensorInitByInd(DALLAS_HandleTypeDef *hdallas, DALLAS_SensorHandleTypeDef *sensor);
 | 
						||
/* Инициализирует датчик для работы */
 | 
						||
HAL_StatusTypeDef Dallas_SensorInit(DALLAS_HandleTypeDef *hdallas, DALLAS_SensorHandleTypeDef *sensor, uint8_t (*ROM)[DALLAS_ROM_SIZE]);
 | 
						||
/* Деинициализирует структуру датчика */
 | 
						||
HAL_StatusTypeDef Dallas_SensorDeInit(DALLAS_SensorHandleTypeDef *sensor);
 | 
						||
/* Функция для нахождения нового датчика на место потерянного */
 | 
						||
HAL_StatusTypeDef Dallas_ReplaceLostedSensor(DALLAS_SensorHandleTypeDef *sensor);
 | 
						||
/* Запускает измерение температуры на всех датчиках */
 | 
						||
HAL_StatusTypeDef Dallas_StartConvertTAll(DALLAS_HandleTypeDef *hdallas, DALLAS_WaitConvertionTypeDef waitCondition, uint8_t dallas_delay_ms);
 | 
						||
/* Измеряет температуру на датчике */
 | 
						||
HAL_StatusTypeDef Dallas_ConvertT(DALLAS_SensorHandleTypeDef *sensor, DALLAS_WaitConvertionTypeDef waitCondition);
 | 
						||
/* Читает измеренную датчиком температуру */
 | 
						||
HAL_StatusTypeDef Dallas_ReadTemperature(DALLAS_SensorHandleTypeDef *sensor);
 | 
						||
/* Проверяет подключен ли датчик (чтение scratchpad) */
 | 
						||
HAL_StatusTypeDef Dallas_IsConnected(DALLAS_SensorHandleTypeDef *sensor);
 | 
						||
/* Записывает пользовательские байты */
 | 
						||
HAL_StatusTypeDef Dallas_WriteUserBytes(DALLAS_SensorHandleTypeDef *sensor, uint16_t UserBytes12, uint16_t UserBytes34, uint8_t UserBytesMask);
 | 
						||
/* Записывает пользовательские байты */
 | 
						||
HAL_StatusTypeDef Dallas_ReadScratchpad(DALLAS_SensorHandleTypeDef *sensor);
 | 
						||
 | 
						||
 | 
						||
#endif // #ifndef DALLAS_TOOLS_H
 |