Вы не поняли. Если была ошибка, то она не совпадёт. А вот если ошибки не было, а Вы просто решили прочитать температуру не запуская конверсию, то … что тут скажешь, Вы сам себе злобный буратино, но эта проблема надумана.
Что это реальная температура можно повысить достоверность только многократными измерениями. То, что датчик перезагрузился, вероятно можно по изменению других регистров. При штатной перезагрузке они копируются из EEPROM и если при инициализации датчика их изменить, но не записывать в EEPROM, то возврат к значению из EEPROM означает перезагрузку.
я просто рассматриваю такой вариант если температура стоит на 85 градусах ровно (реальная), допустим 10 измерений, далее будет выдаем ошибку, а температура была реальная
это придется каждый датчик калибровать, сопротивление не идеальное, с цифровыми проще
Да, не прочитается ничего если датчик перезагрузился. Чтобы что-то начало читаться надо инициализировать соединение.
И вообще нормальные люди делают это подряд: инициализация, выбор адреса, чтение.
Проблема надумана, я Вам уже написал.
Просто попробуйте её реально воспроизвести. Запустите, проинициализируйте, разорвите и восстановите питания датчика и прочитайте температуру. И нам расскажете.
Следующий вопрос будет “почему зависает МК при разрыве питания датчика?” ))
вы уже не в ту степь, вопрос был в другом, никаких проблем нет
При внешнем питании есть возможность контролировать процесс конвертирования темп-ры датчиком.
“after the Convert T command and
the DS18B20 will respond by transmitting 0 while the temperature conversion is in progress and 1 when the conversion is done.”
Если датчик не изменяет состояние шины в установленное время - значит данные неверны. Я думаю, если есть повышенные требования к точности, надо использовать эту возможность
вот это уже дельный ответ, спасибо, поизучаю
А если действительно нужна повышенная надёжность - ставьте два датчика в одно место, благо шина позволяет это без проблем сделать))
о таких вариантах читал
Така температура не возникает внезапно и точно. Смотрите какой скачок, и если он больше допуска, то это ошибка, а если тренд, то истинная.
не надо придумывать того, чего не бывает в реальной жизни, на 12 битном разрешении этого не может быть никогда, а если отдало ровно 85 перечитай ещё раз
0000 0000 0000 0000 соответствует 0
разрешение минимальное 0,0625 градуса
1360*0,0625=85 = 0000 0101 0101 0000
вот такие биты выдает датчик когда + питание отсоеденить (он то работает то показывает 85)
0=0x50, 1=0x05, 6=0x0C
лабораторным блоком питания держа температуру 85 градусов, на 6 бите такого значения поймать ни разу не удалось
Чего нуль? Градусов? А вы уверены, что в этом случае получите сплошные нули?
bool DS1820::checkData(uint8_t *data)
{
// проверка данных на валидность - сначала по контрольной сумме;
// в случае отсутствия датчика data[] заполняется нулями, поэтому
// проверка CRC ничего не даст - CRC суммы нулей равно нулю, а
// именно нуль будет записан в ячейке CRC массива data[] в этом
// случае; поэтому проверяем ячейку, в которой указано разрешение
// конвертации, оно нулю равняться не должно
bool result = sscDS18b20.crc8(data, 8) == data[8];
if (result && data[8] == 0)
{
result = (!type_c && data[7] != 0x00) && (type_c && data[4] != 0x00);
}
return (result);
}
он вроде может и на паразитном питании работать?
Эксперимент некорректный и ни о чём не говорит. Вы не отсоединяете питание, а переводите на паразитное. Корректный эксперимент я Вам описывал:
- Проведите инициализацию
- Вытащите его из макетки целиком
- Воткните на место
- Прочитайте данные
Ваша проблема надумана от начала и до конца.
если её не придумать, то героически преодолевать не придётся, если уж совсем неймется - два датчика в параллель, за счет разброса параметров точно можно диагностировать неисправность
