diff --git a/DS18B20/dallas_tools.c b/DS18B20/dallas_tools.c index 9e5439b..c0287f9 100644 --- a/DS18B20/dallas_tools.c +++ b/DS18B20/dallas_tools.c @@ -5,7 +5,7 @@ * @author MicroTechnics (microtechnics.ru) ****************************************************************************** @details -Этот файл содержит реализацию функций для работы с датчиком DALLAS_HandleTypeDef +Этот файл содержит реализацию функций для работы с датчиком DS18B20 через интерфейс 1-Wire. Он предоставляет функции для чтения и записи конфигурации, выполнения измерений и обработки полученных данных. *****************************************************************************/ @@ -145,28 +145,29 @@ HAL_StatusTypeDef Dallas_ReplaceLostedSensor(DALLAS_HandleTypeDef *sensor) { HAL_StatusTypeDef result; + if(sensor == NULL) return HAL_ERROR; - if(AllSens.outdoor.isLost) + if(sensor->isLost) { if(DS18B20_Search(&DS, &OW) != HAL_OK) return HAL_ERROR; if(sensor->Init.init_func(sensor->onewire, sensor) != HAL_OK) return HAL_ERROR; + + return HAL_OK; } else { - /*unknown sensor*/ - return HAL_ERROR; + return HAL_OK; } - return HAL_OK; } /** - * @brief Функция для добавления нового датчика в структуру + * @brief Функция для иниицализации нового датчика в структуре * @param onewire Указатель на структуру OneWire * @param sensor Указатель на структуру датчика * @retval HAL Status @@ -219,7 +220,7 @@ HAL_StatusTypeDef Dallas_SensorInitByROM(OneWire_t *onewire, DALLAS_HandleTypeDe uint8_t comparebytes = DALLAS_ROM_SIZE; int ROM_ind = 0; - for(int i = 0; i < DS18B20_DEVICE_AMOUNT; i++) + for(int i = 0; i < onewire->RomCnt; i++) { comparebytes = DALLAS_ROM_SIZE; for(int rom_byte = 0; rom_byte < DALLAS_ROM_SIZE; rom_byte++) @@ -233,16 +234,11 @@ HAL_StatusTypeDef Dallas_SensorInitByROM(OneWire_t *onewire, DALLAS_HandleTypeDe break; } } - /* Проверка присутствует ли выбранный датчик на линии */ + /* Проверка присутствует ли выбранный датчик на линии */ if(comparebytes == 0) { -// result = Dallas_IsConnected(sensor); -// if(result != HAL_OK) -// return result; -// -// sensor->isInitialized = 1; -// sensor->Init.init_func = (HAL_StatusTypeDef (*)())Dallas_SensorInitByROM; + result = Dallas_SensorInit(onewire, sensor, &DS.DevAddr[ROM_ind]); return result; } @@ -260,10 +256,7 @@ HAL_StatusTypeDef Dallas_SensorInitByROM(OneWire_t *onewire, DALLAS_HandleTypeDe * @brief Инициализирует структуру датчика по пользовательским байтам * @param onewire Указатель на структуру OneWire * @param sensor Указатель на структуру датчика - * @param UserBytes34 Пользовательские байты 3 и 4, NULL для игнора - * @param UserBytes12 Пользовательские байты 1 и 2, NULL для игнора * @retval HAL Status - * @details старший байт - UserByte4/UserByte2, младший - UserByte3/UserByte1. */ HAL_StatusTypeDef Dallas_SensorInitByUserBytes(OneWire_t *onewire, DALLAS_HandleTypeDef *sensor) { @@ -282,50 +275,50 @@ HAL_StatusTypeDef Dallas_SensorInitByUserBytes(OneWire_t *onewire, DALLAS_Handle uint8_t UserByte34Cmp = 0; DALLAS_ScratchpadTypeDef scratchpad; - for(int i = 0; i < DS18B20_DEVICE_AMOUNT; i++) + for(int i = 0; i < onewire->RomCnt; i++) { for(int rom_ind = 0; rom_ind < DALLAS_ROM_SIZE; rom_ind++) - - /* Проверка присутствует ли выбранный датчик на линии */ - result = DS18B20_ReadScratchpad(onewire, (uint8_t *)&DS.DevAddr[i], (uint8_t *)&scratchpad); - if (result != HAL_OK) - return result; - - - /* Сравнение UserByte1 и UserByte2, если выбрано */ - if(sensor->Init.UserBytes12 != NULL) { - if( (scratchpad.tHighRegister == UserByte1) && - (scratchpad.tLowRegister == UserByte2)) + /* Проверка присутствует ли выбранный датчик на линии */ + result = DS18B20_ReadScratchpad(onewire, (uint8_t *)&DS.DevAddr[i], (uint8_t *)&scratchpad); + if (result != HAL_OK) + return result; + + /* Сравнение UserByte1 и UserByte2, если они не равны нулю */ + if(sensor->Init.UserBytes12 != NULL) + { + if( (scratchpad.tHighRegister == UserByte1) && + (scratchpad.tLowRegister == UserByte2)) + { + UserByte12Cmp = 1; + } + }/* Если сравнение UserByte1 и UserByte2 не выбрано, то считаем что они совпадают */ + else { UserByte12Cmp = 1; } - }/* Если равнение UserByte1 и UserByte2 не выбрано, то считаем что они одинаковые */ - else - { - UserByte12Cmp = 1; - } - /* Сравнение UserByte3 и UserByte4, если выбрано */ - if(sensor->Init.UserBytes34 != NULL) - { - if( (scratchpad.UserByte3 == UserByte3) && - (scratchpad.UserByte4 == UserByte4)) + /* Сравнение UserByte3 и UserByte4, если они не равны нулю */ + if(sensor->Init.UserBytes34 != NULL) + { + if( (scratchpad.UserByte3 == UserByte3) && + (scratchpad.UserByte4 == UserByte4)) + { + UserByte34Cmp = 1; + } + }/* Если сравнение UserByte3 и UserByte4 не выбрано, то считаем что они одинаковые */ + else { UserByte34Cmp = 1; } - }/* Если равнение UserByte3 и UserByte4 не выбрано, то считаем что они одинаковые */ - else - { - UserByte34Cmp = 1; - } - /* Если нашли нужный датчик - завершаем поиск */ - if(UserByte12Cmp && UserByte34Cmp) - { -// sensor->isInitialized = 1; -// sensor->Init.init_func = (HAL_StatusTypeDef (*)())Dallas_SensorInitByUserBytes; - result = Dallas_SensorInit(onewire, sensor, &DS.DevAddr[i]); - return result; + /* Если нашли нужный датчик - завершаем поиск */ + if(UserByte12Cmp && UserByte34Cmp) + { + // sensor->isInitialized = 1; + // sensor->Init.init_func = (HAL_StatusTypeDef (*)())Dallas_SensorInitByUserBytes; + result = Dallas_SensorInit(onewire, sensor, &DS.DevAddr[i]); + return result; + } } } Dallas_SensorDeInit(sensor); @@ -334,12 +327,11 @@ HAL_StatusTypeDef Dallas_SensorInitByUserBytes(OneWire_t *onewire, DALLAS_Handle } /** - * @brief Инициализирует структуру датчика по индеку + * @brief Инициализирует структуру датчика по порядковому номеру * @param onewire Указатель на структуру OneWire * @param sensor Указатель на структуру датчика - * @param sens_ind Порядковый номер датчика в структуре * @retval HAL Status - * @details Индекс - это порядковый номер датчика в списке найденных. + * @details Порядковый номер датчика в списке найденных. * Т.е. каким по счету этот датчик был найден */ HAL_StatusTypeDef Dallas_SensorInitByInd(OneWire_t *onewire, DALLAS_HandleTypeDef *sensor) @@ -362,12 +354,10 @@ HAL_StatusTypeDef Dallas_SensorInitByInd(OneWire_t *onewire, DALLAS_HandleTypeDe /** * @brief Инициализирует датчик для работы - * @param onewire Указатель на структуру OneWire - * @param sensor Указатель на структуру датчика - * @param sens_ind Порядковый номер датчика в структуре + * @param onewire Указатель на структуру OneWire + * @param sensor Указатель на структуру датчика + * @param ROM ROM датчика, который надо инициализировать * @retval HAL Status - * @details Индекс - это порядковый номер датчика в списке найденных. - * Т.е. каким по счету этот датчик был найден */ HAL_StatusTypeDef Dallas_SensorInit(OneWire_t *onewire, DALLAS_HandleTypeDef *sensor, uint8_t (*ROM)[DALLAS_ROM_SIZE]) { @@ -378,7 +368,10 @@ HAL_StatusTypeDef Dallas_SensorInit(OneWire_t *onewire, DALLAS_HandleTypeDef *se if(onewire == 0) return HAL_ERROR; - sensor->onewire = onewire; + + + sensor->onewire = onewire; + for(int i = 0; i < DALLAS_ROM_SIZE; i++) sensor->sensROM[i] = (*ROM)[i]; @@ -409,13 +402,11 @@ HAL_StatusTypeDef Dallas_SensorInit(OneWire_t *onewire, DALLAS_HandleTypeDef *se } /** - * @brief Деинициализирует полностью структуру датчика + * @brief Деинициализирует структуру датчика * @param onewire Указатель на структуру OneWire * @param sensor Указатель на структуру датчика * @param sens_ind Порядковый номер датчика в структуре * @retval HAL Status - * @details Индекс - это порядковый номер датчика в списке найденных. - * Т.е. каким по счету этот датчик был найден */ HAL_StatusTypeDef Dallas_SensorDeInit(DALLAS_HandleTypeDef *sensor) { @@ -423,20 +414,24 @@ HAL_StatusTypeDef Dallas_SensorDeInit(DALLAS_HandleTypeDef *sensor) return HAL_ERROR; DALLAS_InitStructTypeDef initbuff = sensor->Init; + DALLAS_ControlTypeDef ctrlbuff = sensor->Control; memset(sensor, 0, sizeof(DALLAS_HandleTypeDef)); sensor->Init = initbuff; + sensor->Control = ctrlbuff; return HAL_OK; } /** * @brief Запускает измерение температуры на всех датчиках - * @param waitCondition Условие ожидания завершения преобразования + * @param onewire Указатель на структуру OneWire + * @param waitCondition Условие ожидания завершения преобразования + * @param dallas_delay_ms Время ожидания окончания конверсии * @retval HAL Status */ -HAL_StatusTypeDef Dallas_StartConvertTAll(OneWire_t *onewire, DALLAS_WaitCondition waitCondition, uint8_t dallas_delay_ms) +HAL_StatusTypeDef Dallas_StartConvertTAll(OneWire_t *onewire, DALLAS_WaitConvertionTypeDef waitCondition, uint8_t dallas_delay_ms) { HAL_StatusTypeDef result; uint8_t rxDummyData; @@ -497,7 +492,7 @@ HAL_StatusTypeDef Dallas_StartConvertTAll(OneWire_t *onewire, DALLAS_WaitConditi * @param waitCondition Условие ожидания завершения преобразования * @retval HAL Status */ -HAL_StatusTypeDef Dallas_ConvertT(DALLAS_HandleTypeDef *sensor, DALLAS_WaitCondition waitCondition) +HAL_StatusTypeDef Dallas_ConvertT(DALLAS_HandleTypeDef *sensor, DALLAS_WaitConvertionTypeDef waitCondition) { HAL_StatusTypeDef result; uint8_t rxDummyData; @@ -571,7 +566,7 @@ HAL_StatusTypeDef Dallas_ConvertT(DALLAS_HandleTypeDef *sensor, DALLAS_WaitCondi /** - * @brief Читает содержимое памяти (scratchpad) датчика DALLAS_HandleTypeDef + * @brief Читает измеренную датчиком температуру * @param sensor Указатель на структуру датчика * @retval HAL Status */ @@ -602,7 +597,7 @@ HAL_StatusTypeDef Dallas_ReadTemperature(DALLAS_HandleTypeDef *sensor) } /** - * @brief Выполняет команду инициализации DALLAS_HandleTypeDef + * @brief Проверяет подключен ли датчик (чтение scratchpad) * @param sensor Указатель на структуру датчика * @retval HAL Status */ @@ -623,12 +618,15 @@ HAL_StatusTypeDef Dallas_IsConnected(DALLAS_HandleTypeDef *sensor) } else { + if(sensor->isConnected == 1) { sensor->f.disconnect_cnt++; sensor->isLost = 1; } sensor->isConnected = 0; + + Dallas_ReplaceLostedSensor(sensor); return HAL_BUSY; // использую busy, чтобы отличать ситуацию от HAL_ERROR } } @@ -657,13 +655,12 @@ HAL_StatusTypeDef Dallas_WriteUserBytes(DALLAS_HandleTypeDef *sensor, uint16_t U result = DS18B20_WriteUserBytes(sensor->onewire, (uint8_t *)sensor->sensROM, UserBytes12, UserBytes34, UserBytesMask); if (result != HAL_OK) { - sensor->f.read_temperature_err_cnt++; + sensor->f.other_err_cnt++; return result; } result = DS18B20_ReadScratchpad(sensor->onewire, (uint8_t *)sensor->sensROM, (uint8_t *)&sensor->scratchpad); if (result != HAL_OK) { - sensor->f.read_temperature_err_cnt++; return result; } @@ -671,26 +668,3 @@ HAL_StatusTypeDef Dallas_WriteUserBytes(DALLAS_HandleTypeDef *sensor, uint16_t U } -///** -// * @brief Читает уникальный ROM-код датчика DALLAS_HandleTypeDef -// * @param sensor Указатель на структуру датчика -// * @retval HAL Status -// */ -//HAL_StatusTypeDef Dallas_ReadRom(DALLAS_HandleTypeDef *sensor) -//{ -// HAL_StatusTypeDef result = HAL_OK; -// uint8_t rxData[DALLAS_READ_ROM_RX_BYTES_NUM]; -// -// DS18B20_ReadScratchpad(sensor->onewire, sensor->sensROM, (uint8_t *)&sensor->scratchpad); -// -// -// if (result == HAL_OK) -// { -// for (uint8_t i = 0; i < DALLAS_SERIAL_NUMBER_LEN_BYTES; i++) -// { -// sensor->sensROM[i] = rxData[DALLAS_SERIAL_NUMBER_OFFSET_BYTES + i]; -// } -// } - -// return result; -//} \ No newline at end of file diff --git a/DS18B20/dallas_tools.h b/DS18B20/dallas_tools.h index 2958307..e0d8ad7 100644 --- a/DS18B20/dallas_tools.h +++ b/DS18B20/dallas_tools.h @@ -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); diff --git a/DS18B20/ds18b20.c b/DS18B20/ds18b20_driver.c similarity index 97% rename from DS18B20/ds18b20.c rename to DS18B20/ds18b20_driver.c index 8ec9e2e..1e7c2ec 100644 --- a/DS18B20/ds18b20.c +++ b/DS18B20/ds18b20_driver.c @@ -1,11 +1,11 @@ /** ****************************************************************************** - * @file ds18b20.c + * @file ds18b20_driver.c * @brief This file includes the HAL/LL driver for DS18B20 1-Wire Digital * Thermometer ****************************************************************************** */ -#include "ds18b20.h" +#include "ds18b20_driver.h" DS18B20_Drv_t DS; OneWire_t OW; @@ -222,19 +222,19 @@ HAL_StatusTypeDef DS18B20_CalcTemperature(OneWire_t* OW, uint8_t *ROM, uint8_t * switch (resolution) { case DS18B20_RESOLUTION_9BITS: { decimal = (temperature >> 3) & 0x01; - decimal *= (float)DS18B20_DECIMAL_STEPS_9BIT; + decimal *= (float)DS18B20_DECIMAL_STEP_9BIT; } break; case DS18B20_RESOLUTION_10BITS: { decimal = (temperature >> 2) & 0x03; - decimal *= (float)DS18B20_DECIMAL_STEPS_10BIT; + decimal *= (float)DS18B20_DECIMAL_STEP_10BIT; } break; case DS18B20_RESOLUTION_11BITS: { decimal = (temperature >> 1) & 0x07; - decimal *= (float)DS18B20_DECIMAL_STEPS_11BIT; + decimal *= (float)DS18B20_DECIMAL_STEP_11BIT; } break; case DS18B20_RESOLUTION_12BITS: { decimal = temperature & 0x0F; - decimal *= (float)DS18B20_DECIMAL_STEPS_12BIT; + decimal *= (float)DS18B20_DECIMAL_STEP_12BIT; } break; default: { *Destination = 0; @@ -487,7 +487,7 @@ uint8_t DS18B20_AlarmSearch(DS18B20_Drv_t *DS, OneWire_t* OW) uint8_t t = 0; /* Reset Alarm in DS */ - for(uint8_t i = 0; i < DS18B20_DEVICE_AMOUNT; i++) + for(uint8_t i = 0; i < OW->RomCnt; i++) { for(uint8_t j = 0; j < 8; j++) { diff --git a/DS18B20/ds18b20.h b/DS18B20/ds18b20_driver.h similarity index 87% rename from DS18B20/ds18b20.h rename to DS18B20/ds18b20_driver.h index f26bf63..e1ede3d 100644 --- a/DS18B20/ds18b20.h +++ b/DS18B20/ds18b20_driver.h @@ -1,6 +1,6 @@ /** ****************************************************************************** - * @file ds18b20.h + * @file ds18b20_driver.h * @brief This file contains all the constants parameters for the DS18B20 * 1-Wire Digital Thermometer ****************************************************************************** @@ -22,8 +22,8 @@ #include "onewire.h" /* I/O Port ------------------------------------------------------------------*/ -#define DS_Pin GPIO_PIN_9 -#define DS_GPIO_Port GPIOA +#define DS_Pin GPIO_PIN_9 +#define DS_GPIO_Port GPIOA /* Data Structure ------------------------------------------------------------*/ #define DS18B20_DEVICE_AMOUNT 8 @@ -54,11 +54,10 @@ #define DS18B20_RESOLUTION_R1 6 #define DS18B20_RESOLUTION_R0 5 -#define DS18B20_DECIMAL_STEPS_12BIT 0.0625 -#define DS18B20_DECIMAL_STEPS_11BIT 0.125 -#define DS18B20_DECIMAL_STEPS_10BIT 0.25 -#define DS18B20_DECIMAL_STEPS_9BIT 0.5 - +#define DS18B20_DECIMAL_STEP_12BIT 0.0625 +#define DS18B20_DECIMAL_STEP_11BIT 0.125 +#define DS18B20_DECIMAL_STEP_10BIT 0.25 +#define DS18B20_DECIMAL_STEP_9BIT 0.5 #define DS18B20_DELAY_MS_9_BITS 94 #define DS18B20_DELAY_MS_10_BITS 188 @@ -66,11 +65,6 @@ #define DS18B20_DELAY_MS_12_BITS 750 #define DS18B20_DELAY_MS_MAX DS18B20_DELAY_MS_12_BITS -#define DS18B20_9_BITS_DATA_MASK 0x7F8 -#define DS18B20_10_BITS_DATA_MASK 0x7FC -#define DS18B20_11_BITS_DATA_MASK 0x7FE -#define DS18B20_12_BITS_DATA_MASK 0x7FF - /* DS18B20 Resolutions */ typedef enum { diff --git a/DS18B20/onewire.c b/DS18B20/onewire.c index abcfd04..a718805 100644 --- a/DS18B20/onewire.c +++ b/DS18B20/onewire.c @@ -1,9 +1,9 @@ /** - ****************************************************************************** - * @file onewire.c - * @brief This file includes the HAL/LL driver for OneWire devices - ****************************************************************************** - */ +****************************************************************************** +* @file onewire.c +* @brief This file includes the HAL/LL driver for OneWire devices +****************************************************************************** +*/ #include "onewire.h" /** diff --git a/DS18B20/onewire.h b/DS18B20/onewire.h index 1452bc0..88452dc 100644 --- a/DS18B20/onewire.h +++ b/DS18B20/onewire.h @@ -1,14 +1,9 @@ /** - ****************************************************************************** - * @file onewire.h - * @brief This file contains all the constants parameters for the OneWire - ****************************************************************************** - * @attention - * Usage: - * Uncomment LL Driver for HAL driver - * - ****************************************************************************** - */ +****************************************************************************** +* @file onewire.h +* @brief This file contains all the constants parameters for the OneWire +****************************************************************************** +*/ /* Define to prevent recursive inclusion -------------------------------------*/ #ifndef ONEWIRE_H #define ONEWIRE_H diff --git a/DS18B20/ow_port.c b/DS18B20/ow_port.c index f48a0c3..f095f8e 100644 --- a/DS18B20/ow_port.c +++ b/DS18B20/ow_port.c @@ -1,9 +1,9 @@ /** - ****************************************************************************** - * @file ow_port.c - * @brief This file includes the driver for port for OneWire purposes - ****************************************************************************** - */ +****************************************************************************** +* @file ow_port.c +* @brief This file includes the driver for port for OneWire purposes +****************************************************************************** +*/ #include "ow_port.h" #include "onewire.h" @@ -40,14 +40,6 @@ void OneWire_Pin_Mode(OneWire_t* OW, PinMode Mode) OW->DataPort->CRH &= ~((GPIO_CRL_CNF0 | GPIO_CRL_MODE0) << pin_cr_numb); OW->DataPort->CRH |= (3 << pin_cr_numb); } -// if(Mode == Input) -// { -// GPIOA->CRH &= ~((GPIO_CRH_CNF9 | GPIO_CRH_MODE9)); -// GPIOA->CRH |= (1 << GPIO_CRH_CNF9_Pos); -// }else{ -// GPIOA->CRH &= ~((GPIO_CRH_CNF9 | GPIO_CRH_MODE9)); -// GPIOA->CRH |= (3 << GPIO_CRH_MODE9_Pos); -// } #else #ifdef LL_Driver if(Mode == Input) diff --git a/DS18B20/ow_port.h b/DS18B20/ow_port.h index 93c3381..d629c60 100644 --- a/DS18B20/ow_port.h +++ b/DS18B20/ow_port.h @@ -1,14 +1,9 @@ /** - ****************************************************************************** - * @file onewire.h - * @brief This file contains all the constants parameters for the OneWire - ****************************************************************************** - * @attention - * Usage: - * Uncomment LL Driver for HAL driver - * - ****************************************************************************** - */ +****************************************************************************** +* @file ow_port.h +* @brief This file includes the driver for port for OneWire purposes +****************************************************************************** +*/ /* Define to prevent recursive inclusion -------------------------------------*/ #ifndef ONEWIRE_PORT_H #define ONEWIRE_PORT_H diff --git a/test_project/MDK-ARM/ds18b20.uvoptx b/test_project/MDK-ARM/ds18b20.uvoptx index daaccca..58ff380 100644 --- a/test_project/MDK-ARM/ds18b20.uvoptx +++ b/test_project/MDK-ARM/ds18b20.uvoptx @@ -148,7 +148,40 @@ -U53FF72064980555724221187 -O2254 -SF10000 -C0 -A0 -I0 -HNlocalhost -HP7184 -P1 -N00("ARM CoreSight SW-DP (ARM Core") -D00(1BA01477) -L00(0) -TO131090 -TC10000000 -TT10000000 -TP21 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO7 -FD20000000 -FC800 -FN1 -FF0STM32F10x_128.FLM -FS08000000 -FL08000 -FP0($$Device:STM32F103C6$Flash\STM32F10x_128.FLM) -WA0 -WE0 -WVCE4 -WS2710 -WM0 -WP2 - + + + 0 + 0 + 366 + 1 +
0
+ 0 + 0 + 0 + 0 + 0 + 0 + ..\..\DS18B20\dallas_tools.c + + +
+ + 1 + 0 + 257 + 1 +
0
+ 0 + 0 + 0 + 0 + 0 + 0 + ..\..\DS18B20\dallas_tools.c + + +
+
0 @@ -608,8 +641,8 @@ 0 0 0 - ..\..\DS18B20\ds18b20.c - ds18b20.c + ..\..\DS18B20\ds18b20_driver.c + ds18b20_driver.c 0 0 @@ -620,8 +653,8 @@ 0 0 0 - ..\..\DS18B20\ds18b20.h - ds18b20.h + ..\..\DS18B20\ds18b20_driver.h + ds18b20_driver.h 0 0 @@ -632,30 +665,6 @@ 0 0 0 - ..\..\DS18B20\dwt.c - dwt.c - 0 - 0 - - - 5 - 28 - 5 - 0 - 0 - 0 - ..\..\DS18B20\dwt.h - dwt.h - 0 - 0 - - - 5 - 29 - 1 - 0 - 0 - 0 ..\..\DS18B20\onewire.c onewire.c 0 @@ -663,7 +672,7 @@ 5 - 30 + 28 5 0 0 @@ -675,7 +684,7 @@ 5 - 31 + 29 1 0 0 @@ -687,7 +696,7 @@ 5 - 32 + 30 5 0 0 @@ -697,6 +706,30 @@ 0 0 + + 5 + 31 + 1 + 0 + 0 + 0 + ..\..\DS18B20\dwt.c + dwt.c + 0 + 0 + + + 5 + 32 + 5 + 0 + 0 + 0 + ..\..\DS18B20\dwt.h + dwt.h + 0 + 0 + diff --git a/test_project/MDK-ARM/ds18b20.uvprojx b/test_project/MDK-ARM/ds18b20.uvprojx index 708ef54..5475538 100644 --- a/test_project/MDK-ARM/ds18b20.uvprojx +++ b/test_project/MDK-ARM/ds18b20.uvprojx @@ -577,24 +577,14 @@ ..\..\DS18B20\dallas_tools.h - ds18b20.c + ds18b20_driver.c 1 - ..\..\DS18B20\ds18b20.c + ..\..\DS18B20\ds18b20_driver.c - ds18b20.h + ds18b20_driver.h 5 - ..\..\DS18B20\ds18b20.h - - - dwt.c - 1 - ..\..\DS18B20\dwt.c - - - dwt.h - 5 - ..\..\DS18B20\dwt.h + ..\..\DS18B20\ds18b20_driver.h onewire.c @@ -616,6 +606,16 @@ 5 ..\..\DS18B20\ow_port.h + + dwt.c + 1 + ..\..\DS18B20\dwt.c + + + dwt.h + 5 + ..\..\DS18B20\dwt.h + diff --git a/~$ds18b20_locations.xlsx b/~$ds18b20_locations.xlsx new file mode 100644 index 0000000..bc1cfe5 Binary files /dev/null and b/~$ds18b20_locations.xlsx differ