|
Забавное поведение датчика 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), но нет, проверил, все ок.
Заранее благодарен за любые советы!
--------------------
Выбор.
|
|
|
|
|
 |
Ответов
(1 - 64)
|
Dec 1 2011, 08:04
|
практикующий тех. волшебник
    
Группа: Участник
Сообщений: 1 190
Регистрация: 9-09-05
Пользователь №: 8 417

|
Цитата(haker_fox @ Dec 1 2011, 10:16)  ...Преобразование из дополнительного кода проводится правильно, т.к. иногда отрицательная температура читает правильно... не факт. прогоните по всему диапазону. для этого есть холодильник (к нулю), через ноль(морозилка) и далее, чайник - выше 30. если преобразования ведутся согласно формуле из даташита - должно всё быть пучком. особенно в плюсовом диапазоне. в минусовом там немного переворачивается - но суть та же. про доп. код станет более понятно если зададитесь вопросом как устроен сам датчик. думаете там АЦП стоит?  у вас доп. код = два числа. один дополнение (сколько не уложилось в квант), второе - собственно сам квант. квант подстраивается под внешнии условия (возможно корректировка стоит) - посему изменяется но не сильно. (круглый)
|
|
|
|
|
Dec 1 2011, 08:27
|

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

|
QUOTE (kolobok0 @ Dec 1 2011, 16:04)  не факт. прогоните по всему диапазону. для этого есть холодильник (к нулю), через ноль(морозилка) и далее, чайник - выше 30. если преобразования ведутся согласно формуле из даташита - должно всё быть пучком. особенно в плюсовом диапазоне. в минусовом там немного переворачивается - но суть та же. про доп. код станет более понятно если зададитесь вопросом как устроен сам датчик. думаете там АЦП стоит?  у вас доп. код = два числа. один дополнение (сколько не уложилось в квант), второе - собственно сам квант. квант подстраивается под внешнии условия (возможно корректировка стоит) - посему изменяется но не сильно. (круглый) В документе на DS18B20 нет формулы) Там же весы (или веса) битов расписаны... Преобразования делаю так: пусть с датчика получен LSB:MSB = 5F:FF. Отбросим дробную часть и "лишние" знаковые биты S коих несколько, получим целую часть F5, что дает -11 гр. Цельсия. Ну с учетом дробной части это будет -10 с копейками. Это неправильно? Я буду рад, если ошибся в алгоритме. Датчики еще в наличие есть, но жаль тратить их))) Кстати, сейчас 6й байт равен 1 (единица). Как выполнять преобразования? В "даташитах" на более старые версии датчиков есть формула, на этот датчик нет... Или я путаю версии датчиков?
--------------------
Выбор.
|
|
|
|
|
Dec 1 2011, 13:24
|

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

|
Вот сейчас на улице -14. С датчика приходит это CODE 1F FF 25 A3 BF FF 0 88 FA Порядок "scratchpad'а" такой же как и в документации. А вот эту КС считает программа CODE 1F CODE FA != 1F Хотя еще 15 минут назад все было ОК, и весь день КС сходилась, температура была правильная. Такое ощущение, что датчик "замерзает", "боится холода"... Вот еще для коллекции данных с датчиков. Температура похоже на верную... КС не сходится... CODE 1D FF 25 A3 BF FF 1 8 FF 1C FF 25 A3 BF 7F 2 88 F4 1B FF 25 A3 BF FF 2 88 F1 1C FF 25 A3 BF 7F 2 88 F4 1B FF 25 A3 BF FF 2 88 F1 1C FF 25 A3 BF 7F 2 88 F4 Что же делать?
--------------------
Выбор.
|
|
|
|
|
Dec 1 2011, 13:53
|

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

|
QUOTE (ILYAUL @ Dec 1 2011, 21:28)  На этот срочно шубу  . Вы же говорили , что есть другой , что будет с ним Другие проверю, но немного позже. Просто мало ли, может быть нечто подобное уже было у кого-нить) З.Ы. Только сейчас опечатку в названии темы заметил)))
--------------------
Выбор.
|
|
|
|
|
Dec 1 2011, 13:54
|
    
Группа: Свой
Сообщений: 1 928
Регистрация: 11-07-06
Пользователь №: 18 731

|
Цитата(haker_fox @ Dec 1 2011, 12:27)  Как выполнять преобразования? Если до 1 С, то T = (signed char) ((Th<<8) | Tl) / 16; Если хочется больше цифр (правда, не знаю зачем, если датчики не калибруются) и не страшна плавучка, то T = (float) ((Th<<8) | Tl) / 16.0; имхо, у Вас программные проблемы с обменом по ванвари. Добейтесь таки устойчивых 0xFF 0x0C 0x10 в скречпаде.
|
|
|
|
|
Dec 1 2011, 13:59
|

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

|
QUOTE (xemul @ Dec 1 2011, 21:54)  имхо, у Вас программные проблемы с обменом по ванвари. Добейтесь таки устойчивых 0xFF 0x0C 0x10 в скречпаде. Возможно, что от низкой температуры плывут параметры интерфейса, и происходят ошибки... Чтож, буду копать. Хотя, стоп! Когда последовательность 0xFF 0x0C 0x10 не наблюдается, КС считается верно, но это бывает, как я уже говорил, не всегда.
--------------------
Выбор.
|
|
|
|
|
Dec 1 2011, 14:16
|
    
Группа: Свой
Сообщений: 1 928
Регистрация: 11-07-06
Пользователь №: 18 731

|
Упс-с, уже забыл. Глянул в ДШ: Цитата Bytes 5, 6, and 7 are reserved for internal use by the device and cannot be overwritten; these bytes will return all 1s when read. Перепутал с 0x05 0x50, которые должны возвращаться в Th:Tl до первого измерения. 0xFF 0x0C 0x10 в 5, 6, 7 байтах также будут только до первого измерения.
|
|
|
|
|
Dec 2 2011, 08:50
|

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

|
QUOTE (-SANYCH- @ Dec 2 2011, 15:50)  1) Не правельное измерение температуры может происходить по пречине просадки напряжения на датчике во время измерения температуры. Гм... ритмика происходящего говорит о том, что это достаточно постоянный, стабильный негативный фактор. Просадки долгими не часто бывают, а у меня нет мощных потребителей на линии. QUOTE (-SANYCH- @ Dec 2 2011, 15:50)  2) Вычитывается температура с датчика раньше чем происходит измерение температуры (измерение температуры происходит порядка 0,8 секунды). Поэтому чаще 1 секунды вычитывать с датчика температуру я бы не рекомендовал. У меня температура считывается раз в 1,5 - 3 сек. QUOTE (-SANYCH- @ Dec 2 2011, 15:50)  Если будет сбоить интерфейс то контрольная сумма не сойдется. Маленько поправил функции обмена по шине. Ждем -15, на улице зима и как назло -12...
--------------------
Выбор.
|
|
|
|
|
Dec 2 2011, 09:42
|
    
Группа: Свой
Сообщений: 1 928
Регистрация: 11-07-06
Пользователь №: 18 731

|
Цитата(haker_fox @ Dec 2 2011, 12:50)  Гм... ритмика происходящего говорит о том, что это достаточно постоянный, стабильный негативный фактор. Просадки долгими не часто бывают, а у меня нет мощных потребителей на линии. У меня получилось, что низкочастотная болтанка по питанию (10..20..50..100 Гц, 3..5 В) не вызывает погрешностей, выходящих за даташитные. Цитата У меня температура считывается раз в 1,5 - 3 сек. Никакого смысла - постоянная времени датчика в still air у меня получилась 30..40 с, - а ошибку от саморазогрева (+2..3 С) получите. Цитата Маленько поправил функции обмена по шине. Ждем -15, на улице зима и как назло -12... А я тогда узнал, что домашний холодильник в режиме экспресс-заморозки может выдавить из себя -24 С.
|
|
|
|
|
Dec 2 2011, 09:54
|

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

|
Похоже датчику придется принести извинения, т.к. если программно (т.е. не отключая питание) перезагрузить устройство, то температура начинает считываться правильная, все ошибки исчезают... ЗНаччит датчик не причем?! Что-то с программой, т.к. на датчике не прерывается питание, просто прекращается обмен на несколько секунд. Программа с применением ОСРВ, теряюсь в догадках. Увеличил стек задача опроса датчика. Критические секции (запрет прерываний) во время опроса датчика имеются. QUOTE (xemul @ Dec 2 2011, 17:42)  Никакого смысла - постоянная времени датчика в still air у меня получилась 30..40 с, - а ошибку от саморазогрева (+2..3 С) получите. Да, смысла нет. Увеличить время опроса не проблема.
--------------------
Выбор.
|
|
|
|
|
Dec 2 2011, 16:26
|

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

|
Цитата(haker_fox @ Dec 2 2011, 13:54)  Похоже датчику придется принести извинения, т.к. если программно (т.е. не отключая питание) перезагрузить устройство, то температура начинает считываться правильная, все ошибки исчезают... ЗНаччит датчик не причем?! Что-то с программой, т.к. на датчике не прерывается питание, просто прекращается обмен на несколько секунд. Так может , это вообще не датчик , а RS485 дурит. Я свой уличный датчик читаю один раз в минуту и то думаю , что это очень часто.
--------------------
Закон Мерфи:
Чем тщательнее составлен проект, тем больше неразбериха, если что-то пошло не так
|
|
|
|
|
Dec 3 2011, 00:50
|

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

|
QUOTE (ILYAUL @ Dec 3 2011, 00:26)  Так может , это вообще не датчик , а RS485 дурит. Я свой уличный датчик читаю один раз в минуту и то думаю , что это очень часто. На 485 не похоже, т.к. кроме температуры читаются другие датчики, их показания верны. Да и протокол с контрольной суммой. Кстати, ошибка КС датчика исчезла. Сегодня утром проверяю температуру - на датчике -15, перезагрузил программно устройство, появилась реальная температура -20. Такое ощущение, что то ли задача перестает выполняться (опрашивать датчик), то ли какие-то сервисы ОС перестают функционировать... данные с датчика как бы "замирают", "замораживаются". Ладно, буду работать дальше... О результатах сообщу, м.б. кому-нибудь и будет полезен этот материал.
--------------------
Выбор.
|
|
|
|
|
Dec 3 2011, 09:14
|

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

|
QUOTE (314 @ Dec 3 2011, 16:20)  А то что у Вас АВР на улицу вынесен, случаем не с длиной проводов связано, в том смысле что на 10м провода сбои появляются, а на 0.5 нормально работает? И датчик с паразитным питанием или полным? На длину проводов не похоже, т.к. идет достаточно частый (каждые 150 мс) обмен с МК, за сутки непрерывной работы 2 ошибки из 46 тыс. переданных и принятых пакетов. Другие датчики нормально опрашиваются. Датчик с полным питанием. И все таки все больше похоже, что низкоприоритетная задача опроса датчика наглухо перестает работать. Выходишь на улицу, дышишь на датчик, держишь его в теплых руках, а программа на компе "исправно" показывает -14. При нормальной работе, показания всегда меняются. Что интересно, задачи более высокого приоритета продолжают работать (там АЦП опрашивается). А задачи приоритетом еще ниже тоже встают, это видно по отсутствию мигания служебного светодиода. Вот так вот я совершенно зря подозревал датчик...)))
--------------------
Выбор.
|
|
|
|
|
Jan 1 2013, 07:44
|

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

|
QUOTE (RabidRabbit @ Jan 1 2013, 16:30)  Либо стека всё же не хватает, либо неверна процедура подсчёта CRC, таковы мои версии  Две разные процедуры подсчета выдают одно и тоже значение вкупе с онлайн-калькуляторомПричем если датчик "погреть" пальцами, то CRC начинает сходится... Я же правильно считаю: 1. Принимаю scratchpad в буфер - 9 байт. 2. Подсчитываю CRC8 для 8 байт буфера. 3. Сравниваю эту КС с 9-м байтом буфера. Уже шарики за ролики заходят)
--------------------
Выбор.
|
|
|
|
|
Jan 1 2013, 09:31
|
Гуру
     
Группа: Свой
Сообщений: 2 724
Регистрация: 14-05-07
Из: Ярославль, Россия
Пользователь №: 27 702

|
Цитата(haker_fox @ Jan 1 2013, 11:44)  Две разные процедуры подсчета выдают одно и тоже значение вкупе с онлайн-калькуляторомПричем если датчик "погреть" пальцами, то CRC начинает сходится... Я же правильно считаю: 1. Принимаю scratchpad в буфер - 9 байт. 2. Подсчитываю CRC8 для 8 байт буфера. 3. Сравниваю эту КС с 9-м байтом буфера. Уже шарики за ролики заходят) А еще бывает, что тайминги "плывут" взависимости от температуры.
|
|
|
|
|
Jan 1 2013, 14:04
|

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

|
QUOTE (Herz @ Jan 1 2013, 21:20)  Да потому что не тем в новогоднее утро занимаетесь. Оно для другого, ИМХО, изобретено. Да нормааааально Я же это с другими делами делаю) Да, похоже, что дело чисто программное. Снова напоролся на свои же грабли. Но я почему вопрос поднял, дело в том, что о этих датчиках известно, что иногда у них слетает EEPROM, либо они просто "погибают". Подобные темы я нашел на этом форуме... Вот и не знал, куда податься....
--------------------
Выбор.
|
|
|
|
|
Jan 2 2013, 23:48
|

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

|
Тоже самое и с полевиками, фронты - мама не горюй , все регистры читаются как положено , даже загонял значения в USER's registers - . Резервные 5 и 8 выдают строго по DS. 6 байт - о котором нет ни слова , каждый раз выдаёт новое значение, хотя на полученной температуре сие не сказывается. Один из трёх (дома на макетке) "уложил в талую воду. Ну скачет температура у датчика +/- 0,0625 ( использую 12 разрядов точность ) , но CRC всё равно не сходится хоть ты ее тресни. Второй обнял ВМР085- и они дружненько так показывают одинаково температуру до запятой , сточностью у них понятненько есть разница. Третий с таким же собратом только от другого проекта , болтаются на улице, и здесь наблюдается единое мнение до 2 знака после запятой. Ну ее на хрен эту CRC.
--------------------
Закон Мерфи:
Чем тщательнее составлен проект, тем больше неразбериха, если что-то пошло не так
|
|
|
|
|
Jan 3 2013, 00:39
|
Гуру
     
Группа: Свой
Сообщений: 2 128
Регистрация: 21-05-06
Пользователь №: 17 322

|
Цитата(ILYAUL @ Jan 3 2013, 01:48)  Ну ее на хрен эту CRC. Как так - на хрен? Тогда уж лучше с плеча - 1-wire на хрен. Если без CRC, то как тогда отличать, где верно, а где нет? P.S. Есть ли адекватная замена 1-wire?
|
|
|
|
|
Jan 3 2013, 10:08
|

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

|
Цитата CRC совпадает C какой точностью работаешь? Цитата Если без CRC, то как тогда отличать, где верно, а где нет? У этих датчиков есть один неприятный момомент , при частом опросе идёт саморазогрев, если CRC не совпало нужно повторить преобразование - чтение. Хорошо , если со второй попытки совпало , а если нет? Я бы не стал доверять такой температуре. У меня в MENU забит пункт - TIMEOUT опроса датчиков. Минимум , который можно задать- 1мин.
--------------------
Закон Мерфи:
Чем тщательнее составлен проект, тем больше неразбериха, если что-то пошло не так
|
|
|
|
|
Jan 3 2013, 11:26
|

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

|
QUOTE (ILYAUL @ Jan 3 2013, 19:08)  C какой точностью работаешь? Та, которая по умолчанию - 12 бит. QUOTE (ILYAUL @ Jan 3 2013, 19:08)  У этих датчиков есть один неприятный момомент , при частом опросе идёт саморазогрев, если CRC не совпало нужно повторить преобразование - чтение. Хорошо , если со второй попытки совпало , а если нет? Я бы не стал доверять такой температуре. У меня в MENU забит пункт - TIMEOUT опроса датчиков. Минимум , который можно задать- 1мин. Я опрашиваю датчики не чаще 30 секунд. Причем интервал разбит на две части: 1. Команда на конвертацию. 2. Пауза 15 сек. 3. Чтение температуры. 4. Пауза 15 сек. 5. Переход к п. 1. Такие паузы пришлось взять по причине использования ОС. А для формирования точной времянке на шине, приходится использовать критические секции (читай запрет прерываний). Чтобы часто систему не вешать - интервал взять большой. По сути для уличного измерения температуры его можно увеличить вплоть до 30 минут, чаще вряд ли оправдано. Для дома (ИМХО) - 1 минута, если датчик работает как противопожарный. И до 10 - 20 минут, если "просто" измеряет. Как-то так)
--------------------
Выбор.
|
|
|
|
|
Jan 3 2013, 12:10
|

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

|
Цитата 1. Команда на конвертацию. + (~)750ms (обычно меньше)= данные. 0xF0 0x55 Rom 0x44 750ms 0xF0 0x55 Rom 0xBE ~= 800ms У меня таймер работает по секундно , очень удобно 1Гц получать из USART-ого кварца. Я это к чему, в течении 1 сек можно конвертировать и прочитать. Зачем Цитата 2. Пауза 15 сек.
--------------------
Закон Мерфи:
Чем тщательнее составлен проект, тем больше неразбериха, если что-то пошло не так
|
|
|
|
|
Jan 4 2013, 15:21
|

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

|
Цитата Жаль в "ходовых" мегах один USART И чему это мешает? 1-USART = N-sensors 1-Wire+4-KNOB(можно больше, но мне не надо)+LCD+(прикручиваю в данный момент)радиомодуль. Требует мультиплексор =1 транзистор +2 сигнала квинтирования. Естественно все используют свои прерывания. Используй 164P- там их два. Если пишешь на С - максимальная версия этой линейки 1284
--------------------
Закон Мерфи:
Чем тщательнее составлен проект, тем больше неразбериха, если что-то пошло не так
|
|
|
|
|
Jan 5 2013, 01:45
|

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

|
QUOTE (ILYAUL @ Jan 5 2013, 00:21)  И чему это мешает? 1-USART = N-sensors 1-Wire+4-KNOB(можно больше, но мне не надо)+LCD+(прикручиваю в данный момент)радиомодуль. Требует мультиплексор =1 транзистор +2 сигнала квинтирования. Естественно все используют свои прерывания. Используй 164P- там их два. Если пишешь на С - максимальная версия этой линейки 1284 Сложно У меня один USART постоянно под RS-485 занят) QUOTE (ILYAUL @ Jan 5 2013, 06:08)  Охренеть ( личная цензура внесла коррективы в это слово) . Чем думал пИсатель этой проги от МАКСИМ. Всё раком. Да уж... тут же невоороженным глазом видно, что две суммы не сходятся...
--------------------
Выбор.
|
|
|
|
|
Jan 5 2013, 20:35
|
практикующий тех. волшебник
    
Группа: Участник
Сообщений: 1 190
Регистрация: 9-09-05
Пользователь №: 8 417

|
Цитата(haker_fox @ Jan 4 2013, 12:08)  ..Жаль в "ходовых" мегах один USART... сдался вам этот USART. можно в фоне, ногодрыганьем. да - таймер лучше разгрести. слишком разные временные интервалы - пришлось в своё время отказаться от "универсального временного задатчика" - таймер подправляю на лету, в зависимости от нужного интервала. обработчик зависит от карты считываемой из флэша. получается некая аля стэйт машина молотящая в фоновом режиме необходимые команды, описанные (и корректируемые уже чисто отдельно в таблице). сами мат. вычисления происходят в "основном потоке". для этого добавлены такие команды как: ожидание, перейти на начало и несколько ещё специфичных...реально в боевом железе надо быстро сканировать все датчики (штук 6-8), посему они все на одном порту и за каждую секунду реальная картина необходимая для принятия решения каждый раз известна. разогрев самих датчиков обычно лежит в пределах 0,2 градуса и при необходимости повышения точности - можно учитывать при задании корректирующего значения после линии сборки на самом производстве изделий (характеристика резисторных датчиков линейна - так, что достаточно одной точки). речь шла о мега128, кварц 14,7456 МГц но в своё время реализовывал и на 51 серии с кварцем 24 и тактовой 2МГц. работает на ура.
|
|
|
|
|
Jan 6 2013, 09:19
|

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

|
Цитата(haker_fox @ Jan 6 2013, 09:13)  З.Ы. Почему я верю механическому термометру? Не верю. Но его значение сходится со спиртовым... В общем КС сходится, но появилась "погрешность"... Дежа вю http://caxapa.ru/378469.htmlВот вспомнил про него почитай
Прикрепленные файлы
app208.pdf ( 92.82 килобайт )
Кол-во скачиваний: 235
--------------------
Закон Мерфи:
Чем тщательнее составлен проект, тем больше неразбериха, если что-то пошло не так
|
|
|
|
|
Jan 6 2013, 18:27
|

Йа моск ;)
     
Группа: Модераторы
Сообщений: 4 345
Регистрация: 7-07-05
Из: Kharkiv-city
Пользователь №: 6 610

|
QUOTE Да и не могут два цифровика ошибаться. У них результаты сходились и сходятся с оглашенной погрешностью по даташиту (0,5 градуса). Когда я только начинал применять DS18B20, в моем распоряжении был термошкаф с точностью поддержания температуры в 0.05 градуса. Вот установив там вентилятор, уложив кучку DS'ов и поверенный ртутный термометр с точностью 0.1 градуса в камеру, через часа 4 после включения выровнялись все температуры, и я увидел разброс между датчиками и образцовым термометром в 0.1 градуса. Проверил еще пару точек, все было аналогично. Правда, эти точки были выше 35 градусов (ибо холодильника не было).
--------------------
"Практика выше (теоретического) познания, ибо она имеет не только достоинство всеобщности, но и непосредственной действительности." - В.И. Ленин
|
|
|
|
|
Jan 7 2013, 09:04
|

Гуру
     
Группа: Модераторы
Сообщений: 10 983
Регистрация: 23-11-05
Пользователь №: 11 287

|
Цитата(Rst7 @ Jan 7 2013, 10:41)  Да у самого датчика не часами, а секундами. А вот температуры в разных точках помещения могут сильно отличаться. Два десятка датчиков, лежащих на столе на пространстве 0.5м*0.5м будут показывать разные температуры, иногда на пару градусов. Это нормально. Ну, на столе, при расстоянии порядка полуметра-метра, на пару градусов - это Вы, кажется, преувеличиваете. Если, конечно, на них не дует с определённой стороны кондиционер в жаркую погоду.
|
|
|
|
|
Jan 7 2013, 09:14
|

Йа моск ;)
     
Группа: Модераторы
Сообщений: 4 345
Регистрация: 7-07-05
Из: Kharkiv-city
Пользователь №: 6 610

|
QUOTE Ну, на столе, при расстоянии порядка полуметра-метра, на пару градусов - это Вы, кажется, преувеличиваете. Так я и затеялся с термошкафом именно тогда, когда увидел разбросы. QUOTE Если, конечно, на них не дует с определённой стороны кондиционер в жаркую погоду. Или через щели в окнах зимой. Или солнышко пригрело часть стола. И тысячи возможных причин.
--------------------
"Практика выше (теоретического) познания, ибо она имеет не только достоинство всеобщности, но и непосредственной действительности." - В.И. Ленин
|
|
|
|
|
Jan 7 2013, 17:19
|

Профессионал
    
Группа: Свой
Сообщений: 1 143
Регистрация: 30-09-08
Из: Новочеркасск
Пользователь №: 40 581

|
Цитата(Herz @ Jan 7 2013, 13:04)  Ну, на столе, при расстоянии порядка полуметра-метра, на пару градусов - это Вы, кажется, преувеличиваете. Если, конечно, на них не дует с определённой стороны кондиционер в жаркую погоду. уж сколько я с этими датчиками работал - аж до тошноты, сплошные термометры да термостаты... и могу с очень большой уверенностью заявить следующее: 1. датчики не чудят с CRC. если у кого-то все хорошо, только CRC не сходится - проблема в программе, которая читает данные и подсчитывает CRC. либо датчик полностью негодный, но в этом случае вряд ли он будет температуру показывать нормально... 2. датчики ОЧЕНЬ ЧУВСТВИТЕЛЬНЫЕ. лежащие на столе при расстояниях в пределах полуметра очень даже нормально могут показывать разные температуры, потому что датчик реагирует на тепло ладони с расстояния в 10-15 см, на свет от настольной лампы с расстояния 1-1,5 м, на луч лазерной указки (!!!) с любого расстояния (секунд за 30 дает прибавку в 0,1 градуса и даже больше). так что если вы положите датчик на стол, где 15 минут до этого стояла кружка с кофе - вы получите совсем не ту температуру, которая будет на том же столе, но в 20 см от этого места! 3. датчики всегда саморазогреваются при постоянном поданном питании. когда они работают на морозе или в жидкостях - саморазогрев малозаметен, но в комнатных условиях следует ожидать завышение температуры на 2-4 градуса. избежать саморазогрева просто: подавать питание только на время измерения температуры (примерно 1 сек), а сами замеры делать достаточно редко - раз в 30 секунд и более. вот тогда можно ждать нормальных показаний. если кому интересно, то на моем сайте arv.radioliga.com по теме 1-wire довольно много программных наработок - от калькулятора CRC до утилит, способствующих отладке самодельных slave-девайсов с этим интерфейсом.
--------------------
Я бы взял частями... но мне надо сразу.
|
|
|
|
|
Jan 7 2013, 17:51
|
практикующий тех. волшебник
    
Группа: Участник
Сообщений: 1 190
Регистрация: 9-09-05
Пользователь №: 8 417

|
Цитата(haker_fox @ Jan 6 2013, 09:13)  ...На счет саморазогрева...В чем может быть дело?... 1) возможно значения саморазогрева различаются от датчика к датчику(верится с трудом). я в основном работаю с 21-ми. они более полно отвечают требованиям задачи чем двадцатки. так вот максимальный разогрев = 0,2 градуса у этой модели. у господина ARV другие данные - (я верю в его опыт, хотя объяснить причину разброса не смогу. хз одним словом). 2) по поводу погрешности. тут уже прозвучало - датчики чуствительны и сразу показывают прирост воздействующей на них температуры. Но надо помнить, что _физически_ сам датчик прийдёт к _заданной_ температуре ТОЛЬКО ЧЕРЕЗ 5(!!) минут. это подтверждает и практика и теория процесса. поясню. идёт речь о теплопередаче от среда-пластик-терморезистор (речь идёт о конструктиве DS18xxx, что корпус PR35 - трёхножечный плстсмассовый). Т.е. датчик покажет реальную температуру(со своей погрешностью естественно) после 5 минутного успокоения в данной температуре. отсюда понятно, что для вычисления погрешности необходима термостатичная камера и время, на приход к заданной температуре. на термодатчиках обычно можно видеть даже движение воздушных масс (разрешение 0,01), а не только рука на 10-15 см..
Сообщение отредактировал kolobok0 - Jan 7 2013, 18:09
|
|
|
|
|
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
|
|
|