/** ****************************************************************************** * @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