144 lines
5.7 KiB
C
144 lines
5.7 KiB
C
/**
|
|
******************************************************************************
|
|
* @file : dallas_tools.h
|
|
* @brief : DALLAS driver
|
|
* @author : MicroTechnics (microtechnics.ru)
|
|
*****************************************************************************/
|
|
|
|
#ifndef DALLAS_TOOLS_H
|
|
#define DALLAS_TOOLS_H
|
|
|
|
|
|
|
|
/* Includes -----------------------------------------------------------------*/
|
|
#include "stm32f1xx_hal.h"
|
|
#include "ds18b20.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_LEN_BYTES 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_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
|
|
|
|
#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
|
|
|
|
|
|
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;
|
|
}DALLAS_ScratchpadTypeDef;
|
|
|
|
typedef struct
|
|
{
|
|
unsigned disconnect_cnt;
|
|
unsigned read_temperature_err_cnt;
|
|
unsigned timeout_convertion_cnt;
|
|
|
|
}DALLAS_FlagsTypeDef;
|
|
|
|
typedef struct
|
|
{
|
|
uint8_t isConnected;
|
|
#ifdef ONEWIRE_UART_H
|
|
UART_HandleTypeDef *uart;
|
|
#else
|
|
OneWire_t *onewire;
|
|
#endif
|
|
|
|
uint8_t (*sensROM)[DALLAS_ROM_LEN_BYTES];
|
|
DALLAS_ScratchpadTypeDef scratchpad;
|
|
float temperature;
|
|
|
|
|
|
DALLAS_FlagsTypeDef f;
|
|
|
|
}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;
|
|
|
|
|
|
|
|
typedef enum
|
|
{
|
|
DALLAS_WAIT_NONE = 0x00,
|
|
DALLAS_WAIT_BUS = 0x01,
|
|
DALLAS_WAIT_DELAY = 0x02,
|
|
} DALLAS_WaitCondition;
|
|
|
|
|
|
|
|
/* Functions ---------------------------------------------------------------*/
|
|
|
|
void Dallas_Init(DALLAS_HandleTypeDef *sensor, UART_HandleTypeDef *huart);
|
|
void Dallas_ReadAll(void);
|
|
void Dallas_FirstInit(void);
|
|
HAL_StatusTypeDef Dallas_SensorInitByUserBytes(OneWire_t *onewire, DALLAS_HandleTypeDef *sensor, uint16_t UserBytes34, uint16_t UserBytes12);
|
|
HAL_StatusTypeDef Dallas_SensorInitByInd(OneWire_t *onewire, DALLAS_HandleTypeDef *sensor, uint8_t sens_ind);
|
|
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_ReadTemperature(DALLAS_HandleTypeDef *sensor);
|
|
HAL_StatusTypeDef Dallas_ReadScratchpad(DALLAS_HandleTypeDef *sensor);
|
|
HAL_StatusTypeDef Dallas_WriteScratchpad(DALLAS_HandleTypeDef *sensor, uint8_t ExtendUserBytes);
|
|
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);
|
|
|
|
|
|
#endif // #ifndef DALLAS_TOOLS_H
|