141 lines
6.8 KiB
C
141 lines
6.8 KiB
C
/**
|
|
******************************************************************************
|
|
* @file dallas_tools.h
|
|
* @brief Äðàéâåð äàò÷èêîâ òåìïåðàòóðû DALLAS
|
|
******************************************************************************
|
|
* Ýòîò ôàéë ïðåäîñòàâëÿåò îáúÿâëåíèÿ è îïðåäåëåíèÿ äëÿ ðàáîòû ñ äàò÷èêàìè
|
|
* òåìïåðàòóðû DS18B20. Îí âêëþ÷àåò ñòðóêòóðû äàííûõ, ìàêðîñû è ïðîòîòèïû
|
|
* ôóíêöèé äëÿ èíèöèàëèçàöèè, ÷òåíèÿ òåìïåðàòóðû
|
|
* è óïðàâëåíèÿ äàò÷èêàìè.
|
|
*
|
|
* Ðàáîòà ñ äàò÷èêàìè âåä¸òñÿ ÷åðåç ïðîòîêîë OneWire.
|
|
*****************************************************************************/
|
|
|
|
#ifndef DALLAS_TOOLS_H
|
|
#define DALLAS_TOOLS_H
|
|
|
|
|
|
|
|
/* Includes -----------------------------------------------------------------*/
|
|
#include "stm32f1xx_hal.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_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
|
|
|
|
/** @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
|
|
{
|
|
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; ///< Óíèêàëüíûé 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
|
|
{
|
|
unsigned isConnected:1; ///< Ôëàã ñîåäèíåíèÿ
|
|
unsigned isInitialized:1; ///< Ôëàã èíèöèàëèçàöèè
|
|
unsigned isLost:1; ///< Ôëàã ïîòåðè ñâÿçè
|
|
|
|
OneWire_t *onewire; ///< Èíòåðôåéñ OneWire
|
|
uint8_t sensROM[DALLAS_ROM_SIZE]; ///< ROM-êîä äàò÷èêà
|
|
|
|
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_WaitConvertionTypeDef;
|
|
|
|
|
|
|
|
/* Functions ---------------------------------------------------------------*/
|
|
|
|
/* Ôóíêöèÿ äëÿ íàõîæäåíèÿ íîâîãî äàò÷èêà íà ìåñòî ïîòåðÿííîãî */
|
|
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_WaitConvertionTypeDef waitCondition, uint8_t dallas_delay_ms);
|
|
/* Èçìåðÿåò òåìïåðàòóðó íà äàò÷èêå */
|
|
HAL_StatusTypeDef Dallas_ConvertT(DALLAS_HandleTypeDef *sensor, DALLAS_WaitConvertionTypeDef waitCondition);
|
|
/* ×èòàåò èçìåðåííóþ äàò÷èêîì òåìïåðàòóðó */
|
|
HAL_StatusTypeDef Dallas_ReadTemperature(DALLAS_HandleTypeDef *sensor);
|
|
/* Ïðîâåðÿåò ïîäêëþ÷åí ëè äàò÷èê (÷òåíèå scratchpad) */
|
|
HAL_StatusTypeDef Dallas_IsConnected(DALLAS_HandleTypeDef *sensor);
|
|
/* Çàïèñûâàåò ïîëüçîâàòåëüñêèå áàéòû */
|
|
HAL_StatusTypeDef Dallas_WriteUserBytes(DALLAS_HandleTypeDef *sensor, uint16_t UserBytes12, uint16_t UserBytes34, uint8_t UserBytesMask);
|
|
|
|
|
|
#endif // #ifndef DALLAS_TOOLS_H
|