Куча всего для работы с датчиками температуры в ПЧ (не работает пока)
Планируется сделать: - инициализацию (запись локации в ROM) найденных неизвестных датчиков - переинициализацию уже найденных датчиков
This commit is contained in:
@@ -45,7 +45,7 @@ HAL_StatusTypeDef Dallas_ReplaceLostedSensor(DALLAS_HandleTypeDef *sensor)
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
return HAL_OK;
|
return HAL_BUSY; // äàò÷èê íå ïîòåðÿí
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -201,6 +201,9 @@ HAL_StatusTypeDef Dallas_SensorInitByUserBytes(OneWire_t *onewire, DALLAS_Handle
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
memset(&sensor->sensROM, 0, DALLAS_ROM_SIZE);
|
||||||
|
memset(&sensor->scratchpad, 0, sizeof(DALLAS_ScratchpadTypeDef));
|
||||||
/* Âîçâðàùàåì îøèáêó åñëè íå íàøëè */
|
/* Âîçâðàùàåì îøèáêó åñëè íå íàøëè */
|
||||||
return HAL_ERROR;
|
return HAL_ERROR;
|
||||||
}
|
}
|
||||||
@@ -499,7 +502,7 @@ HAL_StatusTypeDef Dallas_IsConnected(DALLAS_HandleTypeDef *sensor)
|
|||||||
}
|
}
|
||||||
sensor->isConnected = 0;
|
sensor->isConnected = 0;
|
||||||
|
|
||||||
Dallas_ReplaceLostedSensor(sensor);
|
// Dallas_ReplaceLostedSensor(sensor);
|
||||||
return HAL_BUSY; // èñïîëüçóþ busy, ÷òîáû îòëè÷àòü ñèòóàöèþ îò HAL_ERROR
|
return HAL_BUSY; // èñïîëüçóþ busy, ÷òîáû îòëè÷àòü ñèòóàöèþ îò HAL_ERROR
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -8,14 +8,47 @@
|
|||||||
/* Includes ----------------------------------------------------------------*/
|
/* Includes ----------------------------------------------------------------*/
|
||||||
|
|
||||||
#include "pch_sensors.h"
|
#include "pch_sensors.h"
|
||||||
|
PCHSens_UnknownSensorsTypeDef UnknownSensors;
|
||||||
|
|
||||||
/* Declarations and definitions --------------------------------------------*/
|
/* Declarations and definitions --------------------------------------------*/
|
||||||
|
|
||||||
PCHSens_ModuleTypeDef module1;
|
PCHSens_ModuleTypeDef module1;
|
||||||
/* Functions ---------------------------------------------------------------*/
|
/* Functions ---------------------------------------------------------------*/
|
||||||
|
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 *location = (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_PCH_LOCATION(location) == 0) ||
|
||||||
|
(IS_REG_PCH_LOCATION(location) == 0) ||
|
||||||
|
(IS_REG_PCH_NUMB(location) == 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_InitNewSensor(OneWire_t *onewire, PCH_SensorTypeDef* sensor, uint64_t ROM, PCHSens_LocationTypeDef *location)
|
HAL_StatusTypeDef PCHSens_InitNewSensor(OneWire_t *onewire, PCHSens_SensorTypeDef* sensor, uint64_t ROM, uint16_t location)
|
||||||
{
|
{
|
||||||
DALLAS_HandleTypeDef tempsens;
|
DALLAS_HandleTypeDef tempsens;
|
||||||
HAL_StatusTypeDef result;
|
HAL_StatusTypeDef result;
|
||||||
@@ -25,59 +58,75 @@ HAL_StatusTypeDef PCHSens_InitNewSensor(OneWire_t *onewire, PCH_SensorTypeDef* s
|
|||||||
return HAL_ERROR;
|
return HAL_ERROR;
|
||||||
if(location == NULL)
|
if(location == NULL)
|
||||||
return HAL_ERROR;
|
return HAL_ERROR;
|
||||||
|
|
||||||
PCHSens_LocationTypeDef initlocation = *location;
|
|
||||||
|
|
||||||
sensor->Location = (PCHSens_LocationTypeDef *)&sensor->sens.scratchpad.tHighRegister;
|
sensor->Location = (PCHSens_LocationTypeDef *)&sensor->sens.scratchpad.tHighRegister;
|
||||||
|
|
||||||
sensor->sens.Init.ROM = ROM;
|
sensor->sens.Init.ROM = ROM;
|
||||||
|
|
||||||
sensor->sens.Init.UserBytes12 = initlocation.all;
|
sensor->sens.Init.UserBytes12 = location;
|
||||||
|
|
||||||
sensor->sens.Init.init_func = &Dallas_SensorInitByROM;
|
sensor->sens.Init.init_func = &Dallas_SensorInitByROM;
|
||||||
|
|
||||||
result = Dallas_AddNewSensors(onewire, &sensor->sens);
|
result = Dallas_AddNewSensors(onewire, &sensor->sens);
|
||||||
if(result != HAL_OK)
|
if(result != HAL_OK)
|
||||||
|
{
|
||||||
|
sensor->not_found = 1;
|
||||||
return result;
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
result = Dallas_WriteUserBytes(&sensor->sens, initlocation.all, 0, DALLAS_USER_BYTE_12);
|
result = Dallas_WriteUserBytes(&sensor->sens, location, 0, DALLAS_USER_BYTE_12);
|
||||||
if(result != HAL_OK)
|
if(result != HAL_OK)
|
||||||
return result;
|
return result;
|
||||||
|
|
||||||
sensor->sens.Init.init_func = &Dallas_SensorInitByUserBytes;
|
sensor->sens.Init.init_func = &Dallas_SensorInitByUserBytes;
|
||||||
|
|
||||||
return Dallas_AddNewSensors(onewire, &sensor->sens);
|
result = Dallas_AddNewSensors(onewire, &sensor->sens);
|
||||||
|
if(result == HAL_OK)
|
||||||
|
sensor->not_found = 0;
|
||||||
|
else
|
||||||
|
sensor->not_found = 1;
|
||||||
|
|
||||||
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
HAL_StatusTypeDef PCHSens_FindSensor(OneWire_t *onewire, PCH_SensorTypeDef* sensor, PCHSens_LocationTypeDef *location)
|
|
||||||
{
|
|
||||||
|
HAL_StatusTypeDef PCHSens_AddSensor(OneWire_t *onewire, PCHSens_SensorTypeDef* sensor, uint16_t location)
|
||||||
|
{
|
||||||
|
HAL_StatusTypeDef result;
|
||||||
if(onewire == NULL)
|
if(onewire == NULL)
|
||||||
return HAL_ERROR;
|
return HAL_ERROR;
|
||||||
if(sensor == NULL)
|
if(sensor == NULL)
|
||||||
return HAL_ERROR;
|
return HAL_ERROR;
|
||||||
if(location == NULL)
|
if(location == NULL)
|
||||||
return HAL_ERROR;
|
return HAL_ERROR;
|
||||||
|
|
||||||
PCHSens_LocationTypeDef initlocation = *location;
|
|
||||||
|
|
||||||
sensor->Location = (PCHSens_LocationTypeDef *)&sensor->sens.scratchpad.tHighRegister;
|
sensor->Location = (PCHSens_LocationTypeDef *)&sensor->sens.scratchpad.tHighRegister;
|
||||||
|
|
||||||
sensor->sens.Init.UserBytes12 = initlocation.all;
|
sensor->sens.Init.UserBytes12 = location;
|
||||||
|
|
||||||
sensor->sens.Init.init_func = &Dallas_SensorInitByUserBytes;
|
sensor->sens.Init.init_func = &Dallas_SensorInitByUserBytes;
|
||||||
|
|
||||||
return Dallas_AddNewSensors(onewire, &sensor->sens);
|
result = Dallas_AddNewSensors(onewire, &sensor->sens);
|
||||||
|
|
||||||
|
if(result == HAL_OK)
|
||||||
|
sensor->not_found = 0;
|
||||||
|
else
|
||||||
|
sensor->not_found = 1;
|
||||||
|
|
||||||
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
HAL_StatusTypeDef PCHSens_FindModule(OneWire_t *onewire, PCHSens_ModuleTypeDef* module, PCHSens_LocationTypeDef *location, uint8_t init)
|
HAL_StatusTypeDef PCHSens_InitModule(OneWire_t *onewire, PCHSens_ModuleTypeDef* module, uint16_t location, uint8_t init)
|
||||||
{
|
{
|
||||||
if(onewire == NULL)
|
if(onewire == NULL)
|
||||||
return HAL_ERROR;
|
return HAL_ERROR;
|
||||||
if(module == NULL)
|
if(module == NULL)
|
||||||
return HAL_ERROR;
|
return HAL_ERROR;
|
||||||
|
|
||||||
PCHSens_LocationTypeDef initlocation = *location;
|
PCHSens_LocationTypeDef initlocation;
|
||||||
|
initlocation.all = location;
|
||||||
|
|
||||||
module->onewire = onewire;
|
module->onewire = onewire;
|
||||||
module->refLocation = initlocation;
|
module->refLocation = initlocation;
|
||||||
@@ -85,54 +134,109 @@ HAL_StatusTypeDef PCHSens_FindModule(OneWire_t *onewire, PCHSens_ModuleTypeDef*
|
|||||||
if(init == 0)
|
if(init == 0)
|
||||||
{
|
{
|
||||||
initlocation.location.Location = 0;
|
initlocation.location.Location = 0;
|
||||||
PCHSens_FindSensor(onewire, &module->sens1, &initlocation);
|
PCHSens_AddSensor(onewire, &module->sens1, initlocation.all);
|
||||||
|
|
||||||
initlocation.location.Location = 1;
|
initlocation.location.Location = 1;
|
||||||
PCHSens_FindSensor(onewire, &module->sens2, &initlocation);
|
PCHSens_AddSensor(onewire, &module->sens2, initlocation.all);
|
||||||
|
|
||||||
initlocation.location.Location = 2;
|
initlocation.location.Location = 2;
|
||||||
PCHSens_FindSensor(onewire, &module->sens3, &initlocation);
|
PCHSens_AddSensor(onewire, &module->sens3, initlocation.all);
|
||||||
|
|
||||||
initlocation.location.Location = 3;
|
initlocation.location.Location = 3;
|
||||||
PCHSens_FindSensor(onewire, &module->sens4, &initlocation);
|
PCHSens_AddSensor(onewire, &module->sens4, initlocation.all);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
uint64_t ROM = 0x28366a48f6563c8d;
|
uint64_t ROM = 0x28366a48f6563c8d;
|
||||||
initlocation.location.Location = 0;
|
initlocation.location.Location = 0;
|
||||||
PCHSens_InitNewSensor(onewire, &module->sens1, ROM, &initlocation);
|
PCHSens_InitNewSensor(onewire, &module->sens1, ROM, initlocation.all);
|
||||||
|
|
||||||
ROM = 0x28CF5248F6BB3C2F;
|
ROM = 0x28CF5248F6BB3C2F;
|
||||||
initlocation.location.Location = 1;
|
initlocation.location.Location = 1;
|
||||||
PCHSens_InitNewSensor(onewire, &module->sens2, ROM, &initlocation);
|
PCHSens_InitNewSensor(onewire, &module->sens2, ROM, initlocation.all);
|
||||||
|
|
||||||
ROM = 0x28876D60060000CD;
|
ROM = 0x28876D60060000CD;
|
||||||
initlocation.location.Location = 2;
|
initlocation.location.Location = 2;
|
||||||
PCHSens_InitNewSensor(onewire, &module->sens3, ROM, &initlocation);
|
PCHSens_InitNewSensor(onewire, &module->sens3, ROM, initlocation.all);
|
||||||
|
|
||||||
ROM = 0;
|
ROM = 0;
|
||||||
initlocation.location.Location = 3;
|
initlocation.location.Location = 3;
|
||||||
PCHSens_InitNewSensor(onewire, &module->sens4, ROM, &initlocation);
|
PCHSens_InitNewSensor(onewire, &module->sens4, ROM, initlocation.all);
|
||||||
}
|
}
|
||||||
return HAL_OK;
|
return HAL_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
HAL_StatusTypeDef PCHSens_ReadModuleTemperature(PCHSens_ModuleTypeDef *module)
|
HAL_StatusTypeDef PCHSens_ReadTemperature(PCHSens_ModuleTypeDef *module)
|
||||||
{
|
{
|
||||||
HAL_StatusTypeDef result;
|
HAL_StatusTypeDef result;
|
||||||
|
|
||||||
|
if(module == NULL)
|
||||||
|
return HAL_ERROR;
|
||||||
|
|
||||||
result = Dallas_StartConvertTAll(module->onewire, DALLAS_WAIT_BUS, 0);
|
result = Dallas_StartConvertTAll(module->onewire, DALLAS_WAIT_BUS, 0);
|
||||||
|
|
||||||
result = Dallas_ReadTemperature(&module->sens1.sens);
|
result = Dallas_ReadTemperature(&module->sens1.sens);
|
||||||
|
if(result != HAL_OK)
|
||||||
|
PCHSens_CheckSensor(module->onewire, &module->sens1);
|
||||||
|
|
||||||
result = Dallas_ReadTemperature(&module->sens2.sens);
|
result = Dallas_ReadTemperature(&module->sens2.sens);
|
||||||
|
if(result != HAL_OK)
|
||||||
|
PCHSens_CheckSensor(module->onewire, &module->sens1);
|
||||||
|
|
||||||
result = Dallas_ReadTemperature(&module->sens3.sens);
|
result = Dallas_ReadTemperature(&module->sens3.sens);
|
||||||
|
if(result != HAL_OK)
|
||||||
|
PCHSens_CheckSensor(module->onewire, &module->sens1);
|
||||||
|
|
||||||
result = Dallas_ReadTemperature(&module->sens4.sens);
|
result = Dallas_ReadTemperature(&module->sens4.sens);
|
||||||
|
if(result != HAL_OK)
|
||||||
|
PCHSens_CheckSensor(module->onewire, &module->sens1);
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
void Dallas_FirstInit(void)
|
|
||||||
|
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.location.Location = 0;
|
||||||
|
if(Dallas_ReplaceLostedSensor(&sensor->sens) != HAL_OK)
|
||||||
|
{
|
||||||
|
sensor->not_found = 1;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
sensor->not_found = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return HAL_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
HAL_StatusTypeDef PCHSens_DefineUnknownSensor(PCHSens_UnknownSensorsTypeDef *unknowns, PCHSens_SensorTypeDef *sensor)
|
||||||
|
{
|
||||||
|
HAL_StatusTypeDef result;
|
||||||
|
if(unknowns->UnknownCnt == 0)
|
||||||
|
return HAL_OK;
|
||||||
|
|
||||||
|
if((unknowns->ROMtoDefine != NULL) && (unknowns->LocationtoDefine.all != NULL))
|
||||||
|
{
|
||||||
|
result = PCHSens_InitNewSensor(unknowns->onewire, sensor, unknowns->ROMtoDefine, unknowns->LocationtoDefine.all);
|
||||||
|
}
|
||||||
|
return HAL_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
void PCHSens_FirstInit(void)
|
||||||
{
|
{
|
||||||
int init_find = 0;
|
int init_find = 0;
|
||||||
OW.DataPin = DS_Pin;
|
OW.DataPin = DS_Pin;
|
||||||
@@ -142,12 +246,9 @@ void Dallas_FirstInit(void)
|
|||||||
OneWire_Init(&OW);
|
OneWire_Init(&OW);
|
||||||
DS18B20_Search(&DS, &OW);
|
DS18B20_Search(&DS, &OW);
|
||||||
|
|
||||||
|
PCHSens_InitModule(&OW, &module1, REG_PCH_NUMB_11|REG_PCH_DIODE_NUMB_1, init_find);
|
||||||
|
|
||||||
PCHSens_LocationTypeDef location;
|
PCHSens_FindUnknownSensors(&OW, &UnknownSensors);
|
||||||
location.all = REG_PCH_NUMB_11|REG_PCH_DIODE_NUMB_1;
|
|
||||||
PCHSens_FindModule(&OW, &module1, &location, init_find);
|
|
||||||
|
|
||||||
|
|
||||||
// Dallas_SensorInitByInd(&OW, &AllSens.outdoor, 0);
|
// Dallas_SensorInitByInd(&OW, &AllSens.outdoor, 0);
|
||||||
// Dallas_SensorInitByInd(&OW, &AllSens.indoor, 2);
|
// Dallas_SensorInitByInd(&OW, &AllSens.indoor, 2);
|
||||||
// Dallas_SensorInitByInd(&OW, &AllSens.bathroom, 1);
|
// Dallas_SensorInitByInd(&OW, &AllSens.bathroom, 1);
|
||||||
|
|||||||
@@ -16,20 +16,20 @@
|
|||||||
|
|
||||||
/* Declarations and definitions ---------------------------------------------*/
|
/* Declarations and definitions ---------------------------------------------*/
|
||||||
|
|
||||||
/* Ïîçèöèè ïàðàìåòðîâ â ROM */
|
/* Ïîçèöèè ïàðàìåòðîâ â UserBytes */
|
||||||
#define REG_SENS_LOCATION_Pos (0) /*!< @brief Ïîçèöèÿ ïàðàìåòðà "Ëîêàöèÿ âíóòðè ìîäóëÿ" */
|
#define REG_SENS_LOCATION_Pos (0) /*!< @brief Ïîçèöèÿ ïàðàìåòðà "Ëîêàöèÿ âíóòðè ìîäóëÿ" */
|
||||||
|
|
||||||
#define REG_PCH_LOCATION_Pos (8) /*!< @brief Ïîçèöèÿ ïàðàìåòðà "Ðàñïîëîæåíèå â Ï×" */
|
#define REG_PCH_LOCATION_Pos (8) /*!< @brief Ïîçèöèÿ ïàðàìåòðà "Ðàñïîëîæåíèå â Ï×" */
|
||||||
#define REG_PCH_DIOD_PHASE_Pos (10) /*!< @brief Ïîçèöèÿ ïàðàìåòðà "Äèîäíûé èëè ôàçíûé ìîäóëü" */
|
#define REG_PCH_DIOD_PHASE_Pos (10) /*!< @brief Ïîçèöèÿ ïàðàìåòðà "Äèîäíûé èëè ôàçíûé ìîäóëü" @ref REG_PCH_LOCATION_Pos */
|
||||||
#define REG_PCH_MODULE_NUMB_Pos (8) /*!< @brief Ïîçèöèÿ ïàðàìåòðà "Ïîðÿäêîâûé íîìåð äèîäíîãî/ôàçíîãî ìîäóëÿ" */
|
#define REG_PCH_MODULE_NUMB_Pos (8) /*!< @brief Ïîçèöèÿ ïàðàìåòðà "Ïîðÿäêîâûé íîìåð äèîäíîãî/ôàçíîãî ìîäóëÿ" @ref REG_PCH_LOCATION_Pos */
|
||||||
|
|
||||||
#define REG_PCH_NUMB_Pos (11) /*!< @brief Ïîçèöèÿ ïàðàìåòðà "Ïðåîáðàçîâàòåëü ÷àñòîòû" */
|
#define REG_PCH_NUMB_Pos (11) /*!< @brief Ïîçèöèÿ ïàðàìåòðà "Ïðåîáðàçîâàòåëü ÷àñòîòû" */
|
||||||
#define REG_PCH_NUMB_DIGIT_1_Pos (13) /*!< @brief Ïîçèöèÿ ïàðàìåòðà "Ïåðâàÿ öèôðà íîìåðà ïðåîáðàçîâàòåëÿ ÷àñòîòû" */
|
#define REG_PCH_NUMB_DIGIT_1_Pos (13) /*!< @brief Ïîçèöèÿ ïàðàìåòðà "Ïåðâàÿ öèôðà íîìåðà ïðåîáðàçîâàòåëÿ ÷àñòîòû" @ref REG_PCH_NUMB_Pos */
|
||||||
#define REG_PCH_NUMB_DIGIT_2_Pos (11) /*!< @brief Ïîçèöèÿ ïàðàìåòðà "Âòîðàÿ öèôðà íîìåðà ïðåîáðàçîâàòåëÿ ÷àñòîòû" */
|
#define REG_PCH_NUMB_DIGIT_2_Pos (11) /*!< @brief Ïîçèöèÿ ïàðàìåòðà "Âòîðàÿ öèôðà íîìåðà ïðåîáðàçîâàòåëÿ ÷àñòîòû" @ref REG_PCH_NUMB_Pos */
|
||||||
|
|
||||||
#define REG_ZIP_Pos (15) /*!< @brief Ïîçèöèÿ ïàðàìåòðà "ÇÈÏ/íå ÇÈÏ" */
|
#define REG_ZIP_Pos (15) /*!< @brief Ïîçèöèÿ ïàðàìåòðà "ÇÈÏ/íå ÇÈÏ" */
|
||||||
|
|
||||||
/* Ìàñêè ïàðàìåòðîâ â ROM */
|
/* Ìàñêè ïàðàìåòðîâ â UserBytes */
|
||||||
#define REG_SENS_LOCATION_Mask ((uint16_t)0x3 << REG_SENS_LOCATION_Pos) /*!< @brief Ìàñêà ïàðàìåòðà "Ëîêàöèÿ âíóòðè ìîäóëÿ" */
|
#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_LOCATION_Mask ((uint16_t)0x7 << REG_PCH_LOCATION_Pos) /*!< @brief Ìàñêà ïàðàìåòðà "Ðàñïîëîæåíèå â Ï×" */
|
||||||
@@ -42,7 +42,7 @@
|
|||||||
|
|
||||||
#define REG_ZIP_Mask ((uint16_t)0x1 << REG_ZIP_Pos) /*!< @brief Ìàñêà ïàðàìåòðà "ÇÈÏ/íå ÇÈÏ" */
|
#define REG_ZIP_Mask ((uint16_t)0x1 << REG_ZIP_Pos) /*!< @brief Ìàñêà ïàðàìåòðà "ÇÈÏ/íå ÇÈÏ" */
|
||||||
|
|
||||||
/* Âàðèàíòû ïàðàìåòðîâ â ROM */
|
/* Âàðèàíòû ïàðàìåòðîâ â UserBytes */
|
||||||
#define REG_PCH_NUMB_11 ((1 << REG_PCH_NUMB_DIGIT_1_Pos) | (1 << REG_PCH_NUMB_DIGIT_2_Pos))
|
#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_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_13 ((1 << REG_PCH_NUMB_DIGIT_1_Pos) | (3 << REG_PCH_NUMB_DIGIT_2_Pos))
|
||||||
@@ -57,19 +57,50 @@
|
|||||||
#define REG_PCH_PHASE_NUMB_2 ((1 << REG_PCH_DIOD_PHASE_Pos) | (2 << 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))
|
#define REG_PCH_PHASE_NUMB_3 ((1 << REG_PCH_DIOD_PHASE_Pos) | (3 << REG_PCH_MODULE_NUMB_Pos))
|
||||||
|
|
||||||
/* Ïîëó÷èòü ïàðàìåòð èç ROM */
|
/* Ïîëó÷èòü ïàðàìåòð èç UserBytes */
|
||||||
#define GET_REG_SENS_LOCATION(_REG_) ((_REG_) & REG_SENS_LOCATION_Mask) /*!< @brief Ìàñêà ïàðàìåòðà "Ëîêàöèÿ âíóòðè ìîäóëÿ" */
|
#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_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_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_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(_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_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_PCH_NUMB_DIGIT_2(_REG_) ((_REG_) & REG_PCH_NUMB_DIGIT_2_Mask) /*!< @brief Ïîëó÷èòü ïàðàìåòð "Âòîðàÿ öèôðà íîìåðà ïðåîáðàçîâàòåëÿ ÷àñòîòû" */
|
||||||
|
|
||||||
#define GET_REG_ZIP(_REG_) ((_REG_) & REG_ZIP_Mask) /*!< @brief Ìàñêà ïàðàìåòðà "ÇÈÏ/íå ÇÈÏ" */
|
#define GET_REG_ZIP(_REG_) ((_REG_) & REG_ZIP_Mask) /*!< @brief Ïîëó÷èòü ïàðàìåòð "ÇÈÏ/íå ÇÈÏ" */
|
||||||
|
|
||||||
|
/* Äèàïàçîíû ïàðàìåòðîâ èç UserBytes */
|
||||||
|
#define REG_SENS_LOCATION_MAX 4
|
||||||
|
#define REG_SENS_LOCATION_MIN 1
|
||||||
|
#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_)->location.Location <= REG_SENS_LOCATION_MAX) && ((_REG_)->location.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_)->location.DiodeOrPhase <= REG_PCH_DIOD_PHASE_MAX) && ((_REG_)->location.DiodeOrPhase >= REG_PCH_DIOD_PHASE_MIN))
|
||||||
|
/*!< @brief Ïîëó÷èòü ïàðàìåòð "Ïîðÿäêîâûé íîìåð äèîäíîãî/ôàçíîãî ìîäóëÿ" */
|
||||||
|
#define IS_REG_PCH_MODULE_NUMB(_REG_) (((_REG_)->location.ModuleNumb <= REG_PCH_MODULE_NUMB_MAX) && ((_REG_)->location.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_)->location.PCHdig1 <= REG_PCH_NUMB_DIGIT_1_MAX) && ((_REG_)->location.PCHdig1 >= REG_PCH_NUMB_DIGIT_1_MIN))
|
||||||
|
/*!< @brief Ïîëó÷èòü ïàðàìåòð "Âòîðàÿ öèôðà íîìåðà ïðåîáðàçîâàòåëÿ ÷àñòîòû" s*/
|
||||||
|
#define IS_REG_PCH_NUMB_DIGIT_2(_REG_) (((_REG_)->location.PCHdig2 <= REG_PCH_NUMB_DIGIT_2_MAX) && ((_REG_)->location.PCHdig2 >= REG_PCH_NUMB_DIGIT_2_MIN))
|
||||||
|
/*!< @brief Ïîëó÷èòü ïàðàìåòð "ÇÈÏ/íå ÇÈÏ" */
|
||||||
|
#define IS_REG_ZIP(_REG_) (GET_REG_ZIP(_REG_))
|
||||||
|
|
||||||
typedef union
|
typedef union
|
||||||
{
|
{
|
||||||
@@ -91,27 +122,41 @@ typedef struct
|
|||||||
{
|
{
|
||||||
DALLAS_HandleTypeDef sens;
|
DALLAS_HandleTypeDef sens;
|
||||||
PCHSens_LocationTypeDef *Location;
|
PCHSens_LocationTypeDef *Location;
|
||||||
}PCH_SensorTypeDef;
|
unsigned not_found:1;
|
||||||
|
}PCHSens_SensorTypeDef;
|
||||||
|
|
||||||
typedef struct
|
typedef struct
|
||||||
{
|
{
|
||||||
OneWire_t *onewire;
|
OneWire_t *onewire;
|
||||||
|
|
||||||
PCH_SensorTypeDef sens1;
|
PCHSens_SensorTypeDef sens1;
|
||||||
PCH_SensorTypeDef sens2;
|
PCHSens_SensorTypeDef sens2;
|
||||||
PCH_SensorTypeDef sens3;
|
PCHSens_SensorTypeDef sens3;
|
||||||
PCH_SensorTypeDef sens4;
|
PCHSens_SensorTypeDef sens4;
|
||||||
|
|
||||||
|
PCHSens_LocationTypeDef refLocation;
|
||||||
|
|
||||||
PCHSens_LocationTypeDef refLocation;
|
|
||||||
}PCHSens_ModuleTypeDef;
|
}PCHSens_ModuleTypeDef;
|
||||||
extern PCHSens_ModuleTypeDef module1;
|
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_UnknownSensorsTypeDef;
|
||||||
|
|
||||||
|
|
||||||
/* Functions ---------------------------------------------------------------*/
|
/* Functions ---------------------------------------------------------------*/
|
||||||
HAL_StatusTypeDef PCHSens_InitNewSensor(OneWire_t *onewire, PCH_SensorTypeDef* sensor, uint64_t ROM, PCHSens_LocationTypeDef *location);
|
HAL_StatusTypeDef PCHSens_FindUnknownSensors(OneWire_t *onewire, PCHSens_UnknownSensorsTypeDef *unknowns);
|
||||||
HAL_StatusTypeDef PCHSens_FindSensor(OneWire_t *onewire, PCH_SensorTypeDef* sensor, PCHSens_LocationTypeDef *location);
|
HAL_StatusTypeDef PCHSens_InitNewSensor(OneWire_t *onewire, PCHSens_SensorTypeDef* sensor, uint64_t ROM, uint16_t location);
|
||||||
HAL_StatusTypeDef PCHSens_FindModule(OneWire_t *onewire, PCHSens_ModuleTypeDef* module, PCHSens_LocationTypeDef *location, uint8_t init);
|
HAL_StatusTypeDef PCHSens_AddSensor(OneWire_t *onewire, PCHSens_SensorTypeDef* sensor, uint16_t location);
|
||||||
HAL_StatusTypeDef PCHSens_ReadModuleTemperature(PCHSens_ModuleTypeDef *module);
|
HAL_StatusTypeDef PCHSens_InitModule(OneWire_t *onewire, PCHSens_ModuleTypeDef* module, uint16_t location, uint8_t init);
|
||||||
|
HAL_StatusTypeDef PCHSens_ReadTemperature(PCHSens_ModuleTypeDef *module);
|
||||||
|
HAL_StatusTypeDef PCHSens_CheckSensor(OneWire_t *onewire, PCHSens_SensorTypeDef* sensor);
|
||||||
|
|
||||||
void Dallas_FirstInit(void);
|
void PCHSens_FirstInit(void);
|
||||||
#endif // #ifndef PCH_SENSORS_H
|
#endif // #ifndef PCH_SENSORS_H
|
||||||
@@ -96,14 +96,14 @@ 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)
|
||||||
{
|
{
|
||||||
PCHSens_ReadModuleTemperature(&module1);
|
PCHSens_ReadTemperature(&module1);
|
||||||
// Dallas_ReadAll();
|
// 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);
|
||||||
|
|||||||
@@ -145,43 +145,10 @@
|
|||||||
<SetRegEntry>
|
<SetRegEntry>
|
||||||
<Number>0</Number>
|
<Number>0</Number>
|
||||||
<Key>ST-LINKIII-KEIL_SWO</Key>
|
<Key>ST-LINKIII-KEIL_SWO</Key>
|
||||||
<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(2BA01477) -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>294</LineNumber>
|
|
||||||
<EnabledFlag>1</EnabledFlag>
|
|
||||||
<Address>134220332</Address>
|
|
||||||
<ByteObject>0</ByteObject>
|
|
||||||
<HtxType>0</HtxType>
|
|
||||||
<ManyObjects>0</ManyObjects>
|
|
||||||
<SizeOfObject>0</SizeOfObject>
|
|
||||||
<BreakByAccess>0</BreakByAccess>
|
|
||||||
<BreakIfRCount>1</BreakIfRCount>
|
|
||||||
<Filename>..\..\DS18B20\dallas_tools.c</Filename>
|
|
||||||
<ExecCommand></ExecCommand>
|
|
||||||
<Expression>\\ds18b20\../../DS18B20/dallas_tools.c\294</Expression>
|
|
||||||
</Bp>
|
|
||||||
<Bp>
|
|
||||||
<Number>1</Number>
|
|
||||||
<Type>0</Type>
|
|
||||||
<LineNumber>291</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>
|
||||||
|
|||||||
Reference in New Issue
Block a user