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