Кучу всего, переструктурирован проект все должно работать
- onewire: модуль для отправик комманд в DS18B20 - ds18b20_driver: модуль для отправик комманд в DS18B20 - dallas_tools: модуль для общения с DS18B20
This commit is contained in:
@@ -5,7 +5,7 @@
|
||||
* @author MicroTechnics (microtechnics.ru)
|
||||
******************************************************************************
|
||||
@details
|
||||
Ýòîò ôàéë ñîäåðæèò ðåàëèçàöèþ ôóíêöèé äëÿ ðàáîòû ñ äàò÷èêîì DALLAS_HandleTypeDef
|
||||
Этот файл содержит реализацию функций для работы с датчиком DS18B20
|
||||
÷åðåç èíòåðôåéñ 1-Wire. Îí ïðåäîñòàâëÿåò ôóíêöèè äëÿ ÷òåíèÿ è çàïèñè
|
||||
êîíôèãóðàöèè, âûïîëíåíèÿ èçìåðåíèé è îáðàáîòêè ïîëó÷åííûõ äàííûõ.
|
||||
*****************************************************************************/
|
||||
@@ -145,28 +145,29 @@ HAL_StatusTypeDef Dallas_ReplaceLostedSensor(DALLAS_HandleTypeDef *sensor)
|
||||
{
|
||||
HAL_StatusTypeDef result;
|
||||
|
||||
|
||||
if(sensor == NULL)
|
||||
return HAL_ERROR;
|
||||
|
||||
if(AllSens.outdoor.isLost)
|
||||
if(sensor->isLost)
|
||||
{
|
||||
if(DS18B20_Search(&DS, &OW) != HAL_OK)
|
||||
return HAL_ERROR;
|
||||
|
||||
if(sensor->Init.init_func(sensor->onewire, sensor) != HAL_OK)
|
||||
return HAL_ERROR;
|
||||
|
||||
return HAL_OK;
|
||||
}
|
||||
else
|
||||
{
|
||||
/*unknown sensor*/
|
||||
return HAL_ERROR;
|
||||
return HAL_OK;
|
||||
}
|
||||
return HAL_OK;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @brief Ôóíêöèÿ äëÿ äîáàâëåíèÿ íîâîãî äàò÷èêà â ñòðóêòóðó
|
||||
* @brief Функция для иниицализации нового датчика в структуре
|
||||
* @param onewire Óêàçàòåëü íà ñòðóêòóðó OneWire
|
||||
* @param sensor Óêàçàòåëü íà ñòðóêòóðó äàò÷èêà
|
||||
* @retval HAL Status
|
||||
@@ -219,7 +220,7 @@ HAL_StatusTypeDef Dallas_SensorInitByROM(OneWire_t *onewire, DALLAS_HandleTypeDe
|
||||
|
||||
uint8_t comparebytes = DALLAS_ROM_SIZE;
|
||||
int ROM_ind = 0;
|
||||
for(int i = 0; i < DS18B20_DEVICE_AMOUNT; i++)
|
||||
for(int i = 0; i < onewire->RomCnt; i++)
|
||||
{
|
||||
comparebytes = DALLAS_ROM_SIZE;
|
||||
for(int rom_byte = 0; rom_byte < DALLAS_ROM_SIZE; rom_byte++)
|
||||
@@ -233,16 +234,11 @@ HAL_StatusTypeDef Dallas_SensorInitByROM(OneWire_t *onewire, DALLAS_HandleTypeDe
|
||||
break;
|
||||
}
|
||||
}
|
||||
/* Ïðîâåðêà ïðèñóòñòâóåò ëè âûáðàííûé äàò÷èê íà ëèíèè */
|
||||
|
||||
/* Проверка присутствует ли выбранный датчик на линии */
|
||||
if(comparebytes == 0)
|
||||
{
|
||||
// result = Dallas_IsConnected(sensor);
|
||||
// if(result != HAL_OK)
|
||||
// return result;
|
||||
//
|
||||
// sensor->isInitialized = 1;
|
||||
// sensor->Init.init_func = (HAL_StatusTypeDef (*)())Dallas_SensorInitByROM;
|
||||
|
||||
result = Dallas_SensorInit(onewire, sensor, &DS.DevAddr[ROM_ind]);
|
||||
return result;
|
||||
}
|
||||
@@ -260,10 +256,7 @@ HAL_StatusTypeDef Dallas_SensorInitByROM(OneWire_t *onewire, DALLAS_HandleTypeDe
|
||||
* @brief Èíèöèàëèçèðóåò ñòðóêòóðó äàò÷èêà ïî ïîëüçîâàòåëüñêèì áàéòàì
|
||||
* @param onewire Óêàçàòåëü íà ñòðóêòóðó OneWire
|
||||
* @param sensor Óêàçàòåëü íà ñòðóêòóðó äàò÷èêà
|
||||
* @param UserBytes34 Ïîëüçîâàòåëüñêèå áàéòû 3 è 4, NULL äëÿ èãíîðà
|
||||
* @param UserBytes12 Ïîëüçîâàòåëüñêèå áàéòû 1 è 2, NULL äëÿ èãíîðà
|
||||
* @retval HAL Status
|
||||
* @details ñòàðøèé áàéò - UserByte4/UserByte2, ìëàäøèé - UserByte3/UserByte1.
|
||||
*/
|
||||
HAL_StatusTypeDef Dallas_SensorInitByUserBytes(OneWire_t *onewire, DALLAS_HandleTypeDef *sensor)
|
||||
{
|
||||
@@ -282,50 +275,50 @@ HAL_StatusTypeDef Dallas_SensorInitByUserBytes(OneWire_t *onewire, DALLAS_Handle
|
||||
uint8_t UserByte34Cmp = 0;
|
||||
|
||||
DALLAS_ScratchpadTypeDef scratchpad;
|
||||
for(int i = 0; i < DS18B20_DEVICE_AMOUNT; i++)
|
||||
for(int i = 0; i < onewire->RomCnt; i++)
|
||||
{
|
||||
|
||||
for(int rom_ind = 0; rom_ind < DALLAS_ROM_SIZE; rom_ind++)
|
||||
|
||||
/* Ïðîâåðêà ïðèñóòñòâóåò ëè âûáðàííûé äàò÷èê íà ëèíèè */
|
||||
result = DS18B20_ReadScratchpad(onewire, (uint8_t *)&DS.DevAddr[i], (uint8_t *)&scratchpad);
|
||||
if (result != HAL_OK)
|
||||
return result;
|
||||
|
||||
|
||||
/* Ñðàâíåíèå UserByte1 è UserByte2, åñëè âûáðàíî */
|
||||
if(sensor->Init.UserBytes12 != NULL)
|
||||
{
|
||||
if( (scratchpad.tHighRegister == UserByte1) &&
|
||||
(scratchpad.tLowRegister == UserByte2))
|
||||
/* Проверка присутствует ли выбранный датчик на линии */
|
||||
result = DS18B20_ReadScratchpad(onewire, (uint8_t *)&DS.DevAddr[i], (uint8_t *)&scratchpad);
|
||||
if (result != HAL_OK)
|
||||
return result;
|
||||
|
||||
/* Сравнение UserByte1 и UserByte2, если они не равны нулю */
|
||||
if(sensor->Init.UserBytes12 != NULL)
|
||||
{
|
||||
if( (scratchpad.tHighRegister == UserByte1) &&
|
||||
(scratchpad.tLowRegister == UserByte2))
|
||||
{
|
||||
UserByte12Cmp = 1;
|
||||
}
|
||||
}/* Если сравнение UserByte1 и UserByte2 не выбрано, то считаем что они совпадают */
|
||||
else
|
||||
{
|
||||
UserByte12Cmp = 1;
|
||||
}
|
||||
}/* Åñëè ðàâíåíèå UserByte1 è UserByte2 íå âûáðàíî, òî ñ÷èòàåì ÷òî îíè îäèíàêîâûå */
|
||||
else
|
||||
{
|
||||
UserByte12Cmp = 1;
|
||||
}
|
||||
/* Ñðàâíåíèå UserByte3 è UserByte4, åñëè âûáðàíî */
|
||||
if(sensor->Init.UserBytes34 != NULL)
|
||||
{
|
||||
if( (scratchpad.UserByte3 == UserByte3) &&
|
||||
(scratchpad.UserByte4 == UserByte4))
|
||||
/* Сравнение UserByte3 и UserByte4, если они не равны нулю */
|
||||
if(sensor->Init.UserBytes34 != NULL)
|
||||
{
|
||||
if( (scratchpad.UserByte3 == UserByte3) &&
|
||||
(scratchpad.UserByte4 == UserByte4))
|
||||
{
|
||||
UserByte34Cmp = 1;
|
||||
}
|
||||
}/* Если сравнение UserByte3 и UserByte4 не выбрано, то считаем что они одинаковые */
|
||||
else
|
||||
{
|
||||
UserByte34Cmp = 1;
|
||||
}
|
||||
}/* Åñëè ðàâíåíèå UserByte3 è UserByte4 íå âûáðàíî, òî ñ÷èòàåì ÷òî îíè îäèíàêîâûå */
|
||||
else
|
||||
{
|
||||
UserByte34Cmp = 1;
|
||||
}
|
||||
/* Åñëè íàøëè íóæíûé äàò÷èê - çàâåðøàåì ïîèñê */
|
||||
if(UserByte12Cmp && UserByte34Cmp)
|
||||
{
|
||||
// sensor->isInitialized = 1;
|
||||
// sensor->Init.init_func = (HAL_StatusTypeDef (*)())Dallas_SensorInitByUserBytes;
|
||||
result = Dallas_SensorInit(onewire, sensor, &DS.DevAddr[i]);
|
||||
return result;
|
||||
/* Если нашли нужный датчик - завершаем поиск */
|
||||
if(UserByte12Cmp && UserByte34Cmp)
|
||||
{
|
||||
// sensor->isInitialized = 1;
|
||||
// sensor->Init.init_func = (HAL_StatusTypeDef (*)())Dallas_SensorInitByUserBytes;
|
||||
result = Dallas_SensorInit(onewire, sensor, &DS.DevAddr[i]);
|
||||
return result;
|
||||
}
|
||||
}
|
||||
}
|
||||
Dallas_SensorDeInit(sensor);
|
||||
@@ -334,12 +327,11 @@ HAL_StatusTypeDef Dallas_SensorInitByUserBytes(OneWire_t *onewire, DALLAS_Handle
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Èíèöèàëèçèðóåò ñòðóêòóðó äàò÷èêà ïî èíäåêó
|
||||
* @brief Инициализирует структуру датчика по порядковому номеру
|
||||
* @param onewire Óêàçàòåëü íà ñòðóêòóðó OneWire
|
||||
* @param sensor Óêàçàòåëü íà ñòðóêòóðó äàò÷èêà
|
||||
* @param sens_ind Ïîðÿäêîâûé íîìåð äàò÷èêà â ñòðóêòóðå
|
||||
* @retval HAL Status
|
||||
* @details Èíäåêñ - ýòî ïîðÿäêîâûé íîìåð äàò÷èêà â ñïèñêå íàéäåííûõ.
|
||||
* @details Порядковый номер датчика в списке найденных.
|
||||
* Ò.å. êàêèì ïî ñ÷åòó ýòîò äàò÷èê áûë íàéäåí
|
||||
*/
|
||||
HAL_StatusTypeDef Dallas_SensorInitByInd(OneWire_t *onewire, DALLAS_HandleTypeDef *sensor)
|
||||
@@ -362,12 +354,10 @@ HAL_StatusTypeDef Dallas_SensorInitByInd(OneWire_t *onewire, DALLAS_HandleTypeDe
|
||||
|
||||
/**
|
||||
* @brief Èíèöèàëèçèðóåò äàò÷èê äëÿ ðàáîòû
|
||||
* @param onewire Óêàçàòåëü íà ñòðóêòóðó OneWire
|
||||
* @param sensor Óêàçàòåëü íà ñòðóêòóðó äàò÷èêà
|
||||
* @param sens_ind Ïîðÿäêîâûé íîìåð äàò÷èêà â ñòðóêòóðå
|
||||
* @param onewire Указатель на структуру OneWire
|
||||
* @param sensor Указатель на структуру датчика
|
||||
* @param ROM ROM датчика, который надо инициализировать
|
||||
* @retval HAL Status
|
||||
* @details Èíäåêñ - ýòî ïîðÿäêîâûé íîìåð äàò÷èêà â ñïèñêå íàéäåííûõ.
|
||||
* Ò.å. êàêèì ïî ñ÷åòó ýòîò äàò÷èê áûë íàéäåí
|
||||
*/
|
||||
HAL_StatusTypeDef Dallas_SensorInit(OneWire_t *onewire, DALLAS_HandleTypeDef *sensor, uint8_t (*ROM)[DALLAS_ROM_SIZE])
|
||||
{
|
||||
@@ -378,7 +368,10 @@ HAL_StatusTypeDef Dallas_SensorInit(OneWire_t *onewire, DALLAS_HandleTypeDef *se
|
||||
if(onewire == 0)
|
||||
return HAL_ERROR;
|
||||
|
||||
sensor->onewire = onewire;
|
||||
|
||||
|
||||
sensor->onewire = onewire;
|
||||
|
||||
for(int i = 0; i < DALLAS_ROM_SIZE; i++)
|
||||
sensor->sensROM[i] = (*ROM)[i];
|
||||
|
||||
@@ -409,13 +402,11 @@ HAL_StatusTypeDef Dallas_SensorInit(OneWire_t *onewire, DALLAS_HandleTypeDef *se
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Äåèíèöèàëèçèðóåò ïîëíîñòüþ ñòðóêòóðó äàò÷èêà
|
||||
* @brief Деинициализирует структуру датчика
|
||||
* @param onewire Óêàçàòåëü íà ñòðóêòóðó OneWire
|
||||
* @param sensor Óêàçàòåëü íà ñòðóêòóðó äàò÷èêà
|
||||
* @param sens_ind Ïîðÿäêîâûé íîìåð äàò÷èêà â ñòðóêòóðå
|
||||
* @retval HAL Status
|
||||
* @details Èíäåêñ - ýòî ïîðÿäêîâûé íîìåð äàò÷èêà â ñïèñêå íàéäåííûõ.
|
||||
* Ò.å. êàêèì ïî ñ÷åòó ýòîò äàò÷èê áûë íàéäåí
|
||||
*/
|
||||
HAL_StatusTypeDef Dallas_SensorDeInit(DALLAS_HandleTypeDef *sensor)
|
||||
{
|
||||
@@ -423,20 +414,24 @@ HAL_StatusTypeDef Dallas_SensorDeInit(DALLAS_HandleTypeDef *sensor)
|
||||
return HAL_ERROR;
|
||||
|
||||
DALLAS_InitStructTypeDef initbuff = sensor->Init;
|
||||
DALLAS_ControlTypeDef ctrlbuff = sensor->Control;
|
||||
|
||||
memset(sensor, 0, sizeof(DALLAS_HandleTypeDef));
|
||||
|
||||
sensor->Init = initbuff;
|
||||
sensor->Control = ctrlbuff;
|
||||
|
||||
return HAL_OK;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Çàïóñêàåò èçìåðåíèå òåìïåðàòóðû íà âñåõ äàò÷èêàõ
|
||||
* @param waitCondition Óñëîâèå îæèäàíèÿ çàâåðøåíèÿ ïðåîáðàçîâàíèÿ
|
||||
* @param onewire Указатель на структуру OneWire
|
||||
* @param waitCondition Условие ожидания завершения преобразования
|
||||
* @param dallas_delay_ms Время ожидания окончания конверсии
|
||||
* @retval HAL Status
|
||||
*/
|
||||
HAL_StatusTypeDef Dallas_StartConvertTAll(OneWire_t *onewire, DALLAS_WaitCondition waitCondition, uint8_t dallas_delay_ms)
|
||||
HAL_StatusTypeDef Dallas_StartConvertTAll(OneWire_t *onewire, DALLAS_WaitConvertionTypeDef waitCondition, uint8_t dallas_delay_ms)
|
||||
{
|
||||
HAL_StatusTypeDef result;
|
||||
uint8_t rxDummyData;
|
||||
@@ -497,7 +492,7 @@ HAL_StatusTypeDef Dallas_StartConvertTAll(OneWire_t *onewire, DALLAS_WaitConditi
|
||||
* @param waitCondition Óñëîâèå îæèäàíèÿ çàâåðøåíèÿ ïðåîáðàçîâàíèÿ
|
||||
* @retval HAL Status
|
||||
*/
|
||||
HAL_StatusTypeDef Dallas_ConvertT(DALLAS_HandleTypeDef *sensor, DALLAS_WaitCondition waitCondition)
|
||||
HAL_StatusTypeDef Dallas_ConvertT(DALLAS_HandleTypeDef *sensor, DALLAS_WaitConvertionTypeDef waitCondition)
|
||||
{
|
||||
HAL_StatusTypeDef result;
|
||||
uint8_t rxDummyData;
|
||||
@@ -571,7 +566,7 @@ HAL_StatusTypeDef Dallas_ConvertT(DALLAS_HandleTypeDef *sensor, DALLAS_WaitCondi
|
||||
|
||||
|
||||
/**
|
||||
* @brief ×èòàåò ñîäåðæèìîå ïàìÿòè (scratchpad) äàò÷èêà DALLAS_HandleTypeDef
|
||||
* @brief Читает измеренную датчиком температуру
|
||||
* @param sensor Óêàçàòåëü íà ñòðóêòóðó äàò÷èêà
|
||||
* @retval HAL Status
|
||||
*/
|
||||
@@ -602,7 +597,7 @@ HAL_StatusTypeDef Dallas_ReadTemperature(DALLAS_HandleTypeDef *sensor)
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Âûïîëíÿåò êîìàíäó èíèöèàëèçàöèè DALLAS_HandleTypeDef
|
||||
* @brief Проверяет подключен ли датчик (чтение scratchpad)
|
||||
* @param sensor Óêàçàòåëü íà ñòðóêòóðó äàò÷èêà
|
||||
* @retval HAL Status
|
||||
*/
|
||||
@@ -623,12 +618,15 @@ HAL_StatusTypeDef Dallas_IsConnected(DALLAS_HandleTypeDef *sensor)
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
if(sensor->isConnected == 1)
|
||||
{
|
||||
sensor->f.disconnect_cnt++;
|
||||
sensor->isLost = 1;
|
||||
}
|
||||
sensor->isConnected = 0;
|
||||
|
||||
Dallas_ReplaceLostedSensor(sensor);
|
||||
return HAL_BUSY; // èñïîëüçóþ busy, ÷òîáû îòëè÷àòü ñèòóàöèþ îò HAL_ERROR
|
||||
}
|
||||
}
|
||||
@@ -657,13 +655,12 @@ HAL_StatusTypeDef Dallas_WriteUserBytes(DALLAS_HandleTypeDef *sensor, uint16_t U
|
||||
result = DS18B20_WriteUserBytes(sensor->onewire, (uint8_t *)sensor->sensROM, UserBytes12, UserBytes34, UserBytesMask);
|
||||
if (result != HAL_OK)
|
||||
{
|
||||
sensor->f.read_temperature_err_cnt++;
|
||||
sensor->f.other_err_cnt++;
|
||||
return result;
|
||||
}
|
||||
result = DS18B20_ReadScratchpad(sensor->onewire, (uint8_t *)sensor->sensROM, (uint8_t *)&sensor->scratchpad);
|
||||
if (result != HAL_OK)
|
||||
{
|
||||
sensor->f.read_temperature_err_cnt++;
|
||||
return result;
|
||||
}
|
||||
|
||||
@@ -671,26 +668,3 @@ HAL_StatusTypeDef Dallas_WriteUserBytes(DALLAS_HandleTypeDef *sensor, uint16_t U
|
||||
}
|
||||
|
||||
|
||||
///**
|
||||
// * @brief ×èòàåò óíèêàëüíûé ROM-êîä äàò÷èêà DALLAS_HandleTypeDef
|
||||
// * @param sensor Óêàçàòåëü íà ñòðóêòóðó äàò÷èêà
|
||||
// * @retval HAL Status
|
||||
// */
|
||||
//HAL_StatusTypeDef Dallas_ReadRom(DALLAS_HandleTypeDef *sensor)
|
||||
//{
|
||||
// HAL_StatusTypeDef result = HAL_OK;
|
||||
// uint8_t rxData[DALLAS_READ_ROM_RX_BYTES_NUM];
|
||||
//
|
||||
// DS18B20_ReadScratchpad(sensor->onewire, sensor->sensROM, (uint8_t *)&sensor->scratchpad);
|
||||
//
|
||||
//
|
||||
// if (result == HAL_OK)
|
||||
// {
|
||||
// for (uint8_t i = 0; i < DALLAS_SERIAL_NUMBER_LEN_BYTES; i++)
|
||||
// {
|
||||
// sensor->sensROM[i] = rxData[DALLAS_SERIAL_NUMBER_OFFSET_BYTES + i];
|
||||
// }
|
||||
// }
|
||||
|
||||
// return result;
|
||||
//}
|
||||
Reference in New Issue
Block a user