DS18b20 меняет свой адрес
- Войдите на сайт для отправки комментариев
Здравствуйте!
У меня есть ардуина, которая слушает кучу датчиков иотправляет их данные на компьютер с целью рисования красивых графиков. Среди этих датчиков есть 3 ds18b20, соединенных, как полагается последовательно, рядом с первым и третим стоят конденсаторы по питанию, рядом со вторым пока не стоит. Общая длина провода - где-то 5 метров. ds18b20 (как, впрочем и все остальное) куплены в китае
В основном все работает замечательно, но иногда у датчиков ds18b20 начинает меняться адрес (не на всегда, а на некоторое время). Вот например, в основном у датчика адрес: 28-e7feb3500-9a, но иногда он становится 28-e7c0b3500-9a, 28-e7f0b3500-9a или 28-e7e0b3500-9a. При чем меняется он так, что контрольная сумма совпадает (последний байт) и меняется только один байт из адреса (3ий). Таким болеет в основном второй датчик и, немного реже, третий, первый (т.е. самый близкий к ардуине) за таким замечен не был.
Итого у меня вопрос: как можно с этим бороться? Или это просто датчики говно и ничего тут не поделаешь? Или есть вероятность, что проблема в коде?
Подписался.
ИМХО из-за помехи такое происходит.
Это помеха+длинная линия+плохое питпние. Подпитку делаете? Контрольную сумму проверяйте - отсеете лишнее. А датчики говно, но работать могут.
Поройте еще раз прогу и провода. Адрес записан в ROM и поменяться никак не может. А вот какой то сбой по сетке или некорректная обработка считывания, вполне. ИМХО.
Это помеха+длинная линия+плохое питпние. Подпитку делаете? Контрольную сумму проверяйте - отсеете лишнее. А датчики говно, но работать могут.
Да у меня больше 10 метров на ПВСе, никаких помех, все пашет. Подключение трехпроводное.
Это помеха+длинная линия+плохое питпние. Подпитку делаете? Контрольную сумму проверяйте - отсеете лишнее. А датчики говно, но работать могут.
Что есть подпитка? Датчики подключены 3мя проводами по витой паре (но не экранированной, как я помню), питание от того же (относительно) стабилизированного источника питания 5v, что и ардуино. Вся конструкция вместе потребляет не больше 100 милиампер в пики нагрузки, так что вообще особо просадки по питанию быть не должно, надо быдует еще на второй датчик поставить тоже кондинсатор, когда smd-кондинсаторы придут наконец-то. Впрочем надо будет попробовать с каким-нибудь другим источником питания, понадежнее, спасибо за идею.
Где-то читал, что для уменьшения помех нужно, что бы жила с данными была скручена с нулевым проводом - так и сделано.
Контрольную сумму проверяю (пользуюсь библиотекой OneWire, там есть встроенная проверка), но в том-то и дело, что адрес меняется так, что контрольная сумма совпадает (или проверка CRC в действительности не работает). при этом данные о температуре показываются правдоподобные (так скажем нет сколь-либо заметных скачков при изменении адреса), так что не очень похоже на помехи - в таком случае и температура бы, наверное, приходила более странная.
Поройте еще раз прогу и провода. Адрес записан в ROM и поменяться никак не может. А вот какой то сбой по сетке или некорректная обработка считывания, вполне. ИМХО.
Честно говоря пока не представляю, что может быть не так в программе. в кратце алгоритм действует так:
Сказать всем датчикам, что надо замерять температуру, засеч время
Делать свои дела со всеми остальными датчиками
Проверить, если 750мс не прошло, то подождать, пока пройдет.
Инициализировать поиск 1W-устройств, и потом для каждого прочитать адрес и что там в нужных регистрах лежит, прочитанное послать на компьютер для дальнейшей обработки.
Для общения с датчиками используется библиотека OneWire.
Видимо для начала попробую что-нибудь с кабелем поделать.
А что касается адреса в ROM - это по стандарту так, а зная китайцев, не удивлюсь, если в конкретно моих датчикав все не так просто, как хотелось бы :) и в итоге оно записано в какую-нибудь перезаписываемую память, которая под воздействием нейтрино и прочей магии меняется иногда =).
Про прогу я написал, т.к. вы не указали чем считываете, допускаю самопальный протокол))). Не верю я в китайцев штампующих датчики на дому. Либо перемаркировка, либо отбраковка. В первом случае вообще работать не будет. Во втором уйдет за заявленные диапазоны.
А вообще, попробуйте этот датчик заменить или с первым поменять местами. У меня повторяю, на 10 метрах, провода ПВС 0,75х3 работают безо всяких экранов. Они кстати у вас запаяны или в чудесных колодках?
Что есть подпитка? Датчики подключены 3мя проводами по витой паре (но не экранированной, как я помню), питание от того же (относительно) стабилизированного источника питания 5v, что и ардуино.
Есть 3 способа подключить: 2 провода, 2провода+доп. резистор подпитки и 3провода. У вас нормально.
Токо прозвоните провод +5 от датчика до источника.
Надо сопротивление проводов проверить, с этим бывают чудеса, и 100мА превращаются в пару вольт. Конденсаторы не лишни, по два, керамика+электролит.
Угу. Там тоже проблема изменение 1 бита должно ловится CRC.
Про прогу я написал, т.к. вы не указали чем считываете, допускаю самопальный протокол))). Не верю я в китайцев штампующих датчики на дому. Либо перемаркировка, либо отбраковка. В первом случае вообще работать не будет. Во втором уйдет за заявленные диапазоны.
А вообще, попробуйте этот датчик заменить или с первым поменять местами. У меня повторяю, на 10 метрах, провода ПВС 0,75х3 работают безо всяких экранов. Они кстати у вас запаяны или в чудесных колодках?
Попробую поменять местами, спасибо. Они у меня не запаены, как раз для того, что бы была возможность относительно легко поменять в случае его поломки.
....
Надо сопротивление проводов проверить, с этим бывают чудеса, и 100мА превращаются в пару вольт. Конденсаторы не лишни, по два, керамика+электролит.
...
Угу. Там тоже проблема изменение 1 бита должно ловится CRC.
А вот кстати, зачем 2? чем плох один большой электролит?
Ну CRC штука такая, не очень надежная и легко найти 2 адреса, которые отличаются незначительно и при этом с одинаковой контрольной суммой. Вполне вохможно, что порой бывает когда адрес меняется так, что контрольная сумма не совпадает, но такие случаи еще на ардуине режутся.
Керамику обязательно. Она ВЧ помехи срезает. Электролит - страховка на просадку питания.
Керамику обязательно. Она ВЧ помехи срезает. Электролит - страховка на просадку питания.
Вот оно как. А керамику же тоже по питанию ставить? Приду домой - попробую впаять куда-нибудь.
Керамику обязательно. Она ВЧ помехи срезает. Электролит - страховка на просадку питания.
Не факт...... На 5-ти то метрах?
Описывал всё это давно........
Каждая линия питается от своего 78L05 при входном 9 Вольт.
( а что при потреблении до 10-ти миллиампер нужно что-то ещё?)
Работают без карамики с кондёром 470.00 около стабилизатора.
Нигде никаких других нет.
А у ТС проблемма с отражённым сигналом.
Или резистор поставил не около процессора, а в конце линии.
Под сотню метров включая редкие ответвления вбок.
Но каждый шлейф уходит в одиночку.
были помехи при попытках соединить на один пин два датика на двух кабелях одинаковой длины.
Эхо одновременно приходило.
Советы:
1. заменить резистор на 1.5- 2.2 килоома. ( убрать затяжки фронта)
2. поставить 100-200 Ом последовательно в линию. ( устроить затухание эху)
3. Всё-таки кондёр 220.0 и выше желателен по питанию ( а вдруг оно пульситует)
trembo, идеологическую базу под это и не подвожу. Ставлю, помех не имею, этого мне достаточно. Возможно излишество. ИМХО.
...
А у ТС проблемма с отражённым сигналом.
Или резистор поставил не около процессора, а в конце линии.
...
Советы:
1. заменить резистор на 1.5- 2.2 килоома. ( убрать затяжки фронта)
2. поставить 100-200 Ом последовательно в линию. ( устроить затухание эху)
3. Всё-таки кондёр 220.0 и выше желателен по питанию ( а вдруг оно пульситует)
Резистор у меня в самом начале линии.
Добрался до девайса, померял - сопротивление провода от ардуинки до последнего датчика где-то около одного ома, если верить моему мультиметру, т.е. в общем и целом не критично. В конец линии так же добавил керамический конденсатор на 0.22 (электролит и так был) - не помогло, надо будет еще на плату с ардуино впаять керамику на входе питания - а то у меня там только электролиты стоят.
Сегодня вечером попробую поменять третий и первый местами, посмотрю, поменяется ли что-нибудь.
Советы:
1. заменить резистор на 1.5- 2.2 килоома. ( убрать затяжки фронта)
2. поставить 100-200 Ом последовательно в линию. ( устроить затухание эху)
3. Всё-таки кондёр 220.0 и выше желателен по питанию ( а вдруг оно пульситует)
Спасибо за советы, кондер уже есть, но не помогает. А уменьшение номинала подтягивающего сопротивления не скажется-ли на времени жизни датчиков? читал, что 4.7кОм - это чуть-ли не минимальное, при котором датчики однозначно не сгорят, если уменьшать, то могут и не оценить столь большого тока.
По резистору как то так:
Сопротивление резистора надо выбирать из компромисса между сопротивлением используемого кабеля и внешними помехами. Сопротивление резистора может быть от 5,1 до 1 кОм. Для кабелей с высоким сопротивлением жил надо использовать более высокое сопротивление. А там где присутствуют промышленные помехи – выбирать более низкое сопротивление и использовать кабель с более большим сечением провода.
Для телефонной лапши (4 жилы) для 100 метров необходимо резистор 3,3 кОм. Если вы применяете «витую пару » даже 2 категории длина может быть увеличена да 300 метров!!! ГАРАНТИРОВАННО. А при использовании схемы с внешним драйвером до 600.
В общем поменял вчера вечером первый и третий датчики местами, в итоге тот датчик, что стал первым всю ночь беспощадно менял свой адрес, тот же, что стал третим - остался работать нормально. Сейчас все успокоились и вернулись ко своим первоначальным адресам.
В итоге, похоже, проблема именно в кривых китайских датчиках, а не в кривости линии и отсутствии конденсаторов. Посмотрю, как будут себя дальше вести датчики
Если кому интересно, что в итоге я начинаю грешить не на сами датчики, а на радиоканал - похоже данные портились не на самом arduino, а в процессе их пересылки через NRF24L01.
Хотя и там, вроде, есть и включена проверка контрольной суммы. Добавил еще свою собственную контрольную сумму в пакет - буду ждать следующего раза, когда заглючит. Если дело окажется действительно в этом, то просто куплю поменяю для Raspberry Pi на вариант с внешней антенной.
Если честно, то это более похоже на истину. ИМХО.
Изначально я этот вариант даже не рассматривал из-за того, что там вроде есть проверка чек-сумм и подобного быть не должно, но когда я заметил,что у меня датчик (DHT22, кажется), ID которого прибит гвоздями внезапно переименовался в каком-то из пакетов меня внезапно осенило, что проблема либо в том, что у меня где-то что-то в скетче криво и данные неправильно записываются (что, я, впрочем, перепроверил и пришел к выводу ,что все ок) или потери где-то в пути, за второй вариант так же говорит то,что когда я Пишку передвинул поближе к Ардуине в следствие перестановки в комнате, таких проблем стало гораздо меньше, а последнюю неделю - две вообще не наблюдается.
В общем, зря я, похоже, грешил на китайские датчики, но зато узнал нового на тему того, как стоит все делать и какие и куда конденсаторы ставить :)
Тема старая но на всякий напишу у меня линк 15-17 м. Витухой CAT5 в обвязке по обеим концам резисторы 4.7кОм на плюсовой вывод + конденсаторы по питанию ТК в нагрузке 2 реле, стабильно работает уже 2 года
Шина 1-wire подобна шине can и для стабильной работы требуется обвязка обеих концов
ку, проблему смены аресов решили?
в гугле/яндексе тихо...
сам столкнулся с такой проблемой - 15 датчиков на одной линии, датчики пронумерованы и привязаны по адресам, 2 датчика спонтанно меняют адреса.
Все конечно прикольно, но мне однажды чел мозги парил проблемами глобальными, а потом оказалось, что арда на бредборде, раскоммутированиа пинчиками-дюпонами, а потом уже провода до девайсов. И вот земля по бредборду шла с такими бешеными подставками, что удивительно, как вообще работало. А еще периодически вообще контакты пропадали то там то тут.
В тырнете есть куча библиотек, у которых есть ошибки в работе процедуры SEARCH ROM. Скорее всего у ТС именно такая глюкавая библа.