Кучу всего, переструктурирован проект все должно работать
- onewire: модуль для отправик комманд в DS18B20 - ds18b20_driver: модуль для отправик комманд в DS18B20 - dallas_tools: модуль для общения с DS18B20
This commit is contained in:
@@ -5,7 +5,7 @@
|
|||||||
* @author MicroTechnics (microtechnics.ru)
|
* @author MicroTechnics (microtechnics.ru)
|
||||||
******************************************************************************
|
******************************************************************************
|
||||||
@details
|
@details
|
||||||
Ýòîò ôàéë ñîäåðæèò ðåàëèçàöèþ ôóíêöèé äëÿ ðàáîòû ñ äàò÷èêîì DALLAS_HandleTypeDef
|
Этот файл содержит реализацию функций для работы с датчиком DS18B20
|
||||||
÷åðåç èíòåðôåéñ 1-Wire. Îí ïðåäîñòàâëÿåò ôóíêöèè äëÿ ÷òåíèÿ è çàïèñè
|
÷åðåç èíòåðôåéñ 1-Wire. Îí ïðåäîñòàâëÿåò ôóíêöèè äëÿ ÷òåíèÿ è çàïèñè
|
||||||
êîíôèãóðàöèè, âûïîëíåíèÿ èçìåðåíèé è îáðàáîòêè ïîëó÷åííûõ äàííûõ.
|
êîíôèãóðàöèè, âûïîëíåíèÿ èçìåðåíèé è îáðàáîòêè ïîëó÷åííûõ äàííûõ.
|
||||||
*****************************************************************************/
|
*****************************************************************************/
|
||||||
@@ -145,28 +145,29 @@ HAL_StatusTypeDef Dallas_ReplaceLostedSensor(DALLAS_HandleTypeDef *sensor)
|
|||||||
{
|
{
|
||||||
HAL_StatusTypeDef result;
|
HAL_StatusTypeDef result;
|
||||||
|
|
||||||
|
|
||||||
if(sensor == NULL)
|
if(sensor == NULL)
|
||||||
return HAL_ERROR;
|
return HAL_ERROR;
|
||||||
|
|
||||||
if(AllSens.outdoor.isLost)
|
if(sensor->isLost)
|
||||||
{
|
{
|
||||||
if(DS18B20_Search(&DS, &OW) != HAL_OK)
|
if(DS18B20_Search(&DS, &OW) != HAL_OK)
|
||||||
return HAL_ERROR;
|
return HAL_ERROR;
|
||||||
|
|
||||||
if(sensor->Init.init_func(sensor->onewire, sensor) != HAL_OK)
|
if(sensor->Init.init_func(sensor->onewire, sensor) != HAL_OK)
|
||||||
return HAL_ERROR;
|
return HAL_ERROR;
|
||||||
|
|
||||||
|
return HAL_OK;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
/*unknown sensor*/
|
return HAL_OK;
|
||||||
return HAL_ERROR;
|
|
||||||
}
|
}
|
||||||
return HAL_OK;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Ôóíêöèÿ äëÿ äîáàâëåíèÿ íîâîãî äàò÷èêà â ñòðóêòóðó
|
* @brief Функция для иниицализации нового датчика в структуре
|
||||||
* @param onewire Óêàçàòåëü íà ñòðóêòóðó OneWire
|
* @param onewire Óêàçàòåëü íà ñòðóêòóðó OneWire
|
||||||
* @param sensor Óêàçàòåëü íà ñòðóêòóðó äàò÷èêà
|
* @param sensor Óêàçàòåëü íà ñòðóêòóðó äàò÷èêà
|
||||||
* @retval HAL Status
|
* @retval HAL Status
|
||||||
@@ -219,7 +220,7 @@ HAL_StatusTypeDef Dallas_SensorInitByROM(OneWire_t *onewire, DALLAS_HandleTypeDe
|
|||||||
|
|
||||||
uint8_t comparebytes = DALLAS_ROM_SIZE;
|
uint8_t comparebytes = DALLAS_ROM_SIZE;
|
||||||
int ROM_ind = 0;
|
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;
|
comparebytes = DALLAS_ROM_SIZE;
|
||||||
for(int rom_byte = 0; rom_byte < DALLAS_ROM_SIZE; rom_byte++)
|
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;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
/* Ïðîâåðêà ïðèñóòñòâóåò ëè âûáðàííûé äàò÷èê íà ëèíèè */
|
|
||||||
|
|
||||||
|
/* Проверка присутствует ли выбранный датчик на линии */
|
||||||
if(comparebytes == 0)
|
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]);
|
result = Dallas_SensorInit(onewire, sensor, &DS.DevAddr[ROM_ind]);
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
@@ -260,10 +256,7 @@ HAL_StatusTypeDef Dallas_SensorInitByROM(OneWire_t *onewire, DALLAS_HandleTypeDe
|
|||||||
* @brief Èíèöèàëèçèðóåò ñòðóêòóðó äàò÷èêà ïî ïîëüçîâàòåëüñêèì áàéòàì
|
* @brief Èíèöèàëèçèðóåò ñòðóêòóðó äàò÷èêà ïî ïîëüçîâàòåëüñêèì áàéòàì
|
||||||
* @param onewire Óêàçàòåëü íà ñòðóêòóðó OneWire
|
* @param onewire Óêàçàòåëü íà ñòðóêòóðó OneWire
|
||||||
* @param sensor Óêàçàòåëü íà ñòðóêòóðó äàò÷èêà
|
* @param sensor Óêàçàòåëü íà ñòðóêòóðó äàò÷èêà
|
||||||
* @param UserBytes34 Ïîëüçîâàòåëüñêèå áàéòû 3 è 4, NULL äëÿ èãíîðà
|
|
||||||
* @param UserBytes12 Ïîëüçîâàòåëüñêèå áàéòû 1 è 2, NULL äëÿ èãíîðà
|
|
||||||
* @retval HAL Status
|
* @retval HAL Status
|
||||||
* @details ñòàðøèé áàéò - UserByte4/UserByte2, ìëàäøèé - UserByte3/UserByte1.
|
|
||||||
*/
|
*/
|
||||||
HAL_StatusTypeDef Dallas_SensorInitByUserBytes(OneWire_t *onewire, DALLAS_HandleTypeDef *sensor)
|
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;
|
uint8_t UserByte34Cmp = 0;
|
||||||
|
|
||||||
DALLAS_ScratchpadTypeDef scratchpad;
|
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++)
|
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;
|
UserByte12Cmp = 1;
|
||||||
}
|
}
|
||||||
}/* Åñëè ðàâíåíèå UserByte1 è UserByte2 íå âûáðàíî, òî ñ÷èòàåì ÷òî îíè îäèíàêîâûå */
|
/* Сравнение UserByte3 и UserByte4, если они не равны нулю */
|
||||||
else
|
if(sensor->Init.UserBytes34 != NULL)
|
||||||
{
|
{
|
||||||
UserByte12Cmp = 1;
|
if( (scratchpad.UserByte3 == UserByte3) &&
|
||||||
}
|
(scratchpad.UserByte4 == UserByte4))
|
||||||
/* Ñðàâíåíèå UserByte3 è UserByte4, åñëè âûáðàíî */
|
{
|
||||||
if(sensor->Init.UserBytes34 != NULL)
|
UserByte34Cmp = 1;
|
||||||
{
|
}
|
||||||
if( (scratchpad.UserByte3 == UserByte3) &&
|
}/* Если сравнение UserByte3 и UserByte4 не выбрано, то считаем что они одинаковые */
|
||||||
(scratchpad.UserByte4 == UserByte4))
|
else
|
||||||
{
|
{
|
||||||
UserByte34Cmp = 1;
|
UserByte34Cmp = 1;
|
||||||
}
|
}
|
||||||
}/* Åñëè ðàâíåíèå UserByte3 è UserByte4 íå âûáðàíî, òî ñ÷èòàåì ÷òî îíè îäèíàêîâûå */
|
/* Если нашли нужный датчик - завершаем поиск */
|
||||||
else
|
if(UserByte12Cmp && UserByte34Cmp)
|
||||||
{
|
{
|
||||||
UserByte34Cmp = 1;
|
// sensor->isInitialized = 1;
|
||||||
}
|
// sensor->Init.init_func = (HAL_StatusTypeDef (*)())Dallas_SensorInitByUserBytes;
|
||||||
/* Åñëè íàøëè íóæíûé äàò÷èê - çàâåðøàåì ïîèñê */
|
result = Dallas_SensorInit(onewire, sensor, &DS.DevAddr[i]);
|
||||||
if(UserByte12Cmp && UserByte34Cmp)
|
return result;
|
||||||
{
|
}
|
||||||
// sensor->isInitialized = 1;
|
|
||||||
// sensor->Init.init_func = (HAL_StatusTypeDef (*)())Dallas_SensorInitByUserBytes;
|
|
||||||
result = Dallas_SensorInit(onewire, sensor, &DS.DevAddr[i]);
|
|
||||||
return result;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Dallas_SensorDeInit(sensor);
|
Dallas_SensorDeInit(sensor);
|
||||||
@@ -334,12 +327,11 @@ HAL_StatusTypeDef Dallas_SensorInitByUserBytes(OneWire_t *onewire, DALLAS_Handle
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Èíèöèàëèçèðóåò ñòðóêòóðó äàò÷èêà ïî èíäåêó
|
* @brief Инициализирует структуру датчика по порядковому номеру
|
||||||
* @param onewire Óêàçàòåëü íà ñòðóêòóðó OneWire
|
* @param onewire Óêàçàòåëü íà ñòðóêòóðó OneWire
|
||||||
* @param sensor Óêàçàòåëü íà ñòðóêòóðó äàò÷èêà
|
* @param sensor Óêàçàòåëü íà ñòðóêòóðó äàò÷èêà
|
||||||
* @param sens_ind Ïîðÿäêîâûé íîìåð äàò÷èêà â ñòðóêòóðå
|
|
||||||
* @retval HAL Status
|
* @retval HAL Status
|
||||||
* @details Èíäåêñ - ýòî ïîðÿäêîâûé íîìåð äàò÷èêà â ñïèñêå íàéäåííûõ.
|
* @details Порядковый номер датчика в списке найденных.
|
||||||
* Ò.å. êàêèì ïî ñ÷åòó ýòîò äàò÷èê áûë íàéäåí
|
* Ò.å. êàêèì ïî ñ÷åòó ýòîò äàò÷èê áûë íàéäåí
|
||||||
*/
|
*/
|
||||||
HAL_StatusTypeDef Dallas_SensorInitByInd(OneWire_t *onewire, DALLAS_HandleTypeDef *sensor)
|
HAL_StatusTypeDef Dallas_SensorInitByInd(OneWire_t *onewire, DALLAS_HandleTypeDef *sensor)
|
||||||
@@ -362,12 +354,10 @@ HAL_StatusTypeDef Dallas_SensorInitByInd(OneWire_t *onewire, DALLAS_HandleTypeDe
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Èíèöèàëèçèðóåò äàò÷èê äëÿ ðàáîòû
|
* @brief Èíèöèàëèçèðóåò äàò÷èê äëÿ ðàáîòû
|
||||||
* @param onewire Óêàçàòåëü íà ñòðóêòóðó OneWire
|
* @param onewire Указатель на структуру OneWire
|
||||||
* @param sensor Óêàçàòåëü íà ñòðóêòóðó äàò÷èêà
|
* @param sensor Указатель на структуру датчика
|
||||||
* @param sens_ind Ïîðÿäêîâûé íîìåð äàò÷èêà â ñòðóêòóðå
|
* @param ROM ROM датчика, который надо инициализировать
|
||||||
* @retval HAL Status
|
* @retval HAL Status
|
||||||
* @details Èíäåêñ - ýòî ïîðÿäêîâûé íîìåð äàò÷èêà â ñïèñêå íàéäåííûõ.
|
|
||||||
* Ò.å. êàêèì ïî ñ÷åòó ýòîò äàò÷èê áûë íàéäåí
|
|
||||||
*/
|
*/
|
||||||
HAL_StatusTypeDef Dallas_SensorInit(OneWire_t *onewire, DALLAS_HandleTypeDef *sensor, uint8_t (*ROM)[DALLAS_ROM_SIZE])
|
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)
|
if(onewire == 0)
|
||||||
return HAL_ERROR;
|
return HAL_ERROR;
|
||||||
|
|
||||||
sensor->onewire = onewire;
|
|
||||||
|
|
||||||
|
sensor->onewire = onewire;
|
||||||
|
|
||||||
for(int i = 0; i < DALLAS_ROM_SIZE; i++)
|
for(int i = 0; i < DALLAS_ROM_SIZE; i++)
|
||||||
sensor->sensROM[i] = (*ROM)[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 onewire Óêàçàòåëü íà ñòðóêòóðó OneWire
|
||||||
* @param sensor Óêàçàòåëü íà ñòðóêòóðó äàò÷èêà
|
* @param sensor Óêàçàòåëü íà ñòðóêòóðó äàò÷èêà
|
||||||
* @param sens_ind Ïîðÿäêîâûé íîìåð äàò÷èêà â ñòðóêòóðå
|
* @param sens_ind Ïîðÿäêîâûé íîìåð äàò÷èêà â ñòðóêòóðå
|
||||||
* @retval HAL Status
|
* @retval HAL Status
|
||||||
* @details Èíäåêñ - ýòî ïîðÿäêîâûé íîìåð äàò÷èêà â ñïèñêå íàéäåííûõ.
|
|
||||||
* Ò.å. êàêèì ïî ñ÷åòó ýòîò äàò÷èê áûë íàéäåí
|
|
||||||
*/
|
*/
|
||||||
HAL_StatusTypeDef Dallas_SensorDeInit(DALLAS_HandleTypeDef *sensor)
|
HAL_StatusTypeDef Dallas_SensorDeInit(DALLAS_HandleTypeDef *sensor)
|
||||||
{
|
{
|
||||||
@@ -423,20 +414,24 @@ HAL_StatusTypeDef Dallas_SensorDeInit(DALLAS_HandleTypeDef *sensor)
|
|||||||
return HAL_ERROR;
|
return HAL_ERROR;
|
||||||
|
|
||||||
DALLAS_InitStructTypeDef initbuff = sensor->Init;
|
DALLAS_InitStructTypeDef initbuff = sensor->Init;
|
||||||
|
DALLAS_ControlTypeDef ctrlbuff = sensor->Control;
|
||||||
|
|
||||||
memset(sensor, 0, sizeof(DALLAS_HandleTypeDef));
|
memset(sensor, 0, sizeof(DALLAS_HandleTypeDef));
|
||||||
|
|
||||||
sensor->Init = initbuff;
|
sensor->Init = initbuff;
|
||||||
|
sensor->Control = ctrlbuff;
|
||||||
|
|
||||||
return HAL_OK;
|
return HAL_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Çàïóñêàåò èçìåðåíèå òåìïåðàòóðû íà âñåõ äàò÷èêàõ
|
* @brief Çàïóñêàåò èçìåðåíèå òåìïåðàòóðû íà âñåõ äàò÷èêàõ
|
||||||
* @param waitCondition Óñëîâèå îæèäàíèÿ çàâåðøåíèÿ ïðåîáðàçîâàíèÿ
|
* @param onewire Указатель на структуру OneWire
|
||||||
|
* @param waitCondition Условие ожидания завершения преобразования
|
||||||
|
* @param dallas_delay_ms Время ожидания окончания конверсии
|
||||||
* @retval HAL Status
|
* @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;
|
HAL_StatusTypeDef result;
|
||||||
uint8_t rxDummyData;
|
uint8_t rxDummyData;
|
||||||
@@ -497,7 +492,7 @@ HAL_StatusTypeDef Dallas_StartConvertTAll(OneWire_t *onewire, DALLAS_WaitConditi
|
|||||||
* @param waitCondition Óñëîâèå îæèäàíèÿ çàâåðøåíèÿ ïðåîáðàçîâàíèÿ
|
* @param waitCondition Óñëîâèå îæèäàíèÿ çàâåðøåíèÿ ïðåîáðàçîâàíèÿ
|
||||||
* @retval HAL Status
|
* @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;
|
HAL_StatusTypeDef result;
|
||||||
uint8_t rxDummyData;
|
uint8_t rxDummyData;
|
||||||
@@ -571,7 +566,7 @@ HAL_StatusTypeDef Dallas_ConvertT(DALLAS_HandleTypeDef *sensor, DALLAS_WaitCondi
|
|||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief ×èòàåò ñîäåðæèìîå ïàìÿòè (scratchpad) äàò÷èêà DALLAS_HandleTypeDef
|
* @brief Читает измеренную датчиком температуру
|
||||||
* @param sensor Óêàçàòåëü íà ñòðóêòóðó äàò÷èêà
|
* @param sensor Óêàçàòåëü íà ñòðóêòóðó äàò÷èêà
|
||||||
* @retval HAL Status
|
* @retval HAL Status
|
||||||
*/
|
*/
|
||||||
@@ -602,7 +597,7 @@ HAL_StatusTypeDef Dallas_ReadTemperature(DALLAS_HandleTypeDef *sensor)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Âûïîëíÿåò êîìàíäó èíèöèàëèçàöèè DALLAS_HandleTypeDef
|
* @brief Проверяет подключен ли датчик (чтение scratchpad)
|
||||||
* @param sensor Óêàçàòåëü íà ñòðóêòóðó äàò÷èêà
|
* @param sensor Óêàçàòåëü íà ñòðóêòóðó äàò÷èêà
|
||||||
* @retval HAL Status
|
* @retval HAL Status
|
||||||
*/
|
*/
|
||||||
@@ -623,12 +618,15 @@ HAL_StatusTypeDef Dallas_IsConnected(DALLAS_HandleTypeDef *sensor)
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|
||||||
if(sensor->isConnected == 1)
|
if(sensor->isConnected == 1)
|
||||||
{
|
{
|
||||||
sensor->f.disconnect_cnt++;
|
sensor->f.disconnect_cnt++;
|
||||||
sensor->isLost = 1;
|
sensor->isLost = 1;
|
||||||
}
|
}
|
||||||
sensor->isConnected = 0;
|
sensor->isConnected = 0;
|
||||||
|
|
||||||
|
Dallas_ReplaceLostedSensor(sensor);
|
||||||
return HAL_BUSY; // èñïîëüçóþ busy, ÷òîáû îòëè÷àòü ñèòóàöèþ îò HAL_ERROR
|
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);
|
result = DS18B20_WriteUserBytes(sensor->onewire, (uint8_t *)sensor->sensROM, UserBytes12, UserBytes34, UserBytesMask);
|
||||||
if (result != HAL_OK)
|
if (result != HAL_OK)
|
||||||
{
|
{
|
||||||
sensor->f.read_temperature_err_cnt++;
|
sensor->f.other_err_cnt++;
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
result = DS18B20_ReadScratchpad(sensor->onewire, (uint8_t *)sensor->sensROM, (uint8_t *)&sensor->scratchpad);
|
result = DS18B20_ReadScratchpad(sensor->onewire, (uint8_t *)sensor->sensROM, (uint8_t *)&sensor->scratchpad);
|
||||||
if (result != HAL_OK)
|
if (result != HAL_OK)
|
||||||
{
|
{
|
||||||
sensor->f.read_temperature_err_cnt++;
|
|
||||||
return result;
|
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;
|
|
||||||
//}
|
|
||||||
@@ -1,8 +1,14 @@
|
|||||||
/**
|
/**
|
||||||
******************************************************************************
|
******************************************************************************
|
||||||
* @file : dallas_tools.h
|
* @file dallas_tools.h
|
||||||
* @brief : DALLAS driver
|
* @brief Драйвер датчиков температуры DALLAS
|
||||||
* @author : MicroTechnics (microtechnics.ru)
|
******************************************************************************
|
||||||
|
* Этот файл предоставляет объявления и определения для работы с датчиками
|
||||||
|
* температуры DS18B20. Он включает структуры данных, макросы и прототипы
|
||||||
|
* функций для инициализации, чтения температуры
|
||||||
|
* и управления датчиками.
|
||||||
|
*
|
||||||
|
* Работа с датчиками ведётся через протокол OneWire.
|
||||||
*****************************************************************************/
|
*****************************************************************************/
|
||||||
|
|
||||||
#ifndef DALLAS_TOOLS_H
|
#ifndef DALLAS_TOOLS_H
|
||||||
@@ -12,33 +18,21 @@
|
|||||||
|
|
||||||
/* Includes -----------------------------------------------------------------*/
|
/* Includes -----------------------------------------------------------------*/
|
||||||
#include "stm32f1xx_hal.h"
|
#include "stm32f1xx_hal.h"
|
||||||
#include "ds18b20.h"
|
#include "ds18b20_driver.h"
|
||||||
#include "onewire.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_12 (DALLAS_USER_BYTE_1|DALLAS_USER_BYTE_2) ///< Первые два байта
|
||||||
#define DALLAS_USER_BYTE_2 (1<<1)
|
#define DALLAS_USER_BYTE_34 (DALLAS_USER_BYTE_3|DALLAS_USER_BYTE_4) ///< Вторые два байта
|
||||||
#define DALLAS_USER_BYTE_3 (1<<2)
|
#define DALLAS_USER_BYTE_ALL (DALLAS_USER_BYTE_12|DALLAS_USER_BYTE_34) ///< Все пользовательские байты
|
||||||
#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 ---------------------------------------------*/
|
/* Declarations and definitions ---------------------------------------------*/
|
||||||
#define DALLAS_ROM_SIZE 8
|
#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_CONFIG_9_BITS 0x1F
|
#define DALLAS_CONFIG_9_BITS 0x1F
|
||||||
#define DALLAS_CONFIG_10_BITS 0x3F
|
#define DALLAS_CONFIG_10_BITS 0x3F
|
||||||
@@ -51,112 +45,98 @@
|
|||||||
#define DALLAS_DELAY_MS_12_BITS 750
|
#define DALLAS_DELAY_MS_12_BITS 750
|
||||||
#define DALLAS_DELAY_MS_MAX DALLAS_DELAY_MS_12_BITS
|
#define DALLAS_DELAY_MS_MAX DALLAS_DELAY_MS_12_BITS
|
||||||
|
|
||||||
#define DALLAS_9_BITS_DATA_MASK 0x7F8
|
/** @brief Структура Scratchpad датчика DALLAS */
|
||||||
#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
|
typedef struct
|
||||||
{
|
{
|
||||||
uint8_t TemperatureLSB;
|
uint8_t TemperatureLSB; ///< Младший байт температуры
|
||||||
uint8_t TemperatureMSB;
|
uint8_t TemperatureMSB; ///< Старший байт температуры
|
||||||
uint8_t tHighRegister;
|
uint8_t tHighRegister; ///< Верхний температурный порог
|
||||||
uint8_t tLowRegister;
|
uint8_t tLowRegister; ///< Нижний температурный порог
|
||||||
uint8_t ConfigRegister;
|
uint8_t ConfigRegister; ///< Конфигурационный регистр
|
||||||
uint8_t reserved;
|
uint8_t reserved; ///< Зарезервировано
|
||||||
uint8_t UserByte3;
|
uint8_t UserByte3; ///< Пользовательский байт 3
|
||||||
uint8_t UserByte4;
|
uint8_t UserByte4; ///< Пользовательский байт 4
|
||||||
uint8_t ScratchpadCRC;
|
uint8_t ScratchpadCRC; ///< Контрольная сумма
|
||||||
}DALLAS_ScratchpadTypeDef;
|
}DALLAS_ScratchpadTypeDef;
|
||||||
|
|
||||||
|
/** @brief Структура флагов ошибок датчиков DALLAS */
|
||||||
typedef struct
|
typedef struct
|
||||||
{
|
{
|
||||||
unsigned disconnect_cnt;
|
unsigned disconnect_cnt; ///< Счетчик отключений датчика
|
||||||
unsigned read_temperature_err_cnt;
|
unsigned read_temperature_err_cnt; ///< Счетчик ошибок чтения температуры
|
||||||
unsigned timeout_convertion_cnt;
|
unsigned timeout_convertion_cnt; ///< Счетчик ошибок таймаута конвертации
|
||||||
|
unsigned other_err_cnt; ///< Счетчик других ошибок
|
||||||
}DALLAS_FlagsTypeDef;
|
}DALLAS_FlagsTypeDef;
|
||||||
|
|
||||||
|
|
||||||
|
/** @brief Структура инициализации датчика DALLAS */
|
||||||
typedef struct
|
typedef struct
|
||||||
{
|
{
|
||||||
uint64_t ROM;
|
uint64_t ROM; ///< Уникальный ROM-код датчика
|
||||||
uint16_t UserBytes12;
|
uint16_t UserBytes12; ///< Пользовательские байты 1 и 2
|
||||||
uint16_t UserBytes34;
|
uint16_t UserBytes34; ///< Пользовательские байты 3 и 4
|
||||||
uint8_t SensInd;
|
uint8_t SensInd; ///< Индекс сенсора
|
||||||
uint8_t Resolution;
|
uint8_t Resolution; ///< Разрешение датчика
|
||||||
|
HAL_StatusTypeDef (*init_func)(); ///< Функция инициализации
|
||||||
HAL_StatusTypeDef (*init_func)();
|
} DALLAS_InitStructTypeDef;
|
||||||
}DALLAS_InitStructTypeDef;
|
|
||||||
|
|
||||||
|
/** @brief Основная структура обработчика датчика DALLAS */
|
||||||
typedef struct
|
typedef struct
|
||||||
{
|
{
|
||||||
uint8_t isConnected;
|
unsigned isConnected:1; ///< Флаг соединения
|
||||||
uint8_t isInitialized;
|
unsigned isInitialized:1; ///< Флаг инициализации
|
||||||
uint8_t isLost;
|
unsigned isLost:1; ///< Флаг потери связи
|
||||||
#ifdef ONEWIRE_UART_H
|
|
||||||
UART_HandleTypeDef *uart;
|
|
||||||
#else
|
|
||||||
OneWire_t *onewire;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
uint8_t sensROM[DALLAS_ROM_SIZE];
|
|
||||||
DALLAS_ScratchpadTypeDef scratchpad;
|
|
||||||
float temperature;
|
|
||||||
|
|
||||||
DALLAS_InitStructTypeDef Init;
|
OneWire_t *onewire; ///< Интерфейс OneWire
|
||||||
DALLAS_FlagsTypeDef f;
|
uint8_t sensROM[DALLAS_ROM_SIZE]; ///< ROM-код датчика
|
||||||
|
|
||||||
}DALLAS_HandleTypeDef;
|
DALLAS_ScratchpadTypeDef scratchpad; ///< Scratchpad датчика
|
||||||
extern DALLAS_HandleTypeDef outdoor;
|
float temperature; ///< Текущая температура
|
||||||
extern DALLAS_HandleTypeDef indoor;
|
|
||||||
extern DALLAS_HandleTypeDef bathroom;
|
DALLAS_InitStructTypeDef Init; ///< Структура инициализации
|
||||||
extern DALLAS_HandleTypeDef kitchen;
|
DALLAS_FlagsTypeDef f; ///< Флаги
|
||||||
extern DALLAS_HandleTypeDef big_room;
|
|
||||||
extern DALLAS_HandleTypeDef small_room;
|
} DALLAS_HandleTypeDef;
|
||||||
extern DALLAS_HandleTypeDef living_room;
|
|
||||||
extern DALLAS_HandleTypeDef basement;
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/** @brief Варианты ожидания окончания конверсии */
|
||||||
typedef enum
|
typedef enum
|
||||||
{
|
{
|
||||||
DALLAS_WAIT_NONE = 0x00,
|
DALLAS_WAIT_NONE = 0x00, ///< Без ожидания окончания конверсии
|
||||||
DALLAS_WAIT_BUS = 0x01,
|
DALLAS_WAIT_BUS = 0x01, ///< Ожидание окончания конверсии по шине (опрос датчиков - чтение бита)
|
||||||
DALLAS_WAIT_DELAY = 0x02,
|
DALLAS_WAIT_DELAY = 0x02, ///< Без ожидания окончания через задержку (максимальная задержка для заданной разрядности)
|
||||||
} DALLAS_WaitCondition;
|
} DALLAS_WaitConvertionTypeDef;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/* Functions ---------------------------------------------------------------*/
|
/* Functions ---------------------------------------------------------------*/
|
||||||
|
|
||||||
void Dallas_Init(DALLAS_HandleTypeDef *sensor, UART_HandleTypeDef *huart);
|
void Dallas_Init(DALLAS_HandleTypeDef *sensor, UART_HandleTypeDef *huart);
|
||||||
void Dallas_ReadAll(void);
|
void Dallas_ReadAll(void);
|
||||||
void Dallas_FirstInit(void);
|
void Dallas_FirstInit(void);
|
||||||
|
/* Функция для нахождения нового датчика на место потерянного */
|
||||||
HAL_StatusTypeDef Dallas_ReplaceLostedSensor(DALLAS_HandleTypeDef *sensor);
|
HAL_StatusTypeDef Dallas_ReplaceLostedSensor(DALLAS_HandleTypeDef *sensor);
|
||||||
|
/* Функция для иниицализации нового датчика в структуре */
|
||||||
HAL_StatusTypeDef Dallas_AddNewSensors(OneWire_t *onewire, 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_SensorInitByROM(OneWire_t *onewire, DALLAS_HandleTypeDef *sensor);
|
||||||
|
/* Инициализирует структуру датчика по пользовательским байтам */
|
||||||
HAL_StatusTypeDef Dallas_SensorInitByUserBytes(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_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_SensorInit(OneWire_t *onewire, DALLAS_HandleTypeDef *sensor, uint8_t (*ROM)[DALLAS_ROM_SIZE]);
|
||||||
|
/* Деинициализирует структуру датчика */
|
||||||
HAL_StatusTypeDef Dallas_SensorDeInit(DALLAS_HandleTypeDef *sensor);
|
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_ReadTemperature(DALLAS_HandleTypeDef *sensor);
|
||||||
HAL_StatusTypeDef Dallas_ReadScratchpad(DALLAS_HandleTypeDef *sensor);
|
/* Проверяет подключен ли датчик (чтение scratchpad) */
|
||||||
HAL_StatusTypeDef Dallas_WriteScratchpad(DALLAS_HandleTypeDef *sensor, uint8_t ExtendUserBytes);
|
|
||||||
HAL_StatusTypeDef Dallas_IsConnected(DALLAS_HandleTypeDef *sensor);
|
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);
|
HAL_StatusTypeDef Dallas_WriteUserBytes(DALLAS_HandleTypeDef *sensor, uint16_t UserBytes12, uint16_t UserBytes34, uint8_t UserBytesMask);
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -1,11 +1,11 @@
|
|||||||
/**
|
/**
|
||||||
******************************************************************************
|
******************************************************************************
|
||||||
* @file ds18b20.c
|
* @file ds18b20_driver.c
|
||||||
* @brief This file includes the HAL/LL driver for DS18B20 1-Wire Digital
|
* @brief This file includes the HAL/LL driver for DS18B20 1-Wire Digital
|
||||||
* Thermometer
|
* Thermometer
|
||||||
******************************************************************************
|
******************************************************************************
|
||||||
*/
|
*/
|
||||||
#include "ds18b20.h"
|
#include "ds18b20_driver.h"
|
||||||
|
|
||||||
DS18B20_Drv_t DS;
|
DS18B20_Drv_t DS;
|
||||||
OneWire_t OW;
|
OneWire_t OW;
|
||||||
@@ -222,19 +222,19 @@ HAL_StatusTypeDef DS18B20_CalcTemperature(OneWire_t* OW, uint8_t *ROM, uint8_t *
|
|||||||
switch (resolution) {
|
switch (resolution) {
|
||||||
case DS18B20_RESOLUTION_9BITS: {
|
case DS18B20_RESOLUTION_9BITS: {
|
||||||
decimal = (temperature >> 3) & 0x01;
|
decimal = (temperature >> 3) & 0x01;
|
||||||
decimal *= (float)DS18B20_DECIMAL_STEPS_9BIT;
|
decimal *= (float)DS18B20_DECIMAL_STEP_9BIT;
|
||||||
} break;
|
} break;
|
||||||
case DS18B20_RESOLUTION_10BITS: {
|
case DS18B20_RESOLUTION_10BITS: {
|
||||||
decimal = (temperature >> 2) & 0x03;
|
decimal = (temperature >> 2) & 0x03;
|
||||||
decimal *= (float)DS18B20_DECIMAL_STEPS_10BIT;
|
decimal *= (float)DS18B20_DECIMAL_STEP_10BIT;
|
||||||
} break;
|
} break;
|
||||||
case DS18B20_RESOLUTION_11BITS: {
|
case DS18B20_RESOLUTION_11BITS: {
|
||||||
decimal = (temperature >> 1) & 0x07;
|
decimal = (temperature >> 1) & 0x07;
|
||||||
decimal *= (float)DS18B20_DECIMAL_STEPS_11BIT;
|
decimal *= (float)DS18B20_DECIMAL_STEP_11BIT;
|
||||||
} break;
|
} break;
|
||||||
case DS18B20_RESOLUTION_12BITS: {
|
case DS18B20_RESOLUTION_12BITS: {
|
||||||
decimal = temperature & 0x0F;
|
decimal = temperature & 0x0F;
|
||||||
decimal *= (float)DS18B20_DECIMAL_STEPS_12BIT;
|
decimal *= (float)DS18B20_DECIMAL_STEP_12BIT;
|
||||||
} break;
|
} break;
|
||||||
default: {
|
default: {
|
||||||
*Destination = 0;
|
*Destination = 0;
|
||||||
@@ -487,7 +487,7 @@ uint8_t DS18B20_AlarmSearch(DS18B20_Drv_t *DS, OneWire_t* OW)
|
|||||||
uint8_t t = 0;
|
uint8_t t = 0;
|
||||||
|
|
||||||
/* Reset Alarm in DS */
|
/* 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++)
|
for(uint8_t j = 0; j < 8; j++)
|
||||||
{
|
{
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
/**
|
/**
|
||||||
******************************************************************************
|
******************************************************************************
|
||||||
* @file ds18b20.h
|
* @file ds18b20_driver.h
|
||||||
* @brief This file contains all the constants parameters for the DS18B20
|
* @brief This file contains all the constants parameters for the DS18B20
|
||||||
* 1-Wire Digital Thermometer
|
* 1-Wire Digital Thermometer
|
||||||
******************************************************************************
|
******************************************************************************
|
||||||
@@ -22,8 +22,8 @@
|
|||||||
#include "onewire.h"
|
#include "onewire.h"
|
||||||
|
|
||||||
/* I/O Port ------------------------------------------------------------------*/
|
/* I/O Port ------------------------------------------------------------------*/
|
||||||
#define DS_Pin GPIO_PIN_9
|
#define DS_Pin GPIO_PIN_9
|
||||||
#define DS_GPIO_Port GPIOA
|
#define DS_GPIO_Port GPIOA
|
||||||
|
|
||||||
/* Data Structure ------------------------------------------------------------*/
|
/* Data Structure ------------------------------------------------------------*/
|
||||||
#define DS18B20_DEVICE_AMOUNT 8
|
#define DS18B20_DEVICE_AMOUNT 8
|
||||||
@@ -54,11 +54,10 @@
|
|||||||
#define DS18B20_RESOLUTION_R1 6
|
#define DS18B20_RESOLUTION_R1 6
|
||||||
#define DS18B20_RESOLUTION_R0 5
|
#define DS18B20_RESOLUTION_R0 5
|
||||||
|
|
||||||
#define DS18B20_DECIMAL_STEPS_12BIT 0.0625
|
#define DS18B20_DECIMAL_STEP_12BIT 0.0625
|
||||||
#define DS18B20_DECIMAL_STEPS_11BIT 0.125
|
#define DS18B20_DECIMAL_STEP_11BIT 0.125
|
||||||
#define DS18B20_DECIMAL_STEPS_10BIT 0.25
|
#define DS18B20_DECIMAL_STEP_10BIT 0.25
|
||||||
#define DS18B20_DECIMAL_STEPS_9BIT 0.5
|
#define DS18B20_DECIMAL_STEP_9BIT 0.5
|
||||||
|
|
||||||
|
|
||||||
#define DS18B20_DELAY_MS_9_BITS 94
|
#define DS18B20_DELAY_MS_9_BITS 94
|
||||||
#define DS18B20_DELAY_MS_10_BITS 188
|
#define DS18B20_DELAY_MS_10_BITS 188
|
||||||
@@ -66,11 +65,6 @@
|
|||||||
#define DS18B20_DELAY_MS_12_BITS 750
|
#define DS18B20_DELAY_MS_12_BITS 750
|
||||||
#define DS18B20_DELAY_MS_MAX DS18B20_DELAY_MS_12_BITS
|
#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 */
|
/* DS18B20 Resolutions */
|
||||||
typedef enum {
|
typedef enum {
|
||||||
@@ -1,9 +1,9 @@
|
|||||||
/**
|
/**
|
||||||
******************************************************************************
|
******************************************************************************
|
||||||
* @file onewire.c
|
* @file onewire.c
|
||||||
* @brief This file includes the HAL/LL driver for OneWire devices
|
* @brief This file includes the HAL/LL driver for OneWire devices
|
||||||
******************************************************************************
|
******************************************************************************
|
||||||
*/
|
*/
|
||||||
#include "onewire.h"
|
#include "onewire.h"
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -1,14 +1,9 @@
|
|||||||
/**
|
/**
|
||||||
******************************************************************************
|
******************************************************************************
|
||||||
* @file onewire.h
|
* @file onewire.h
|
||||||
* @brief This file contains all the constants parameters for the OneWire
|
* @brief This file contains all the constants parameters for the OneWire
|
||||||
******************************************************************************
|
******************************************************************************
|
||||||
* @attention
|
*/
|
||||||
* Usage:
|
|
||||||
* Uncomment LL Driver for HAL driver
|
|
||||||
*
|
|
||||||
******************************************************************************
|
|
||||||
*/
|
|
||||||
/* Define to prevent recursive inclusion -------------------------------------*/
|
/* Define to prevent recursive inclusion -------------------------------------*/
|
||||||
#ifndef ONEWIRE_H
|
#ifndef ONEWIRE_H
|
||||||
#define ONEWIRE_H
|
#define ONEWIRE_H
|
||||||
|
|||||||
@@ -1,9 +1,9 @@
|
|||||||
/**
|
/**
|
||||||
******************************************************************************
|
******************************************************************************
|
||||||
* @file ow_port.c
|
* @file ow_port.c
|
||||||
* @brief This file includes the driver for port for OneWire purposes
|
* @brief This file includes the driver for port for OneWire purposes
|
||||||
******************************************************************************
|
******************************************************************************
|
||||||
*/
|
*/
|
||||||
#include "ow_port.h"
|
#include "ow_port.h"
|
||||||
#include "onewire.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 &= ~((GPIO_CRL_CNF0 | GPIO_CRL_MODE0) << pin_cr_numb);
|
||||||
OW->DataPort->CRH |= (3 << 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
|
#else
|
||||||
#ifdef LL_Driver
|
#ifdef LL_Driver
|
||||||
if(Mode == Input)
|
if(Mode == Input)
|
||||||
|
|||||||
@@ -1,14 +1,9 @@
|
|||||||
/**
|
/**
|
||||||
******************************************************************************
|
******************************************************************************
|
||||||
* @file onewire.h
|
* @file ow_port.h
|
||||||
* @brief This file contains all the constants parameters for the OneWire
|
* @brief This file includes the driver for port for OneWire purposes
|
||||||
******************************************************************************
|
******************************************************************************
|
||||||
* @attention
|
*/
|
||||||
* Usage:
|
|
||||||
* Uncomment LL Driver for HAL driver
|
|
||||||
*
|
|
||||||
******************************************************************************
|
|
||||||
*/
|
|
||||||
/* Define to prevent recursive inclusion -------------------------------------*/
|
/* Define to prevent recursive inclusion -------------------------------------*/
|
||||||
#ifndef ONEWIRE_PORT_H
|
#ifndef ONEWIRE_PORT_H
|
||||||
#define ONEWIRE_PORT_H
|
#define ONEWIRE_PORT_H
|
||||||
|
|||||||
@@ -148,7 +148,40 @@
|
|||||||
<Name>-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</Name>
|
<Name>-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</Name>
|
||||||
</SetRegEntry>
|
</SetRegEntry>
|
||||||
</TargetDriverDllRegistry>
|
</TargetDriverDllRegistry>
|
||||||
<Breakpoint/>
|
<Breakpoint>
|
||||||
|
<Bp>
|
||||||
|
<Number>0</Number>
|
||||||
|
<Type>0</Type>
|
||||||
|
<LineNumber>366</LineNumber>
|
||||||
|
<EnabledFlag>1</EnabledFlag>
|
||||||
|
<Address>0</Address>
|
||||||
|
<ByteObject>0</ByteObject>
|
||||||
|
<HtxType>0</HtxType>
|
||||||
|
<ManyObjects>0</ManyObjects>
|
||||||
|
<SizeOfObject>0</SizeOfObject>
|
||||||
|
<BreakByAccess>0</BreakByAccess>
|
||||||
|
<BreakIfRCount>0</BreakIfRCount>
|
||||||
|
<Filename>..\..\DS18B20\dallas_tools.c</Filename>
|
||||||
|
<ExecCommand></ExecCommand>
|
||||||
|
<Expression></Expression>
|
||||||
|
</Bp>
|
||||||
|
<Bp>
|
||||||
|
<Number>1</Number>
|
||||||
|
<Type>0</Type>
|
||||||
|
<LineNumber>257</LineNumber>
|
||||||
|
<EnabledFlag>1</EnabledFlag>
|
||||||
|
<Address>0</Address>
|
||||||
|
<ByteObject>0</ByteObject>
|
||||||
|
<HtxType>0</HtxType>
|
||||||
|
<ManyObjects>0</ManyObjects>
|
||||||
|
<SizeOfObject>0</SizeOfObject>
|
||||||
|
<BreakByAccess>0</BreakByAccess>
|
||||||
|
<BreakIfRCount>0</BreakIfRCount>
|
||||||
|
<Filename>..\..\DS18B20\dallas_tools.c</Filename>
|
||||||
|
<ExecCommand></ExecCommand>
|
||||||
|
<Expression></Expression>
|
||||||
|
</Bp>
|
||||||
|
</Breakpoint>
|
||||||
<WatchWindow1>
|
<WatchWindow1>
|
||||||
<Ww>
|
<Ww>
|
||||||
<count>0</count>
|
<count>0</count>
|
||||||
@@ -608,8 +641,8 @@
|
|||||||
<tvExp>0</tvExp>
|
<tvExp>0</tvExp>
|
||||||
<tvExpOptDlg>0</tvExpOptDlg>
|
<tvExpOptDlg>0</tvExpOptDlg>
|
||||||
<bDave2>0</bDave2>
|
<bDave2>0</bDave2>
|
||||||
<PathWithFileName>..\..\DS18B20\ds18b20.c</PathWithFileName>
|
<PathWithFileName>..\..\DS18B20\ds18b20_driver.c</PathWithFileName>
|
||||||
<FilenameWithoutPath>ds18b20.c</FilenameWithoutPath>
|
<FilenameWithoutPath>ds18b20_driver.c</FilenameWithoutPath>
|
||||||
<RteFlg>0</RteFlg>
|
<RteFlg>0</RteFlg>
|
||||||
<bShared>0</bShared>
|
<bShared>0</bShared>
|
||||||
</File>
|
</File>
|
||||||
@@ -620,8 +653,8 @@
|
|||||||
<tvExp>0</tvExp>
|
<tvExp>0</tvExp>
|
||||||
<tvExpOptDlg>0</tvExpOptDlg>
|
<tvExpOptDlg>0</tvExpOptDlg>
|
||||||
<bDave2>0</bDave2>
|
<bDave2>0</bDave2>
|
||||||
<PathWithFileName>..\..\DS18B20\ds18b20.h</PathWithFileName>
|
<PathWithFileName>..\..\DS18B20\ds18b20_driver.h</PathWithFileName>
|
||||||
<FilenameWithoutPath>ds18b20.h</FilenameWithoutPath>
|
<FilenameWithoutPath>ds18b20_driver.h</FilenameWithoutPath>
|
||||||
<RteFlg>0</RteFlg>
|
<RteFlg>0</RteFlg>
|
||||||
<bShared>0</bShared>
|
<bShared>0</bShared>
|
||||||
</File>
|
</File>
|
||||||
@@ -632,30 +665,6 @@
|
|||||||
<tvExp>0</tvExp>
|
<tvExp>0</tvExp>
|
||||||
<tvExpOptDlg>0</tvExpOptDlg>
|
<tvExpOptDlg>0</tvExpOptDlg>
|
||||||
<bDave2>0</bDave2>
|
<bDave2>0</bDave2>
|
||||||
<PathWithFileName>..\..\DS18B20\dwt.c</PathWithFileName>
|
|
||||||
<FilenameWithoutPath>dwt.c</FilenameWithoutPath>
|
|
||||||
<RteFlg>0</RteFlg>
|
|
||||||
<bShared>0</bShared>
|
|
||||||
</File>
|
|
||||||
<File>
|
|
||||||
<GroupNumber>5</GroupNumber>
|
|
||||||
<FileNumber>28</FileNumber>
|
|
||||||
<FileType>5</FileType>
|
|
||||||
<tvExp>0</tvExp>
|
|
||||||
<tvExpOptDlg>0</tvExpOptDlg>
|
|
||||||
<bDave2>0</bDave2>
|
|
||||||
<PathWithFileName>..\..\DS18B20\dwt.h</PathWithFileName>
|
|
||||||
<FilenameWithoutPath>dwt.h</FilenameWithoutPath>
|
|
||||||
<RteFlg>0</RteFlg>
|
|
||||||
<bShared>0</bShared>
|
|
||||||
</File>
|
|
||||||
<File>
|
|
||||||
<GroupNumber>5</GroupNumber>
|
|
||||||
<FileNumber>29</FileNumber>
|
|
||||||
<FileType>1</FileType>
|
|
||||||
<tvExp>0</tvExp>
|
|
||||||
<tvExpOptDlg>0</tvExpOptDlg>
|
|
||||||
<bDave2>0</bDave2>
|
|
||||||
<PathWithFileName>..\..\DS18B20\onewire.c</PathWithFileName>
|
<PathWithFileName>..\..\DS18B20\onewire.c</PathWithFileName>
|
||||||
<FilenameWithoutPath>onewire.c</FilenameWithoutPath>
|
<FilenameWithoutPath>onewire.c</FilenameWithoutPath>
|
||||||
<RteFlg>0</RteFlg>
|
<RteFlg>0</RteFlg>
|
||||||
@@ -663,7 +672,7 @@
|
|||||||
</File>
|
</File>
|
||||||
<File>
|
<File>
|
||||||
<GroupNumber>5</GroupNumber>
|
<GroupNumber>5</GroupNumber>
|
||||||
<FileNumber>30</FileNumber>
|
<FileNumber>28</FileNumber>
|
||||||
<FileType>5</FileType>
|
<FileType>5</FileType>
|
||||||
<tvExp>0</tvExp>
|
<tvExp>0</tvExp>
|
||||||
<tvExpOptDlg>0</tvExpOptDlg>
|
<tvExpOptDlg>0</tvExpOptDlg>
|
||||||
@@ -675,7 +684,7 @@
|
|||||||
</File>
|
</File>
|
||||||
<File>
|
<File>
|
||||||
<GroupNumber>5</GroupNumber>
|
<GroupNumber>5</GroupNumber>
|
||||||
<FileNumber>31</FileNumber>
|
<FileNumber>29</FileNumber>
|
||||||
<FileType>1</FileType>
|
<FileType>1</FileType>
|
||||||
<tvExp>0</tvExp>
|
<tvExp>0</tvExp>
|
||||||
<tvExpOptDlg>0</tvExpOptDlg>
|
<tvExpOptDlg>0</tvExpOptDlg>
|
||||||
@@ -687,7 +696,7 @@
|
|||||||
</File>
|
</File>
|
||||||
<File>
|
<File>
|
||||||
<GroupNumber>5</GroupNumber>
|
<GroupNumber>5</GroupNumber>
|
||||||
<FileNumber>32</FileNumber>
|
<FileNumber>30</FileNumber>
|
||||||
<FileType>5</FileType>
|
<FileType>5</FileType>
|
||||||
<tvExp>0</tvExp>
|
<tvExp>0</tvExp>
|
||||||
<tvExpOptDlg>0</tvExpOptDlg>
|
<tvExpOptDlg>0</tvExpOptDlg>
|
||||||
@@ -697,6 +706,30 @@
|
|||||||
<RteFlg>0</RteFlg>
|
<RteFlg>0</RteFlg>
|
||||||
<bShared>0</bShared>
|
<bShared>0</bShared>
|
||||||
</File>
|
</File>
|
||||||
|
<File>
|
||||||
|
<GroupNumber>5</GroupNumber>
|
||||||
|
<FileNumber>31</FileNumber>
|
||||||
|
<FileType>1</FileType>
|
||||||
|
<tvExp>0</tvExp>
|
||||||
|
<tvExpOptDlg>0</tvExpOptDlg>
|
||||||
|
<bDave2>0</bDave2>
|
||||||
|
<PathWithFileName>..\..\DS18B20\dwt.c</PathWithFileName>
|
||||||
|
<FilenameWithoutPath>dwt.c</FilenameWithoutPath>
|
||||||
|
<RteFlg>0</RteFlg>
|
||||||
|
<bShared>0</bShared>
|
||||||
|
</File>
|
||||||
|
<File>
|
||||||
|
<GroupNumber>5</GroupNumber>
|
||||||
|
<FileNumber>32</FileNumber>
|
||||||
|
<FileType>5</FileType>
|
||||||
|
<tvExp>0</tvExp>
|
||||||
|
<tvExpOptDlg>0</tvExpOptDlg>
|
||||||
|
<bDave2>0</bDave2>
|
||||||
|
<PathWithFileName>..\..\DS18B20\dwt.h</PathWithFileName>
|
||||||
|
<FilenameWithoutPath>dwt.h</FilenameWithoutPath>
|
||||||
|
<RteFlg>0</RteFlg>
|
||||||
|
<bShared>0</bShared>
|
||||||
|
</File>
|
||||||
</Group>
|
</Group>
|
||||||
|
|
||||||
<Group>
|
<Group>
|
||||||
|
|||||||
@@ -577,24 +577,14 @@
|
|||||||
<FilePath>..\..\DS18B20\dallas_tools.h</FilePath>
|
<FilePath>..\..\DS18B20\dallas_tools.h</FilePath>
|
||||||
</File>
|
</File>
|
||||||
<File>
|
<File>
|
||||||
<FileName>ds18b20.c</FileName>
|
<FileName>ds18b20_driver.c</FileName>
|
||||||
<FileType>1</FileType>
|
<FileType>1</FileType>
|
||||||
<FilePath>..\..\DS18B20\ds18b20.c</FilePath>
|
<FilePath>..\..\DS18B20\ds18b20_driver.c</FilePath>
|
||||||
</File>
|
</File>
|
||||||
<File>
|
<File>
|
||||||
<FileName>ds18b20.h</FileName>
|
<FileName>ds18b20_driver.h</FileName>
|
||||||
<FileType>5</FileType>
|
<FileType>5</FileType>
|
||||||
<FilePath>..\..\DS18B20\ds18b20.h</FilePath>
|
<FilePath>..\..\DS18B20\ds18b20_driver.h</FilePath>
|
||||||
</File>
|
|
||||||
<File>
|
|
||||||
<FileName>dwt.c</FileName>
|
|
||||||
<FileType>1</FileType>
|
|
||||||
<FilePath>..\..\DS18B20\dwt.c</FilePath>
|
|
||||||
</File>
|
|
||||||
<File>
|
|
||||||
<FileName>dwt.h</FileName>
|
|
||||||
<FileType>5</FileType>
|
|
||||||
<FilePath>..\..\DS18B20\dwt.h</FilePath>
|
|
||||||
</File>
|
</File>
|
||||||
<File>
|
<File>
|
||||||
<FileName>onewire.c</FileName>
|
<FileName>onewire.c</FileName>
|
||||||
@@ -616,6 +606,16 @@
|
|||||||
<FileType>5</FileType>
|
<FileType>5</FileType>
|
||||||
<FilePath>..\..\DS18B20\ow_port.h</FilePath>
|
<FilePath>..\..\DS18B20\ow_port.h</FilePath>
|
||||||
</File>
|
</File>
|
||||||
|
<File>
|
||||||
|
<FileName>dwt.c</FileName>
|
||||||
|
<FileType>1</FileType>
|
||||||
|
<FilePath>..\..\DS18B20\dwt.c</FilePath>
|
||||||
|
</File>
|
||||||
|
<File>
|
||||||
|
<FileName>dwt.h</FileName>
|
||||||
|
<FileType>5</FileType>
|
||||||
|
<FilePath>..\..\DS18B20\dwt.h</FilePath>
|
||||||
|
</File>
|
||||||
</Files>
|
</Files>
|
||||||
</Group>
|
</Group>
|
||||||
<Group>
|
<Group>
|
||||||
|
|||||||
BIN
~$ds18b20_locations.xlsx
Normal file
BIN
~$ds18b20_locations.xlsx
Normal file
Binary file not shown.
Reference in New Issue
Block a user