Работает:
- переделан ROM, теперь это 64-битное число, а не массив - при замене датчиков на другие с уже записанной локацией - они автоматически определяются и подключаются в нужные структуры - если что-то не определилось, то можно переписать локацию датчика через элементы в структуре UnknownSensors
This commit is contained in:
@@ -90,14 +90,14 @@ HAL_StatusTypeDef Dallas_SensorInitByROM(OneWire_t *onewire, DALLAS_HandleTypeDe
|
||||
return HAL_ERROR;
|
||||
|
||||
uint8_t ROM[8] = {0};
|
||||
ROM[0] = (sensor->Init.ROM >> (7*8)) & 0xFF;
|
||||
ROM[1] = (sensor->Init.ROM >> (6*8)) & 0xFF;
|
||||
ROM[2] = (sensor->Init.ROM >> (5*8)) & 0xFF;
|
||||
ROM[3] = (sensor->Init.ROM >> (4*8)) & 0xFF;
|
||||
ROM[4] = (sensor->Init.ROM >> (3*8)) & 0xFF;
|
||||
ROM[5] = (sensor->Init.ROM >> (2*8)) & 0xFF;
|
||||
ROM[6] = (sensor->Init.ROM >> (1*8)) & 0xFF;
|
||||
ROM[7] = (sensor->Init.ROM) & 0xFF;
|
||||
ROM[0] = (sensor->Init.ROM >> (0*8)) & 0xFF;
|
||||
ROM[1] = (sensor->Init.ROM >> (1*8)) & 0xFF;
|
||||
ROM[2] = (sensor->Init.ROM >> (2*8)) & 0xFF;
|
||||
ROM[3] = (sensor->Init.ROM >> (3*8)) & 0xFF;
|
||||
ROM[4] = (sensor->Init.ROM >> (4*8)) & 0xFF;
|
||||
ROM[5] = (sensor->Init.ROM >> (5*8)) & 0xFF;
|
||||
ROM[6] = (sensor->Init.ROM >> (6*8)) & 0xFF;
|
||||
ROM[7] = (sensor->Init.ROM >> (7*8)) & 0xFF;
|
||||
|
||||
if(DS18B20_IsValidAddress(ROM) != HAL_OK)
|
||||
return HAL_ERROR;
|
||||
@@ -202,7 +202,7 @@ HAL_StatusTypeDef Dallas_SensorInitByUserBytes(OneWire_t *onewire, DALLAS_Handle
|
||||
}
|
||||
}
|
||||
|
||||
memset(&sensor->sensROM, 0, DALLAS_ROM_SIZE);
|
||||
sensor->sensROM = 0;
|
||||
memset(&sensor->scratchpad, 0, sizeof(DALLAS_ScratchpadTypeDef));
|
||||
/* Âîçâðàùàåì îøèáêó åñëè íå íàøëè */
|
||||
return HAL_ERROR;
|
||||
@@ -251,12 +251,13 @@ HAL_StatusTypeDef Dallas_SensorInit(OneWire_t *onewire, DALLAS_HandleTypeDef *se
|
||||
return HAL_ERROR;
|
||||
|
||||
sensor->onewire = onewire;
|
||||
|
||||
for(int i = 0; i < DALLAS_ROM_SIZE; i++)
|
||||
sensor->sensROM[i] = (*ROM)[i];
|
||||
sensor->sensROM = 0;
|
||||
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)
|
||||
{
|
||||
/* Óñòàíîâêà ðàçðåøåíèÿ */
|
||||
@@ -384,7 +385,7 @@ HAL_StatusTypeDef Dallas_ConvertT(DALLAS_HandleTypeDef *sensor, DALLAS_WaitConve
|
||||
return result;
|
||||
|
||||
// Îòïðàâêà êîìàíäû íà÷àëà ïðåîáðàçîâàíèÿ òåìïåðàòóðû
|
||||
result = DS18B20_StartConvT(sensor->onewire, (uint8_t *)sensor->sensROM);
|
||||
result = DS18B20_StartConvT(sensor->onewire, (uint8_t *)&sensor->sensROM);
|
||||
if(result != HAL_OK)
|
||||
{
|
||||
return result;
|
||||
@@ -461,7 +462,7 @@ HAL_StatusTypeDef Dallas_ReadTemperature(DALLAS_HandleTypeDef *sensor)
|
||||
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)
|
||||
{
|
||||
@@ -484,7 +485,7 @@ HAL_StatusTypeDef Dallas_IsConnected(DALLAS_HandleTypeDef *sensor)
|
||||
if(sensor->isInitialized == 0)
|
||||
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)
|
||||
{
|
||||
@@ -528,13 +529,13 @@ HAL_StatusTypeDef Dallas_WriteUserBytes(DALLAS_HandleTypeDef *sensor, uint16_t U
|
||||
if (result != HAL_OK)
|
||||
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)
|
||||
{
|
||||
sensor->f.other_err_cnt++;
|
||||
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)
|
||||
{
|
||||
return result;
|
||||
|
||||
Reference in New Issue
Block a user