Compare commits

..

6 Commits

Author SHA1 Message Date
Razvalyaev
d86a7899a3 убрано лишнее подключение stm32f1xx_hal 2025-02-28 16:04:11 +03:00
Razvalyaev
39c495410b какая-то заготовка которую я не помню... 2025-02-28 14:18:27 +03:00
Razvalyaev
d73b65a286 Работает:
- переделан ROM, теперь это 64-битное число, а не массив
- при замене датчиков на другие с уже записанной локацией - они автоматически определяются и подключаются в нужные структуры
- если что-то не определилось, то можно переписать локацию датчика через элементы в структуре UnknownSensors
2025-02-13 14:56:43 +03:00
Razvalyaev
971817fa2d Куча всего для работы с датчиками температуры в ПЧ (не работает пока)
Планируется сделать:
- инициализацию (запись локации в ROM) найденных неизвестных датчиков
- переинициализацию уже найденных датчиков
2025-02-13 13:40:33 +03:00
Razvalyaev
ed1ff35913 Сделана заготовка структуры и функций для измерения датчиков с модуля пч 2025-02-12 14:54:35 +03:00
Razvalyaev
59606978b2 Кучу всего, переструктурирован проект все должно работать
- onewire: модуль для отправик комманд в DS18B20
- ds18b20_driver: модуль для отправик комманд в DS18B20
- dallas_tools: модуль для общения с DS18B20
2025-02-12 13:23:37 +03:00
15 changed files with 736 additions and 451 deletions

View File

@@ -5,7 +5,7 @@
* @author MicroTechnics (microtechnics.ru) * @author MicroTechnics (microtechnics.ru)
****************************************************************************** ******************************************************************************
@details @details
Ýòîò ôàéë ñîäåðæèò ðåàëèçàöèþ ôóíêöèé äëÿ ðàáîòû ñ äàò÷èêîì DALLAS_HandleTypeDef Ýòîò ôàéë ñîäåðæèò ðåàëèçàöèþ ôóíêöèé äëÿ ðàáîòû ñ äàò÷èêîì DS18B20
÷åðåç èíòåðôåéñ 1-Wire. Îí ïðåäîñòàâëÿåò ôóíêöèè äëÿ ÷òåíèÿ è çàïèñè ÷åðåç èíòåðôåéñ 1-Wire. Îí ïðåäîñòàâëÿåò ôóíêöèè äëÿ ÷òåíèÿ è çàïèñè
êîíôèãóðàöèè, âûïîëíåíèÿ èçìåðåíèé è îáðàáîòêè ïîëó÷åííûõ äàííûõ. êîíôèãóðàöèè, âûïîëíåíèÿ èçìåðåíèé è îáðàáîòêè ïîëó÷åííûõ äàííûõ.
*****************************************************************************/ *****************************************************************************/
@@ -19,123 +19,7 @@
/* Declarations and definitions --------------------------------------------*/ /* Declarations and definitions --------------------------------------------*/
struct
{
DALLAS_HandleTypeDef outdoor;
DALLAS_HandleTypeDef indoor;
DALLAS_HandleTypeDef bathroom;
DALLAS_HandleTypeDef kitchen;
DALLAS_HandleTypeDef big_room;
DALLAS_HandleTypeDef small_room;
DALLAS_HandleTypeDef living_room;
DALLAS_HandleTypeDef basement;
}AllSens;
/* Functions ---------------------------------------------------------------*/ /* Functions ---------------------------------------------------------------*/
void Dallas_ReadAll(void)
{
HAL_StatusTypeDef result;
result = Dallas_StartConvertTAll(&OW, DALLAS_WAIT_BUS, 0);
if(Dallas_ReadTemperature(&AllSens.outdoor) == HAL_BUSY)
Dallas_ReplaceLostedSensor(&AllSens.outdoor);
if(Dallas_ReadTemperature(&AllSens.indoor) == HAL_BUSY)
Dallas_ReplaceLostedSensor(&AllSens.indoor);
if(Dallas_ReadTemperature(&AllSens.bathroom) == HAL_BUSY)
Dallas_ReplaceLostedSensor(&AllSens.bathroom);
if(Dallas_ReadTemperature(&AllSens.kitchen) == HAL_BUSY)
Dallas_ReplaceLostedSensor(&AllSens.kitchen);
if(Dallas_ReadTemperature(&AllSens.big_room) == HAL_BUSY)
Dallas_ReplaceLostedSensor(&AllSens.big_room);
if(Dallas_ReadTemperature(&AllSens.small_room) == HAL_BUSY)
Dallas_ReplaceLostedSensor(&AllSens.small_room);
if(Dallas_ReadTemperature(&AllSens.living_room) == HAL_BUSY)
Dallas_ReplaceLostedSensor(&AllSens.living_room);
if(Dallas_ReadTemperature(&AllSens.basement) == HAL_BUSY)
Dallas_ReplaceLostedSensor(&AllSens.basement);
}
void Dallas_FirstInit(void)
{
OW.DataPin = DS_Pin;
OW.DataPort = DS_GPIO_Port;
DS.Resolution = DS18B20_RESOLUTION_9BITS;
OneWire_Init(&OW);
DS18B20_Search(&DS, &OW);
AllSens.outdoor.Init.ROM = 0x28C60C61060000DC;
AllSens.indoor.Init.ROM = 0x283E4861060000F9;
AllSens.bathroom.Init.ROM = 0x28876D60060000CD;
AllSens.outdoor.Init.SensInd = 0;
AllSens.indoor.Init.SensInd = 1;
AllSens.bathroom.Init.SensInd = 2;
AllSens.kitchen.Init.SensInd = 3;
AllSens.big_room.Init.SensInd = 4;
AllSens.small_room.Init.SensInd = 5;
AllSens.living_room.Init.SensInd = 6;
AllSens.basement.Init.SensInd = 7;
AllSens.outdoor.Init.UserBytes12 = 1;
AllSens.indoor.Init.UserBytes12 = 2;
AllSens.bathroom.Init.UserBytes12 = 3;
AllSens.kitchen.Init.UserBytes12 = 4;
AllSens.big_room.Init.UserBytes12 = 5;
AllSens.small_room.Init.UserBytes12 = 6;
AllSens.living_room.Init.UserBytes12 = 7;
AllSens.basement.Init.UserBytes12 = 8;
AllSens.outdoor.Init.init_func = (HAL_StatusTypeDef (*)())Dallas_SensorInitByUserBytes;
AllSens.indoor.Init.init_func = (HAL_StatusTypeDef (*)())Dallas_SensorInitByUserBytes;
AllSens.bathroom.Init.init_func = (HAL_StatusTypeDef (*)())Dallas_SensorInitByUserBytes;
AllSens.kitchen.Init.init_func = (HAL_StatusTypeDef (*)())Dallas_SensorInitByUserBytes;
AllSens.big_room.Init.init_func = (HAL_StatusTypeDef (*)())Dallas_SensorInitByUserBytes;
AllSens.small_room.Init.init_func = (HAL_StatusTypeDef (*)())Dallas_SensorInitByUserBytes;
AllSens.living_room.Init.init_func = (HAL_StatusTypeDef (*)())Dallas_SensorInitByUserBytes;
AllSens.basement.Init.init_func = (HAL_StatusTypeDef (*)())Dallas_SensorInitByUserBytes;
Dallas_AddNewSensors(&OW, &AllSens.outdoor);
Dallas_AddNewSensors(&OW, &AllSens.indoor);
Dallas_AddNewSensors(&OW, &AllSens.bathroom);
//
// Dallas_SensorInitByInd(&OW, &AllSens.outdoor, 0);
// Dallas_SensorInitByInd(&OW, &AllSens.indoor, 2);
// Dallas_SensorInitByInd(&OW, &AllSens.bathroom, 1);
// Dallas_SensorInitByInd(&OW, &AllSens.kitchen, 3);
// Dallas_SensorInitByInd(&OW, &AllSens.big_room, 4);
// Dallas_SensorInitByInd(&OW, &AllSens.small_room, 5);
// Dallas_SensorInitByInd(&OW, &AllSens.living_room, 6);
// Dallas_SensorInitByInd(&OW, &AllSens.basement, 7);
//
// uint8_t mask = DALLAS_USER_BYTE_ALL;
// Dallas_WriteUserBytes(&AllSens.outdoor, 1, NULL, mask);
// Dallas_WriteUserBytes(&AllSens.indoor, 2, NULL, mask);
// Dallas_WriteUserBytes(&AllSens.bathroom, 3, NULL, mask);
// Dallas_WriteUserBytes(&AllSens.kitchen, 4, NULL, mask);
// Dallas_WriteUserBytes(&AllSens.big_room, 5, NULL, mask);
// Dallas_WriteUserBytes(&AllSens.small_room, 6, NULL, mask);
// Dallas_WriteUserBytes(&AllSens.living_room, 7, NULL, mask);
// Dallas_WriteUserBytes(&AllSens.basement, 8, NULL, mask);
}
/** /**
* @brief Ôóíêöèÿ äëÿ íàõîæäåíèÿ íîâîãî äàò÷èêà íà ìåñòî ïîòåðÿííîãî * @brief Ôóíêöèÿ äëÿ íàõîæäåíèÿ íîâîãî äàò÷èêà íà ìåñòî ïîòåðÿííîãî
* @param sensor Óêàçàòåëü íà ñòðóêòóðó äàò÷èêà * @param sensor Óêàçàòåëü íà ñòðóêòóðó äàò÷èêà
@@ -145,28 +29,31 @@ 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) result = Dallas_IsConnected(sensor);
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_BUSY; // äàò÷èê íå ïîòåðÿí
return HAL_ERROR;
} }
return HAL_OK;
} }
/** /**
* @brief Ôóíêöèÿ äëÿ äîáàâëåíèÿ íîâîãî äàò÷èêà â ñòðóêòóðó * @brief Ôóíêöèÿ äëÿ èíèèöàëèçàöèè íîâîãî äàò÷èêà â ñòðóêòóðå
* @param onewire Óêàçàòåëü íà ñòðóêòóðó OneWire * @param onewire Óêàçàòåëü íà ñòðóêòóðó OneWire
* @param sensor Óêàçàòåëü íà ñòðóêòóðó äàò÷èêà * @param sensor Óêàçàòåëü íà ñòðóêòóðó äàò÷èêà
* @retval HAL Status * @retval HAL Status
@@ -205,21 +92,21 @@ HAL_StatusTypeDef Dallas_SensorInitByROM(OneWire_t *onewire, DALLAS_HandleTypeDe
return HAL_ERROR; return HAL_ERROR;
uint8_t ROM[8] = {0}; uint8_t ROM[8] = {0};
ROM[0] = (sensor->Init.ROM >> (7*8)) & 0xFF; ROM[0] = (sensor->Init.ROM >> (0*8)) & 0xFF;
ROM[1] = (sensor->Init.ROM >> (6*8)) & 0xFF; ROM[1] = (sensor->Init.ROM >> (1*8)) & 0xFF;
ROM[2] = (sensor->Init.ROM >> (5*8)) & 0xFF; ROM[2] = (sensor->Init.ROM >> (2*8)) & 0xFF;
ROM[3] = (sensor->Init.ROM >> (4*8)) & 0xFF; ROM[3] = (sensor->Init.ROM >> (3*8)) & 0xFF;
ROM[4] = (sensor->Init.ROM >> (3*8)) & 0xFF; ROM[4] = (sensor->Init.ROM >> (4*8)) & 0xFF;
ROM[5] = (sensor->Init.ROM >> (2*8)) & 0xFF; ROM[5] = (sensor->Init.ROM >> (5*8)) & 0xFF;
ROM[6] = (sensor->Init.ROM >> (1*8)) & 0xFF; ROM[6] = (sensor->Init.ROM >> (6*8)) & 0xFF;
ROM[7] = (sensor->Init.ROM) & 0xFF; ROM[7] = (sensor->Init.ROM >> (7*8)) & 0xFF;
if(DS18B20_IsValidAddress(ROM) != HAL_OK) if(DS18B20_IsValidAddress(ROM) != HAL_OK)
return HAL_ERROR; return HAL_ERROR;
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 +120,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 +142,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,18 +161,14 @@ 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++)
/* Ïðîâåðêà ïðèñóòñòâóåò ëè âûáðàííûé äàò÷èê íà ëèíèè */ /* Ïðîâåðêà ïðèñóòñòâóåò ëè âûáðàííûé äàò÷èê íà ëèíèè */
result = DS18B20_ReadScratchpad(onewire, (uint8_t *)&DS.DevAddr[i], (uint8_t *)&scratchpad); result = DS18B20_ReadScratchpad(onewire, (uint8_t *)&DS.DevAddr[i], (uint8_t *)&scratchpad);
if (result != HAL_OK) if (result != HAL_OK)
return result; return result;
/* Ñðàâíåíèå UserByte1 è UserByte2, åñëè âûáðàíî */ /* Ñðàâíåíèå UserByte1 è UserByte2, åñëè îíè íå ðàâíû íóëþ */
if(sensor->Init.UserBytes12 != NULL) if(sensor->Init.UserBytes12 != NULL)
{ {
if( (scratchpad.tHighRegister == UserByte1) && if( (scratchpad.tHighRegister == UserByte1) &&
@@ -301,12 +176,12 @@ HAL_StatusTypeDef Dallas_SensorInitByUserBytes(OneWire_t *onewire, DALLAS_Handle
{ {
UserByte12Cmp = 1; UserByte12Cmp = 1;
} }
}/* Åñëè ðàâíåíèå UserByte1 è UserByte2 íå âûáðàíî, òî ñ÷èòàåì ÷òî îíè îäèíàêîâûå */ }/* Åñëè ñðàâíåíèå UserByte1 è UserByte2 íå âûáðàíî, òî ñ÷èòàåì ÷òî îíè ñîâïàäàþò */
else else
{ {
UserByte12Cmp = 1; UserByte12Cmp = 1;
} }
/* Ñðàâíåíèå UserByte3 è UserByte4, åñëè âûáðàíî */ /* Ñðàâíåíèå UserByte3 è UserByte4, åñëè îíè íå ðàâíû íóëþ */
if(sensor->Init.UserBytes34 != NULL) if(sensor->Init.UserBytes34 != NULL)
{ {
if( (scratchpad.UserByte3 == UserByte3) && if( (scratchpad.UserByte3 == UserByte3) &&
@@ -314,7 +189,7 @@ HAL_StatusTypeDef Dallas_SensorInitByUserBytes(OneWire_t *onewire, DALLAS_Handle
{ {
UserByte34Cmp = 1; UserByte34Cmp = 1;
} }
}/* Åñëè ðàâíåíèå UserByte3 è UserByte4 íå âûáðàíî, òî ñ÷èòàåì ÷òî îíè îäèíàêîâûå */ }/* Åñëè ñðàâíåíèå UserByte3 è UserByte4 íå âûáðàíî, òî ñ÷èòàåì ÷òî îíè îäèíàêîâûå */
else else
{ {
UserByte34Cmp = 1; UserByte34Cmp = 1;
@@ -328,18 +203,19 @@ HAL_StatusTypeDef Dallas_SensorInitByUserBytes(OneWire_t *onewire, DALLAS_Handle
return result; return result;
} }
} }
Dallas_SensorDeInit(sensor);
sensor->sensROM = 0;
memset(&sensor->scratchpad, 0, sizeof(DALLAS_ScratchpadTypeDef));
/* Âîçâðàùàåì îøèáêó åñëè íå íàøëè */ /* Âîçâðàùàåì îøèáêó åñëè íå íàøëè */
return HAL_ERROR; return HAL_ERROR;
} }
/** /**
* @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 +238,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,12 +252,14 @@ 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++) sensor->sensROM = 0;
sensor->sensROM[i] = (*ROM)[i]; sensor->sensROM = *(uint64_t *)(ROM);
// for(int i = 0; i < DALLAS_ROM_SIZE; i++)
// sensor->sensROM |= ((uint64_t)(*ROM)[i] << (56 - 8*i));
/* Ïðîâåðêà ïðèñóòñòâóåò ëè âûáðàííûé äàò÷èê íà ëèíèè */ /* Ïðîâåðêà ïðèñóòñòâóåò ëè âûáðàííûé äàò÷èê íà ëèíèè */
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)
{ {
/* Óñòàíîâêà ðàçðåøåíèÿ */ /* Óñòàíîâêà ðàçðåøåíèÿ */
@@ -396,26 +272,22 @@ HAL_StatusTypeDef Dallas_SensorInit(OneWire_t *onewire, DALLAS_HandleTypeDef *se
else else
{ {
sensor->isInitialized = 0; sensor->isInitialized = 0;
Dallas_SensorDeInit(sensor);
return result; return result;
} }
} }
else else
{ {
sensor->isInitialized = 0; sensor->isInitialized = 0;
Dallas_SensorDeInit(sensor);
return result; return result;
} }
} }
/** /**
* @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)
{ {
@@ -433,10 +305,12 @@ HAL_StatusTypeDef Dallas_SensorDeInit(DALLAS_HandleTypeDef *sensor)
/** /**
* @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 +371,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;
@@ -513,7 +387,7 @@ HAL_StatusTypeDef Dallas_ConvertT(DALLAS_HandleTypeDef *sensor, DALLAS_WaitCondi
return result; return result;
// Îòïðàâêà êîìàíäû íà÷àëà ïðåîáðàçîâàíèÿ òåìïåðàòóðû // Îòïðàâêà êîìàíäû íà÷àëà ïðåîáðàçîâàíèÿ òåìïåðàòóðû
result = DS18B20_StartConvT(sensor->onewire, (uint8_t *)sensor->sensROM); result = DS18B20_StartConvT(sensor->onewire, (uint8_t *)&sensor->sensROM);
if(result != HAL_OK) if(result != HAL_OK)
{ {
return result; return result;
@@ -571,7 +445,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
*/ */
@@ -590,7 +464,7 @@ HAL_StatusTypeDef Dallas_ReadTemperature(DALLAS_HandleTypeDef *sensor)
return result; return result;
result = DS18B20_CalcTemperature(sensor->onewire, (uint8_t *)sensor->sensROM, (uint8_t *)&sensor->scratchpad, &sensor->temperature); result = DS18B20_CalcTemperature(sensor->onewire, (uint8_t *)&sensor->sensROM, (uint8_t *)&sensor->scratchpad, &sensor->temperature);
if (result != HAL_OK) if (result != HAL_OK)
{ {
@@ -602,7 +476,7 @@ HAL_StatusTypeDef Dallas_ReadTemperature(DALLAS_HandleTypeDef *sensor)
} }
/** /**
* @brief Âûïîëíÿåò êîìàíäó èíèöèàëèçàöèè DALLAS_HandleTypeDef * @brief Ïðîâåðÿåò ïîäêëþ÷åí ëè äàò÷èê (÷òåíèå scratchpad)
* @param sensor Óêàçàòåëü íà ñòðóêòóðó äàò÷èêà * @param sensor Óêàçàòåëü íà ñòðóêòóðó äàò÷èêà
* @retval HAL Status * @retval HAL Status
*/ */
@@ -613,7 +487,7 @@ HAL_StatusTypeDef Dallas_IsConnected(DALLAS_HandleTypeDef *sensor)
if(sensor->isInitialized == 0) if(sensor->isInitialized == 0)
return HAL_ERROR; return HAL_ERROR;
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)
{ {
@@ -623,12 +497,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
} }
} }
@@ -654,16 +531,15 @@ HAL_StatusTypeDef Dallas_WriteUserBytes(DALLAS_HandleTypeDef *sensor, uint16_t U
if (result != HAL_OK) if (result != HAL_OK)
return result; return result;
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 +547,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;
//}

View File

@@ -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
@@ -11,34 +17,21 @@
/* Includes -----------------------------------------------------------------*/ /* Includes -----------------------------------------------------------------*/
#include "stm32f1xx_hal.h" #include "ds18b20_driver.h"
#include "ds18b20.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 +44,96 @@
#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; uint64_t sensROM; ///< 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_ReadAll(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);

View File

@@ -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++)
{ {

View File

@@ -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 {

View File

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

View File

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

View File

@@ -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)

View File

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

293
DS18B20/pch_sensors.c Normal file
View File

@@ -0,0 +1,293 @@
/**
******************************************************************************
* @file pch_sensors.c
* @brief Ðàáîòà ñ äàò÷èêàìè òåìïåðàòóðû DS18B20 â Ï×
*****************************************************************************/
/* Includes ----------------------------------------------------------------*/
#include "pch_sensors.h"
PCHSens_UnknownSensorsTypeDef UnknownSensors;
/* Declarations and definitions --------------------------------------------*/
PCHSens_ModuleTypeDef module1;
/* Functions ---------------------------------------------------------------*/
HAL_StatusTypeDef PCHSens_InitNewSensor(OneWire_t *onewire, PCHSens_SensorTypeDef* sensor, uint64_t ROM)
{
DALLAS_HandleTypeDef tempsens;
HAL_StatusTypeDef result;
if(onewire == NULL)
return HAL_ERROR;
if(sensor == NULL)
return HAL_ERROR;
// sensor->UserBytes = (PCHSens_LocationTypeDef *)&sensor->sens.scratchpad.tHighRegister;
sensor->sens.Init.ROM = ROM;
sensor->sens.Init.UserBytes12 = sensor->Location.all;
sensor->sens.Init.init_func = &Dallas_SensorInitByROM;
result = Dallas_AddNewSensors(onewire, &sensor->sens);
if(result != HAL_OK)
{
sensor->not_found = 1;
return result;
}
result = Dallas_WriteUserBytes(&sensor->sens, sensor->Location.all, sensor->Location.all, USED_USER_BYTES);
if(result != HAL_OK)
return result;
sensor->sens.Init.init_func = &Dallas_SensorInitByUserBytes;
result = Dallas_AddNewSensors(onewire, &sensor->sens);
if(result == HAL_OK)
sensor->not_found = 0;
else
sensor->not_found = 1;
return result;
}
HAL_StatusTypeDef PCHSens_AddSensor(OneWire_t *onewire, PCHSens_SensorTypeDef* sensor)
{
HAL_StatusTypeDef result;
if(onewire == NULL)
return HAL_ERROR;
if(sensor == NULL)
return HAL_ERROR;
// sensor->UserBytes = (PCHSens_LocationTypeDef *)&sensor->sens.scratchpad.tHighRegister;
sensor->sens.Init.UserBytes12 = sensor->Location.all;
sensor->sens.Init.init_func = &Dallas_SensorInitByUserBytes;
result = Dallas_AddNewSensors(onewire, &sensor->sens);
if(result == HAL_OK)
sensor->not_found = 0;
else
sensor->not_found = 1;
return result;
}
HAL_StatusTypeDef PCHSens_InitModule(OneWire_t *onewire, PCHSens_ModuleTypeDef* module, uint16_t param)
{
if(onewire == NULL)
return HAL_ERROR;
if(module == NULL)
return HAL_ERROR;
PCHSens_LocationTypeDef initlocation;
initlocation.all = param;
module->onewire = onewire;
module->refLocation = initlocation;
module->sens1.Location.all = module->refLocation.all;
module->sens1.Location.param.Location = 0;
PCHSens_AddSensor(onewire, &module->sens1);
module->sens2.Location.all = module->refLocation.all;
module->sens2.Location.param.Location = 1;
PCHSens_AddSensor(onewire, &module->sens2);
module->sens3.Location.all = module->refLocation.all;
module->sens3.Location.param.Location = 2;
PCHSens_AddSensor(onewire, &module->sens3);
module->sens4.Location.all = module->refLocation.all;
module->sens4.Location.param.Location = 3;
PCHSens_AddSensor(onewire, &module->sens4);
return HAL_OK;
}
HAL_StatusTypeDef PCHSens_ReadTemperature(PCHSens_ModuleTypeDef *module)
{
HAL_StatusTypeDef result;
if(module == NULL)
return HAL_ERROR;
result = Dallas_StartConvertTAll(module->onewire, DALLAS_WAIT_BUS, 0);
result = PCHSens_SensorHandleActions(module->onewire, &module->sens1);
result = PCHSens_SensorHandleActions(module->onewire, &module->sens2);
result = PCHSens_SensorHandleActions(module->onewire, &module->sens3);
result = PCHSens_SensorHandleActions(module->onewire, &module->sens4);
PCHSens_DefineUnknownSensor(&UnknownSensors, NULL);
return result;
}
HAL_StatusTypeDef PCHSens_CheckSensor(OneWire_t *onewire, PCHSens_SensorTypeDef* sensor)
{
HAL_StatusTypeDef result;
PCHSens_LocationTypeDef initlocation;
unsigned unknow_sensors_flag = 0;
if(sensor == NULL)
return HAL_ERROR;
if(sensor->sens.isInitialized == 0)
return HAL_ERROR;
if((sensor->sens.isLost == 1))
{
initlocation.param.Location = 0;
if(Dallas_ReplaceLostedSensor(&sensor->sens) != HAL_OK)
{
sensor->not_found = 1;
}
else
{
sensor->not_found = 0;
}
}
return HAL_OK;
}
HAL_StatusTypeDef PCHSens_FindUnknownSensors(OneWire_t *onewire, PCHSens_UnknownSensorsTypeDef *unknowns)
{
HAL_StatusTypeDef result;
if(onewire == NULL)
return HAL_ERROR;
if(unknowns == NULL)
return HAL_ERROR;
unknowns->onewire = onewire;
unknowns->UnknownCnt = 0;
DALLAS_ScratchpadTypeDef scratchpad;
PCHSens_LocationTypeDef *param = (PCHSens_LocationTypeDef *)&scratchpad.tHighRegister;
for(int i = 0; i < onewire->RomCnt; i++)
{
/* Ïðîâåðêà ïðèñóòñòâóåò ëè âûáðàííûé äàò÷èê íà ëèíèè */
result = DS18B20_ReadScratchpad(onewire, (uint8_t *)&DS.DevAddr[i], (uint8_t *)&scratchpad);
if(result != HAL_OK)
__NOP();
if((IS_REG_SENS_LOCATION(param) == 0) ||
(IS_REG_PCH_LOCATION(param) == 0) ||
(IS_REG_PCH_NUMB(param) == 0) )
{
unknowns->unknown_sensors[unknowns->UnknownCnt].Init.SensInd = i;
unknowns->unknown_sensors[unknowns->UnknownCnt].Init.init_func = &Dallas_SensorInitByInd;
result = Dallas_AddNewSensors(onewire, &unknowns->unknown_sensors[unknowns->UnknownCnt++]);
if(result != HAL_OK)
__NOP();
}
}
return HAL_OK;
}
HAL_StatusTypeDef PCHSens_DefineUnknownSensor(PCHSens_UnknownSensorsTypeDef *unknowns, PCHSens_SensorTypeDef *sensor)
{
HAL_StatusTypeDef result;
if(sensor == NULL)
return HAL_ERROR;
if((unknowns->ROMtoDefine != NULL) && (unknowns->LocationtoDefine.all != NULL) && (unknowns->senstoDefine != NULL))
{
result = PCHSens_InitNewSensor(unknowns->onewire, unknowns->senstoDefine, unknowns->ROMtoDefine);
unknowns->ROMtoDefine = 0;
unknowns->LocationtoDefine.all = 0;
unknowns->senstoDefine = 0;
return result;
}
return HAL_OK;
}
HAL_StatusTypeDef PCHSens_UndefineSensor(PCHSens_SensorTypeDef *sensor)
{
HAL_StatusTypeDef result;
if(sensor == NULL)
return HAL_ERROR;
result = Dallas_WriteUserBytes(&sensor->sens, 0, 0, USED_USER_BYTES);
if(result != HAL_OK)
{
return result;
}
result = Dallas_SensorDeInit(&sensor->sens);
return result;
}
HAL_StatusTypeDef PCHSens_SensorHandleActions(OneWire_t *onewire, PCHSens_SensorTypeDef *sensor)
{
HAL_StatusTypeDef result;
if(sensor == NULL)
return HAL_ERROR;
if(sensor->action.connectROM != NULL)
{
result = PCHSens_InitNewSensor(onewire, sensor, sensor->action.connectROM);
sensor->action.connectROM = 0;
}
if(sensor->action.read != NULL)
{
// sensor->action.read = 0;
result = Dallas_ReadTemperature(&sensor->sens);
if(result != HAL_OK)
PCHSens_CheckSensor(onewire, sensor);
}
if(sensor->action.deinit != NULL)
{
sensor->action.deinit = 0;
result = PCHSens_UndefineSensor(sensor);
}
return result;
}
void PCHSens_FirstInit(void)
{
int init_find = 0;
OW.DataPin = DS_Pin;
OW.DataPort = DS_GPIO_Port;
DS.Resolution = DS18B20_RESOLUTION_9BITS;
OneWire_Init(&OW);
DS18B20_Search(&DS, &OW);
PCHSens_InitModule(&OW, &module1, REG_PCH_NUMB_11|REG_PCH_DIODE_NUMB_1);
PCHSens_FindUnknownSensors(&OW, &UnknownSensors);
PCHSens_DefineUnknownSensor(&UnknownSensors, NULL);
// Dallas_SensorInitByInd(&OW, &AllSens.outdoor, 0);
// Dallas_SensorInitByInd(&OW, &AllSens.indoor, 2);
// Dallas_SensorInitByInd(&OW, &AllSens.bathroom, 1);
// Dallas_SensorInitByInd(&OW, &AllSens.kitchen, 3);
// Dallas_SensorInitByInd(&OW, &AllSens.big_room, 4);
// Dallas_SensorInitByInd(&OW, &AllSens.small_room, 5);
// Dallas_SensorInitByInd(&OW, &AllSens.living_room, 6);
// Dallas_SensorInitByInd(&OW, &AllSens.basement, 7);
//
// uint8_t mask = DALLAS_USER_BYTE_ALL;
// Dallas_WriteUserBytes(&AllSens.outdoor, 1, NULL, mask);
// Dallas_WriteUserBytes(&AllSens.indoor, 2, NULL, mask);
// Dallas_WriteUserBytes(&AllSens.bathroom, 3, NULL, mask);
// Dallas_WriteUserBytes(&AllSens.kitchen, 4, NULL, mask);
// Dallas_WriteUserBytes(&AllSens.big_room, 5, NULL, mask);
// Dallas_WriteUserBytes(&AllSens.small_room, 6, NULL, mask);
// Dallas_WriteUserBytes(&AllSens.living_room, 7, NULL, mask);
// Dallas_WriteUserBytes(&AllSens.basement, 8, NULL, mask);
}

174
DS18B20/pch_sensors.h Normal file
View File

@@ -0,0 +1,174 @@
/**
******************************************************************************
* @file pch_sensors.h
* @brief Ðàáîòà ñ äàò÷èêàìè òåìïåðàòóðû DS18B20 â Ï×
******************************************************************************
*****************************************************************************/
#ifndef PCH_SENSORS_H
#define PCH_SENSORS_H
/* Includes -----------------------------------------------------------------*/
#include "stm32f1xx_hal.h"
#include "dallas_tools.h"
/* Declarations and definitions ---------------------------------------------*/
#define USED_USER_BYTES DALLAS_USER_BYTE_12
/* Ïîçèöèè ïàðàìåòðîâ â UserBytes */
#define REG_SENS_LOCATION_Pos (0) /*!< @brief Ïîçèöèÿ ïàðàìåòðà "Ëîêàöèÿ âíóòðè ìîäóëÿ" */
#define REG_PCH_LOCATION_Pos (8) /*!< @brief Ïîçèöèÿ ïàðàìåòðà "Ðàñïîëîæåíèå â Ï×" */
#define REG_PCH_DIOD_PHASE_Pos (10) /*!< @brief Ïîçèöèÿ ïàðàìåòðà "Äèîäíûé èëè ôàçíûé ìîäóëü" @ref REG_PCH_LOCATION_Pos */
#define REG_PCH_MODULE_NUMB_Pos (8) /*!< @brief Ïîçèöèÿ ïàðàìåòðà "Ïîðÿäêîâûé íîìåð äèîäíîãî/ôàçíîãî ìîäóëÿ" @ref REG_PCH_LOCATION_Pos */
#define REG_PCH_NUMB_Pos (11) /*!< @brief Ïîçèöèÿ ïàðàìåòðà "Ïðåîáðàçîâàòåëü ÷àñòîòû" */
#define REG_PCH_NUMB_DIGIT_1_Pos (13) /*!< @brief Ïîçèöèÿ ïàðàìåòðà "Ïåðâàÿ öèôðà íîìåðà ïðåîáðàçîâàòåëÿ ÷àñòîòû" @ref REG_PCH_NUMB_Pos */
#define REG_PCH_NUMB_DIGIT_2_Pos (11) /*!< @brief Ïîçèöèÿ ïàðàìåòðà "Âòîðàÿ öèôðà íîìåðà ïðåîáðàçîâàòåëÿ ÷àñòîòû" @ref REG_PCH_NUMB_Pos */
#define REG_ZIP_Pos (15) /*!< @brief Ïîçèöèÿ ïàðàìåòðà "ÇÈÏ/íå ÇÈÏ" */
/* Ìàñêè ïàðàìåòðîâ â UserBytes */
#define REG_SENS_LOCATION_Mask ((uint16_t)0x3 << REG_SENS_LOCATION_Pos) /*!< @brief Ìàñêà ïàðàìåòðà "Ëîêàöèÿ âíóòðè ìîäóëÿ" */
#define REG_PCH_LOCATION_Mask ((uint16_t)0x7 << REG_PCH_LOCATION_Pos) /*!< @brief Ìàñêà ïàðàìåòðà "Ðàñïîëîæåíèå â Ï×" */
#define REG_PCH_DIOD_PHASE_Mask ((uint16_t)0x1 << REG_PCH_DIOD_PHASE_Pos) /*!< @brief Ìàñêà ïàðàìåòðà "Äèîäíûé èëè ôàçíûé ìîäóëü" */
#define REG_PCH_MODULE_NUMB_Mask ((uint16_t)0x3 << REG_PCH_MODULE_NUMB_Pos) /*!< @brief Ìàñêà ïàðàìåòðà "Ïîðÿäêîâûé íîìåð äèîäíîãî/ôàçíîãî ìîäóëÿ" */
#define REG_PCH_NUMB_Mask ((uint16_t)0xF << REG_PCH_NUMB_Pos) /*!< @brief Ìàñêà ïàðàìåòðà "Ïðåîáðàçîâàòåëü ÷àñòîòû" */
#define REG_PCH_NUMB_DIGIT_1_Mask ((uint16_t)0x3 << REG_PCH_NUMB_DIGIT_1_Pos) /*!< @brief Ìàñêà ïàðàìåòðà "Ïåðâàÿ öèôðà íîìåðà ïðåîáðàçîâàòåëÿ ÷àñòîòû" */
#define REG_PCH_NUMB_DIGIT_2_Mask ((uint16_t)0x3 << REG_PCH_NUMB_DIGIT_2_Pos) /*!< @brief Ìàñêà ïàðàìåòðà "Âòîðàÿ öèôðà íîìåðà ïðåîáðàçîâàòåëÿ ÷àñòîòû" */
#define REG_ZIP_Mask ((uint16_t)0x1 << REG_ZIP_Pos) /*!< @brief Ìàñêà ïàðàìåòðà "ÇÈÏ/íå ÇÈÏ" */
/* Âàðèàíòû ïàðàìåòðîâ â UserBytes */
#define REG_PCH_NUMB_11 ((1 << REG_PCH_NUMB_DIGIT_1_Pos) | (1 << REG_PCH_NUMB_DIGIT_2_Pos))
#define REG_PCH_NUMB_12 ((1 << REG_PCH_NUMB_DIGIT_1_Pos) | (2 << REG_PCH_NUMB_DIGIT_2_Pos))
#define REG_PCH_NUMB_13 ((1 << REG_PCH_NUMB_DIGIT_1_Pos) | (3 << REG_PCH_NUMB_DIGIT_2_Pos))
#define REG_PCH_NUMB_21 ((2 << REG_PCH_NUMB_DIGIT_1_Pos) | (1 << REG_PCH_NUMB_DIGIT_2_Pos))
#define REG_PCH_NUMB_22 ((2 << REG_PCH_NUMB_DIGIT_1_Pos) | (2 << REG_PCH_NUMB_DIGIT_2_Pos))
#define REG_PCH_NUMB_23 ((2 << REG_PCH_NUMB_DIGIT_1_Pos) | (3 << REG_PCH_NUMB_DIGIT_2_Pos))
#define REG_PCH_DIODE_NUMB_1 ((0 << REG_PCH_DIOD_PHASE_Pos) | (1 << REG_PCH_MODULE_NUMB_Pos))
#define REG_PCH_DIODE_NUMB_2 ((0 << REG_PCH_DIOD_PHASE_Pos) | (2 << REG_PCH_MODULE_NUMB_Pos))
#define REG_PCH_DIODE_NUMB_3 ((0 << REG_PCH_DIOD_PHASE_Pos) | (3 << REG_PCH_MODULE_NUMB_Pos))
#define REG_PCH_PHASE_NUMB_1 ((1 << REG_PCH_DIOD_PHASE_Pos) | (1 << REG_PCH_MODULE_NUMB_Pos))
#define REG_PCH_PHASE_NUMB_2 ((1 << REG_PCH_DIOD_PHASE_Pos) | (2 << REG_PCH_MODULE_NUMB_Pos))
#define REG_PCH_PHASE_NUMB_3 ((1 << REG_PCH_DIOD_PHASE_Pos) | (3 << REG_PCH_MODULE_NUMB_Pos))
/* Ïîëó÷èòü ïàðàìåòð èç UserBytes */
#define GET_REG_SENS_LOCATION(_REG_) ((_REG_) & REG_SENS_LOCATION_Mask) /*!< @brief Ïîëó÷èòü ïàðàìåòð "Ëîêàöèÿ âíóòðè ìîäóëÿ" */
#define GET_REG_PCH_LOCATION(_REG_) ((_REG_) & REG_PCH_LOCATION_Mask) /*!< @brief Ïîëó÷èòü ïàðàìåòð "Ðàñïîëîæåíèå â Ï×" */
#define GET_REG_PCH_DIOD_PHASE(_REG_) ((_REG_) & REG_PCH_DIOD_PHASE_Mask) /*!< @brief Ïîëó÷èòü ïàðàìåòð "Äèîäíûé èëè ôàçíûé ìîäóëü" */
#define GET_REG_PCH_MODULE_NUMB(_REG_) ((_REG_) & REG_PCH_MODULE_NUMB_Mask) /*!< @brief Ïîëó÷èòü ïàðàìåòð "Ïîðÿäêîâûé íîìåð äèîäíîãî/ôàçíîãî ìîäóëÿ" */
#define GET_REG_PCH_NUMB(_REG_) ((_REG_) & REG_PCH_NUMB_Mask) /*!< @brief Ïîëó÷èòü ïàðàìåòð "Ïðåîáðàçîâàòåëü ÷àñòîòû" */
#define GET_REG_PCH_NUMB_DIGIT_1(_REG_) ((_REG_) & REG_PCH_NUMB_DIGIT_1_Mask) /*!< @brief Ïîëó÷èòü ïàðàìåòð "Ïåðâàÿ öèôðà íîìåðà ïðåîáðàçîâàòåëÿ ÷àñòîòû" */
#define GET_REG_PCH_NUMB_DIGIT_2(_REG_) ((_REG_) & REG_PCH_NUMB_DIGIT_2_Mask) /*!< @brief Ïîëó÷èòü ïàðàìåòð "Âòîðàÿ öèôðà íîìåðà ïðåîáðàçîâàòåëÿ ÷àñòîòû" */
#define GET_REG_ZIP(_REG_) ((_REG_) & REG_ZIP_Mask) /*!< @brief Ïîëó÷èòü ïàðàìåòð "ÇÈÏ/íå ÇÈÏ" */
/* Äèàïàçîíû ïàðàìåòðîâ èç UserBytes */
#define REG_SENS_LOCATION_MAX 3
#define REG_SENS_LOCATION_MIN 0
#define REG_PCH_DIOD_PHASE_MAX 1
#define REG_PCH_DIOD_PHASE_MIN 0
#define REG_PCH_MODULE_NUMB_MAX 3
#define REG_PCH_MODULE_NUMB_MIN 0
#define REG_PCH_NUMB_DIGIT_1_MAX 3
#define REG_PCH_NUMB_DIGIT_1_MIN 1
#define REG_PCH_NUMB_DIGIT_2_MAX 2
#define REG_PCH_NUMB_DIGIT_2_MIN 1
/** @brief Ïîëó÷èòü ïàðàìåòð "Ëîêàöèÿ âíóòðè ìîäóëÿ" */
#define IS_REG_SENS_LOCATION(_REG_) (((_REG_)->param.Location <= REG_SENS_LOCATION_MAX) && ((_REG_)->param.Location >= REG_SENS_LOCATION_MIN))
/*!< @brief Ïîëó÷èòü ïàðàìåòð "Ðàñïîëîæåíèå â Ï×" */
#define IS_REG_PCH_LOCATION(_REG_) (IS_REG_PCH_DIOD_PHASE(_REG_) && IS_REG_PCH_MODULE_NUMB(_REG_))
/*!< @brief Ïîëó÷èòü ïàðàìåòð "Äèîäíûé èëè ôàçíûé ìîäóëü" */
#define IS_REG_PCH_DIOD_PHASE(_REG_) (((_REG_)->param.DiodeOrPhase <= REG_PCH_DIOD_PHASE_MAX) && ((_REG_)->param.DiodeOrPhase >= REG_PCH_DIOD_PHASE_MIN))
/*!< @brief Ïîëó÷èòü ïàðàìåòð "Ïîðÿäêîâûé íîìåð äèîäíîãî/ôàçíîãî ìîäóëÿ" */
#define IS_REG_PCH_MODULE_NUMB(_REG_) (((_REG_)->param.ModuleNumb <= REG_PCH_MODULE_NUMB_MAX) && ((_REG_)->param.ModuleNumb >= REG_PCH_MODULE_NUMB_MIN))
/*!< @brief Ïîëó÷èòü ïàðàìåòð "Ïðåîáðàçîâàòåëü ÷àñòîòû" */
#define IS_REG_PCH_NUMB(_REG_) (IS_REG_PCH_NUMB_DIGIT_1(_REG_) && IS_REG_PCH_NUMB_DIGIT_2(_REG_))
/*!< @brief Ïîëó÷èòü ïàðàìåòð "Ïåðâàÿ öèôðà íîìåðà ïðåîáðàçîâàòåëÿ ÷àñòîòû" */
#define IS_REG_PCH_NUMB_DIGIT_1(_REG_) (((_REG_)->param.PCHdig1 <= REG_PCH_NUMB_DIGIT_1_MAX) && ((_REG_)->param.PCHdig1 >= REG_PCH_NUMB_DIGIT_1_MIN))
/*!< @brief Ïîëó÷èòü ïàðàìåòð "Âòîðàÿ öèôðà íîìåðà ïðåîáðàçîâàòåëÿ ÷àñòîòû" s*/
#define IS_REG_PCH_NUMB_DIGIT_2(_REG_) (((_REG_)->param.PCHdig2 <= REG_PCH_NUMB_DIGIT_2_MAX) && ((_REG_)->param.PCHdig2 >= REG_PCH_NUMB_DIGIT_2_MIN))
/*!< @brief Ïîëó÷èòü ïàðàìåòð "ÇÈÏ/íå ÇÈÏ" */
#define IS_REG_ZIP(_REG_) (GET_REG_ZIP(_REG_))
typedef union
{
uint16_t all;
struct
{
unsigned Location:2;
unsigned reserved:6;
unsigned ModuleNumb:2;
unsigned DiodeOrPhase:1;
unsigned PCHdig2:2;
unsigned PCHdig1:2;
unsigned ZIP:1;
}param;
}PCHSens_LocationTypeDef;
typedef struct
{
unsigned connectROM;
unsigned read;
unsigned deinit;
}PCHSens_SensorActionsTypeDef;
typedef struct
{
DALLAS_HandleTypeDef sens;
// PCHSens_LocationTypeDef *UserBytes;
PCHSens_LocationTypeDef Location;
PCHSens_SensorActionsTypeDef action;
unsigned not_found:1;
}PCHSens_SensorTypeDef;
typedef struct
{
OneWire_t *onewire;
PCHSens_SensorTypeDef sens1;
PCHSens_SensorTypeDef sens2;
PCHSens_SensorTypeDef sens3;
PCHSens_SensorTypeDef sens4;
PCHSens_LocationTypeDef refLocation;
}PCHSens_ModuleTypeDef;
extern PCHSens_ModuleTypeDef module1;
typedef struct
{
OneWire_t *onewire;
DALLAS_HandleTypeDef unknown_sensors[DS18B20_DEVICE_AMOUNT];
uint8_t UnknownCnt;
uint64_t ROMtoDefine;
PCHSens_LocationTypeDef LocationtoDefine;
PCHSens_SensorTypeDef *senstoDefine;
}PCHSens_UnknownSensorsTypeDef;
/* Functions ---------------------------------------------------------------*/
HAL_StatusTypeDef PCHSens_FindUnknownSensors(OneWire_t *onewire, PCHSens_UnknownSensorsTypeDef *unknowns);
HAL_StatusTypeDef PCHSens_InitNewSensor(OneWire_t *onewire, PCHSens_SensorTypeDef* sensor, uint64_t ROM);
HAL_StatusTypeDef PCHSens_AddSensor(OneWire_t *onewire, PCHSens_SensorTypeDef* sensor);
HAL_StatusTypeDef PCHSens_InitModule(OneWire_t *onewire, PCHSens_ModuleTypeDef* module, uint16_t param);
HAL_StatusTypeDef PCHSens_ReadTemperature(PCHSens_ModuleTypeDef *module);
HAL_StatusTypeDef PCHSens_CheckSensor(OneWire_t *onewire, PCHSens_SensorTypeDef* sensor);
HAL_StatusTypeDef PCHSens_DefineUnknownSensor(PCHSens_UnknownSensorsTypeDef *unknowns, PCHSens_SensorTypeDef *sensor);
HAL_StatusTypeDef PCHSens_SensorHandleActions(OneWire_t *onewire, PCHSens_SensorTypeDef *sensor);
void PCHSens_FirstInit(void);
#endif // #ifndef PCH_SENSORS_H

Binary file not shown.

View File

@@ -24,7 +24,7 @@
/* Private includes ----------------------------------------------------------*/ /* Private includes ----------------------------------------------------------*/
/* USER CODE BEGIN Includes */ /* USER CODE BEGIN Includes */
#include "dallas_tools.h" #include "pch_sensors.h"
/* USER CODE END Includes */ /* USER CODE END Includes */
/* Private typedef -----------------------------------------------------------*/ /* Private typedef -----------------------------------------------------------*/
@@ -96,23 +96,19 @@ int main(void)
DwtInit(); DwtInit();
/* Set parameter and initialize DS18B20 */ /* Set parameter and initialize DS18B20 */
/* Initialize OneWire and reset all data */ /* Initialize OneWire and reset all data */
Dallas_FirstInit(); PCHSens_FirstInit();
/* USER CODE END 2 */ /* USER CODE END 2 */
/* Infinite loop */ /* Infinite loop */
/* USER CODE BEGIN WHILE */ /* USER CODE BEGIN WHILE */
while (1) while (1)
{ {
Dallas_ReadAll(); PCHSens_ReadTemperature(&module1);
// Dallas_ReadAll();
/* Start temperature conversion on all devices on one bus */ /* Start temperature conversion on all devices on one bus */
// DS18B20_StartConvTAll(&OW); // DS18B20_StartConvTAll(&OW);
// DS18B20_WaitForEndConvertion(&OW); // DS18B20_WaitForEndConvertion(&OW);
/* Read temperature from device and store it to DS data structure */
for(uint8_t i = 0; i < OW.RomCnt; i++)
{
/* Read Temperature */
// DS18B20_CalcTemperature(&OW, DS.DevAddr[i], &DS.Temperature[i]);
}
/* Search Alarm triggered and store in DS data structure */ /* Search Alarm triggered and store in DS data structure */
// DS18B20_AlarmSearch(&DS, &OW); // DS18B20_AlarmSearch(&DS, &OW);

View File

@@ -148,7 +148,24 @@
<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>264</LineNumber>
<EnabledFlag>1</EnabledFlag>
<Address>134230484</Address>
<ByteObject>0</ByteObject>
<HtxType>0</HtxType>
<ManyObjects>0</ManyObjects>
<SizeOfObject>0</SizeOfObject>
<BreakByAccess>0</BreakByAccess>
<BreakIfRCount>1</BreakIfRCount>
<Filename>..\..\DS18B20\pch_sensors.c</Filename>
<ExecCommand></ExecCommand>
<Expression>\\ds18b20\../../DS18B20/pch_sensors.c\264</Expression>
</Bp>
</Breakpoint>
<WatchWindow1> <WatchWindow1>
<Ww> <Ww>
<count>0</count> <count>0</count>
@@ -163,54 +180,19 @@
<Ww> <Ww>
<count>2</count> <count>2</count>
<WinNumber>1</WinNumber> <WinNumber>1</WinNumber>
<ItemText>GPIO_InitStruct</ItemText> <ItemText>UnknownSensors</ItemText>
</Ww>
<Ww>
<count>3</count>
<WinNumber>1</WinNumber>
<ItemText>config</ItemText>
</Ww>
<Ww>
<count>4</count>
<WinNumber>1</WinNumber>
<ItemText>outdoor</ItemText>
</Ww>
<Ww>
<count>5</count>
<WinNumber>1</WinNumber>
<ItemText>AllSens,0x10</ItemText>
</Ww>
<Ww>
<count>6</count>
<WinNumber>1</WinNumber>
<ItemText>pin_numb</ItemText>
</Ww>
<Ww>
<count>7</count>
<WinNumber>1</WinNumber>
<ItemText>usec,0x0A</ItemText>
</Ww> </Ww>
</WatchWindow1> </WatchWindow1>
<WatchWindow2> <WatchWindow2>
<Ww> <Ww>
<count>0</count> <count>0</count>
<WinNumber>2</WinNumber> <WinNumber>2</WinNumber>
<ItemText>ROM</ItemText> <ItemText>module1</ItemText>
</Ww> </Ww>
<Ww> <Ww>
<count>1</count> <count>1</count>
<WinNumber>2</WinNumber> <WinNumber>2</WinNumber>
<ItemText>ROM[0]</ItemText> <ItemText>UnknownSensors</ItemText>
</Ww>
<Ww>
<count>2</count>
<WinNumber>2</WinNumber>
<ItemText>ROM[1]</ItemText>
</Ww>
<Ww>
<count>3</count>
<WinNumber>2</WinNumber>
<ItemText>intROM</ItemText>
</Ww> </Ww>
</WatchWindow2> </WatchWindow2>
<Tracepoint> <Tracepoint>
@@ -377,7 +359,7 @@
<Group> <Group>
<GroupName>Drivers/STM32F1xx_HAL_Driver</GroupName> <GroupName>Drivers/STM32F1xx_HAL_Driver</GroupName>
<tvExp>0</tvExp> <tvExp>1</tvExp>
<tvExpOptDlg>0</tvExpOptDlg> <tvExpOptDlg>0</tvExpOptDlg>
<cbSel>0</cbSel> <cbSel>0</cbSel>
<RteFlg>0</RteFlg> <RteFlg>0</RteFlg>
@@ -584,6 +566,30 @@
<tvExp>0</tvExp> <tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg> <tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2> <bDave2>0</bDave2>
<PathWithFileName>..\..\DS18B20\pch_sensors.c</PathWithFileName>
<FilenameWithoutPath>pch_sensors.c</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>5</GroupNumber>
<FileNumber>24</FileNumber>
<FileType>5</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>..\..\DS18B20\pch_sensors.h</PathWithFileName>
<FilenameWithoutPath>pch_sensors.h</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>5</GroupNumber>
<FileNumber>25</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>..\..\DS18B20\dallas_tools.c</PathWithFileName> <PathWithFileName>..\..\DS18B20\dallas_tools.c</PathWithFileName>
<FilenameWithoutPath>dallas_tools.c</FilenameWithoutPath> <FilenameWithoutPath>dallas_tools.c</FilenameWithoutPath>
<RteFlg>0</RteFlg> <RteFlg>0</RteFlg>
@@ -591,7 +597,7 @@
</File> </File>
<File> <File>
<GroupNumber>5</GroupNumber> <GroupNumber>5</GroupNumber>
<FileNumber>24</FileNumber> <FileNumber>26</FileNumber>
<FileType>5</FileType> <FileType>5</FileType>
<tvExp>0</tvExp> <tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg> <tvExpOptDlg>0</tvExpOptDlg>
@@ -601,30 +607,6 @@
<RteFlg>0</RteFlg> <RteFlg>0</RteFlg>
<bShared>0</bShared> <bShared>0</bShared>
</File> </File>
<File>
<GroupNumber>5</GroupNumber>
<FileNumber>25</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>..\..\DS18B20\ds18b20.c</PathWithFileName>
<FilenameWithoutPath>ds18b20.c</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>5</GroupNumber>
<FileNumber>26</FileNumber>
<FileType>5</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>..\..\DS18B20\ds18b20.h</PathWithFileName>
<FilenameWithoutPath>ds18b20.h</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File> <File>
<GroupNumber>5</GroupNumber> <GroupNumber>5</GroupNumber>
<FileNumber>27</FileNumber> <FileNumber>27</FileNumber>
@@ -632,8 +614,8 @@
<tvExp>0</tvExp> <tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg> <tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2> <bDave2>0</bDave2>
<PathWithFileName>..\..\DS18B20\dwt.c</PathWithFileName> <PathWithFileName>..\..\DS18B20\ds18b20_driver.c</PathWithFileName>
<FilenameWithoutPath>dwt.c</FilenameWithoutPath> <FilenameWithoutPath>ds18b20_driver.c</FilenameWithoutPath>
<RteFlg>0</RteFlg> <RteFlg>0</RteFlg>
<bShared>0</bShared> <bShared>0</bShared>
</File> </File>
@@ -644,8 +626,8 @@
<tvExp>0</tvExp> <tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg> <tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2> <bDave2>0</bDave2>
<PathWithFileName>..\..\DS18B20\dwt.h</PathWithFileName> <PathWithFileName>..\..\DS18B20\ds18b20_driver.h</PathWithFileName>
<FilenameWithoutPath>dwt.h</FilenameWithoutPath> <FilenameWithoutPath>ds18b20_driver.h</FilenameWithoutPath>
<RteFlg>0</RteFlg> <RteFlg>0</RteFlg>
<bShared>0</bShared> <bShared>0</bShared>
</File> </File>
@@ -697,6 +679,30 @@
<RteFlg>0</RteFlg> <RteFlg>0</RteFlg>
<bShared>0</bShared> <bShared>0</bShared>
</File> </File>
<File>
<GroupNumber>5</GroupNumber>
<FileNumber>33</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>34</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>

View File

@@ -566,6 +566,16 @@
<Group> <Group>
<GroupName>DS18B20</GroupName> <GroupName>DS18B20</GroupName>
<Files> <Files>
<File>
<FileName>pch_sensors.c</FileName>
<FileType>1</FileType>
<FilePath>..\..\DS18B20\pch_sensors.c</FilePath>
</File>
<File>
<FileName>pch_sensors.h</FileName>
<FileType>5</FileType>
<FilePath>..\..\DS18B20\pch_sensors.h</FilePath>
</File>
<File> <File>
<FileName>dallas_tools.c</FileName> <FileName>dallas_tools.c</FileName>
<FileType>1</FileType> <FileType>1</FileType>
@@ -577,24 +587,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 +616,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

Binary file not shown.