|
Забавное поведение датчика BS18B20 |
|
|
|
Dec 1 2011, 06:16
|

Познающий...
     
Группа: Свой
Сообщений: 2 963
Регистрация: 1-09-05
Из: г. Иркутск
Пользователь №: 8 125

|
Здравствуйте! Датчик DS18B20 подключен к AVR'ке проводом длиной 50 см. Система находится на улице и подключена к компьютеру через интерфейс RS485. При чтении температуры иногда появляются ошибки. На улице -15, термометр показывает -3. Иногда появляются ошибки в контрольной сумме, но значение температуры верные, но это бывает очень редко (ошибка КС). Поскольку КС можно сказать, что сходится всегда, возникает вопрос, почему датчик выдает ошибочную отрицательную температуру? С положительной все ОК. Преобразование из дополнительного кода проводится правильно, т.к. иногда отрицательная температура читает правильно. Не могу уловить зависимость между правильными и неправильными показаниями. Что еще интересно, по умолчанию при включении питания датчик настроен на 12-ти разрядный результат, что определяется конфигурационным регистром в "скратчпаде" (он равен после сброса питания 7F). Спустя некоторое время его значение становится 5F, хотя я не использую команду записи в "скратчпад". Далее в документации на датчик написано, что байты 5 - 7 (считаем от нуля) имеют вполне определенные значения: FF, 0C, 10. Так вот, 5 и 7 читаются как надо, всегда причем, а 6 - изредко 0C, а так 04, 08.... Меняется иногда вместе с изменением температуры.
Да, как бы есть едва угадываемая закономерность: чем меньше температура (ближе к -14, -15), тем вероятнее ошибка. Но у нас на улице сейчас -8, так что пока все ОК, и нет возможности проверить гипотезу.
Теряюсь в догадках, думал датчик другой стоит (DS1820, DS18S20), но нет, проверил, все ок.
Заранее благодарен за любые советы!
--------------------
Выбор.
|
|
|
|
|
 |
Ответов
(60 - 64)
|
Jan 7 2013, 18:35
|

Профессионал
    
Группа: Свой
Сообщений: 1 940
Регистрация: 16-12-07
Из: Москва
Пользователь №: 33 339

|
Цитата 2. датчики ОЧЕНЬ ЧУВСТВИТЕЛЬНЫЕ Вот!! Ваши слова да Богу в уши. Т.е. мне. Чуть раньше. На фото датчики расположены перпендикулярно батарее с личной температурой +56,72 С (замерено DS18B20) . На расстоянии ~ 40 см. - этого вполне хватало при 12 битном разрешении для такого разброса. Повернул их параллельно - раброс 0,1 - 0,2. Цитата 3. датчики всегда саморазогреваются при постоянном поданном питании...следует ожидать завышение температуры на 2-4 градуса Что-то DS и APP об этом молчат или не нашёл? Цитата arv.radioliga.com  Добавил в закладки. Цитата Я в таком случае выводил "голые" дампы с датчиков, кстати , твоя мысль натолкнула подключиться к терминалке через MAX232 , так что видел весь обмен с датчиками побитно. За , что тебе отдельное спасибо!
--------------------
Закон Мерфи:
Чем тщательнее составлен проект, тем больше неразбериха, если что-то пошло не так
|
|
|
|
|
Mar 27 2013, 21:58
|
Местный
  
Группа: Участник
Сообщений: 235
Регистрация: 20-11-10
Пользователь №: 61 032

|
ds18b20 (ds18b20+ ?) никаких паразитов, никаких стометровых лапшей по промзонам, всеми тремя ногами воткнуто напрямую в клеммы на плате, столе и в обычной жилой комнате
а). инициализация:
reset pulse 0xCC = "Skip ROM"
0x4E ... ""Write (to) Scratchpad" 0b01111101 ... "T low" 0b11001001 ..."T high" 0b01111111 ... 12 бит, т.е. разрешение 0.0625 градуса
reset pulse 0xCC ... "Skip ROM"
0x48 ... "Copy (from) Scratchpad (to EEPROM)"
б). раз в секунду:
reset pulse 0xCC ... "Skip ROM" 0xBE ... "Read Scratchpad", контрольная сумма сходится (или криво посчитана, но даже если - интерес не в ней, а далее по тексту)
reset pulse 0xCC ... "Skip ROM" 0x44 ... "Convert T"
в). дунул феном на датчик, убрал фен, датчик медленно остывает, внимательно смотрю на данные с него около 32 градусов:
10 0000 0000 = 32.0 С
01 1111 1111 = 31.9 С ___ 10 1111 1111 = 47.9 С ... старший байт так и остался
01 1111 1110 = 31.8 С ___ 10 1111 1110 = 47.8 С ... старший байт так и остался
01 1111 1101 = 31.7 С ___ 10 1111 1101 = 47.7 С ... старший байт так и остался 01 1111 1100 = 31.6 С ... старший байт просра актуализировался на конец и далее остывает уже без вопросов
Так артефакт замечен при охлаждении конкретно на отметке 32.0 градуса ("сырые" с датчика двоичные данные соответственно и внимательно): старший байт обновляется с опозданием относительно младшего байта. Стабильно и повторяемо происходит. В обратную сторону (при нагреве от 31 до 32+ градусов) всё выглядит прилично... но при быстром нагреве артефакт получается тоже. Но менее удобным для рассмотрения и осознавания.
На физический смысл артефакта имело бы смысл взмедитнуть через разъяснение интерфейса протокола библиотеки для принципа действия датчика внутри. Где-то раньше попадалось мне такое разъяснение, но потерял его я - и осталось в в гугле моём по теме только про интерфейсы с библиотеками теперь. И всё это го оно разное одинаковое уныло, даже с пересказами на русский язык.
Сообщение отредактировал нечитатель - Mar 27 2013, 23:22
|
|
|
|
|
Mar 28 2013, 05:54
|
Гуру
     
Группа: Свой
Сообщений: 2 724
Регистрация: 14-05-07
Из: Ярославль, Россия
Пользователь №: 27 702

|
Цитата(нечитатель @ Mar 28 2013, 01:58)  ds18b20 (ds18b20+ ?) никаких паразитов, никаких стометровых лапшей по промзонам, всеми тремя ногами воткнуто напрямую в клеммы на плате, столе и в обычной жилой комнате ... 0b01111111 ... 12 бит, т.е. разрешение 0.0625 градуса ... раз в секунду: Преобразование при такой разрядности занимает время порядка секунды (750мс). Вполне можно нарваться на пограничное значение, что преобразование еще не закончилось, а результат уже считывается. Попробуйте увеличить задержку до 10 секунд - опрашивать этот датчик все равно часто не нужно, поскольку будет саморазогрев. Ну, и тайминги слотов проверить - может не правильно различаются "0" и "1". Кстати, CRC совпадает?
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|