DS18b20 меняет свой адрес

SunX
SunX аватар
Offline
Зарегистрирован: 04.10.2014

Здравствуйте!

У меня есть ардуина, которая слушает кучу датчиков иотправляет их данные на компьютер с целью рисования красивых графиков. Среди этих датчиков есть 3 ds18b20, соединенных, как полагается последовательно, рядом с первым и третим стоят конденсаторы по питанию, рядом со вторым пока не стоит. Общая длина провода - где-то 5 метров. ds18b20 (как, впрочем и все остальное) куплены в китае

В основном все работает замечательно, но иногда у датчиков ds18b20 начинает меняться адрес (не на всегда, а на некоторое время). Вот например, в основном у датчика адрес: 28-e7feb3500-9a,  но иногда он становится 28-e7c0b3500-9a, 28-e7f0b3500-9a или 28-e7e0b3500-9a. При чем меняется он так, что контрольная сумма совпадает (последний байт) и меняется только один байт из адреса (3ий). Таким болеет в основном второй датчик и, немного реже, третий, первый (т.е. самый близкий к ардуине) за таким замечен не был.

Итого у меня вопрос: как можно с этим бороться? Или это просто датчики говно и ничего тут не поделаешь? Или есть вероятность, что проблема в коде?

Radjah
Offline
Зарегистрирован: 06.08.2014

Подписался.

ИМХО из-за помехи такое происходит.

Logik
Offline
Зарегистрирован: 05.08.2014

Это помеха+длинная линия+плохое питпние. Подпитку делаете? Контрольную сумму проверяйте - отсеете лишнее. А датчики говно, но работать могут.

bwn
Offline
Зарегистрирован: 25.08.2014

Поройте еще раз прогу и провода. Адрес записан в ROM и поменяться никак не может. А вот какой то сбой по сетке или некорректная обработка  считывания, вполне. ИМХО.

bwn
Offline
Зарегистрирован: 25.08.2014

Logik пишет:

Это помеха+длинная линия+плохое питпние. Подпитку делаете? Контрольную сумму проверяйте - отсеете лишнее. А датчики говно, но работать могут.

Да у меня больше 10 метров на ПВСе, никаких помех, все пашет. Подключение трехпроводное.

SunX
SunX аватар
Offline
Зарегистрирован: 04.10.2014

Logik пишет:

Это помеха+длинная линия+плохое питпние. Подпитку делаете? Контрольную сумму проверяйте - отсеете лишнее. А датчики говно, но работать могут.

Что есть подпитка? Датчики подключены 3мя проводами по витой паре (но не экранированной, как я помню), питание от того же (относительно) стабилизированного источника питания 5v, что и ардуино. Вся конструкция вместе потребляет не больше 100 милиампер в пики нагрузки, так что вообще особо просадки по питанию быть не должно, надо быдует еще на второй датчик поставить тоже кондинсатор, когда smd-кондинсаторы придут наконец-то. Впрочем надо будет попробовать с каким-нибудь другим источником питания, понадежнее, спасибо за идею.
Где-то читал, что для уменьшения помех нужно, что бы жила с данными была скручена с нулевым проводом - так и сделано.

Контрольную сумму проверяю (пользуюсь библиотекой OneWire, там есть встроенная проверка), но в том-то и дело, что адрес меняется так, что контрольная сумма совпадает (или проверка CRC в действительности не работает). при этом данные о температуре показываются правдоподобные (так скажем нет сколь-либо заметных скачков при изменении адреса), так что не очень похоже на помехи - в таком случае и температура бы, наверное, приходила более странная.

SunX
SunX аватар
Offline
Зарегистрирован: 04.10.2014

bwn пишет:

Поройте еще раз прогу и провода. Адрес записан в ROM и поменяться никак не может. А вот какой то сбой по сетке или некорректная обработка  считывания, вполне. ИМХО.

Честно говоря пока не представляю, что может быть не так в программе. в кратце алгоритм действует так:

Сказать всем датчикам, что надо замерять температуру, засеч время
Делать свои дела со всеми остальными датчиками
Проверить, если 750мс не прошло, то подождать, пока пройдет.
Инициализировать поиск 1W-устройств, и потом для каждого прочитать адрес и что там в нужных регистрах лежит, прочитанное послать на компьютер для дальнейшей обработки.

Для общения с датчиками используется библиотека OneWire.

Видимо для начала попробую что-нибудь с кабелем поделать.

А что касается адреса в ROM - это по стандарту так, а зная китайцев, не удивлюсь, если в конкретно моих датчикав все не так просто, как хотелось бы :) и в итоге оно записано в какую-нибудь перезаписываемую память, которая под воздействием нейтрино и прочей магии меняется иногда =).
 

bwn
Offline
Зарегистрирован: 25.08.2014

Про прогу я написал, т.к. вы не указали чем считываете, допускаю самопальный протокол))). Не верю я в китайцев штампующих датчики на дому. Либо перемаркировка, либо отбраковка. В первом случае вообще работать не будет. Во втором уйдет за заявленные диапазоны.
А вообще, попробуйте этот датчик заменить или с первым поменять местами. У меня повторяю, на 10 метрах, провода ПВС 0,75х3 работают безо всяких экранов. Они кстати у вас запаяны или в чудесных колодках?

Logik
Offline
Зарегистрирован: 05.08.2014

SunX пишет:

Что есть подпитка? Датчики подключены 3мя проводами по витой паре (но не экранированной, как я помню), питание от того же (относительно) стабилизированного источника питания 5v, что и ардуино.

Есть 3 способа подключить: 2 провода, 2провода+доп. резистор подпитки и 3провода. У вас нормально.

Токо прозвоните провод +5 от датчика до источника. 

SunX пишет:
Вся конструкция вместе потребляет не больше 100 милиампер в пики нагрузки, так что вообще особо просадки по питанию быть не должно, надо быдует еще на второй датчик поставить тоже кондинсатор, когда smd-кондинсаторы придут наконец-то. Впрочем надо будет попробовать с каким-нибудь другим источником питания, понадежнее, спасибо за идею.

Надо сопротивление проводов проверить, с этим бывают чудеса, и 100мА превращаются в пару вольт. Конденсаторы не лишни, по два, керамика+электролит.
 

SunX пишет:
Контрольную сумму проверяю (пользуюсь библиотекой OneWire, там есть встроенная проверка), но в том-то и дело, что адрес меняется так, что контрольная сумма совпадает (или проверка CRC в действительности не работает).

Угу. Там тоже проблема изменение 1 бита должно ловится CRC.

SunX
SunX аватар
Offline
Зарегистрирован: 04.10.2014

bwn пишет:

Про прогу я написал, т.к. вы не указали чем считываете, допускаю самопальный протокол))). Не верю я в китайцев штампующих датчики на дому. Либо перемаркировка, либо отбраковка. В первом случае вообще работать не будет. Во втором уйдет за заявленные диапазоны.
А вообще, попробуйте этот датчик заменить или с первым поменять местами. У меня повторяю, на 10 метрах, провода ПВС 0,75х3 работают безо всяких экранов. Они кстати у вас запаяны или в чудесных колодках?

Попробую поменять местами, спасибо. Они у меня не запаены, как раз для того, что бы была возможность относительно легко поменять в случае его поломки.

SunX
SunX аватар
Offline
Зарегистрирован: 04.10.2014

Logik пишет:

....

Надо сопротивление проводов проверить, с этим бывают чудеса, и 100мА превращаются в пару вольт. Конденсаторы не лишни, по два, керамика+электролит.

...

SunX пишет:
Контрольную сумму проверяю (пользуюсь библиотекой OneWire, там есть встроенная проверка), но в том-то и дело, что адрес меняется так, что контрольная сумма совпадает (или проверка CRC в действительности не работает).

Угу. Там тоже проблема изменение 1 бита должно ловится CRC.

А вот кстати, зачем 2? чем плох один большой электролит?

Ну CRC штука такая, не очень надежная и легко найти 2 адреса, которые отличаются незначительно и при этом с одинаковой контрольной суммой. Вполне вохможно, что порой бывает когда адрес меняется так, что контрольная сумма не совпадает, но такие случаи еще на ардуине режутся.

bwn
Offline
Зарегистрирован: 25.08.2014

Керамику обязательно. Она ВЧ помехи срезает. Электролит - страховка на просадку питания.

SunX
SunX аватар
Offline
Зарегистрирован: 04.10.2014

bwn пишет:

Керамику обязательно. Она ВЧ помехи срезает. Электролит - страховка на просадку питания.

Вот оно как. А керамику же тоже по питанию ставить? Приду домой - попробую впаять куда-нибудь.

trembo
trembo аватар
Offline
Зарегистрирован: 08.04.2011

bwn пишет:

Керамику обязательно. Она ВЧ помехи срезает. Электролит - страховка на просадку питания.

Не факт......   На 5-ти  то метрах?

Описывал всё это давно........
Каждая линия питается от своего 78L05 при входном 9 Вольт.
( а что при потреблении до 10-ти миллиампер нужно что-то ещё?)
Работают без карамики с кондёром 470.00 около стабилизатора.
Нигде никаких других нет.

А у ТС проблемма с отражённым сигналом.
Или резистор поставил не около процессора, а в конце линии.

Под сотню метров  включая редкие ответвления вбок.
Но каждый шлейф уходит  в одиночку.
были помехи при попытках соединить на один пин два датика на двух кабелях одинаковой длины.
Эхо одновременно приходило.

 

Советы:
1. заменить резистор на 1.5- 2.2 килоома. ( убрать затяжки фронта)
2. поставить 100-200 Ом последовательно в линию. ( устроить затухание  эху)
3. Всё-таки кондёр 220.0 и выше желателен по питанию ( а вдруг оно пульситует)

 

 

bwn
Offline
Зарегистрирован: 25.08.2014

trembo, идеологическую базу под это и не подвожу. Ставлю, помех не имею, этого мне достаточно. Возможно излишество. ИМХО.

SunX
SunX аватар
Offline
Зарегистрирован: 04.10.2014

trembo пишет:

...

А у ТС проблемма с отражённым сигналом.
Или резистор поставил не около процессора, а в конце линии.

...

Советы:
1. заменить резистор на 1.5- 2.2 килоома. ( убрать затяжки фронта)
2. поставить 100-200 Ом последовательно в линию. ( устроить затухание  эху)
3. Всё-таки кондёр 220.0 и выше желателен по питанию ( а вдруг оно пульситует)

Резистор у меня в самом начале линии.

Добрался до девайса, померял - сопротивление провода от ардуинки до последнего датчика где-то около одного ома, если верить моему мультиметру, т.е. в общем и целом не критично. В конец линии так же добавил керамический конденсатор на 0.22 (электролит и так был) - не помогло, надо будет еще на плату с ардуино впаять керамику на входе питания - а то у меня там только электролиты стоят.

Сегодня вечером попробую поменять третий и первый местами, посмотрю,  поменяется ли что-нибудь.

SunX
SunX аватар
Offline
Зарегистрирован: 04.10.2014

trembo пишет:

Советы:
1. заменить резистор на 1.5- 2.2 килоома. ( убрать затяжки фронта)
2. поставить 100-200 Ом последовательно в линию. ( устроить затухание  эху)
3. Всё-таки кондёр 220.0 и выше желателен по питанию ( а вдруг оно пульситует)

Спасибо за советы, кондер уже есть, но не помогает. А уменьшение номинала подтягивающего сопротивления не скажется-ли на времени жизни датчиков? читал, что 4.7кОм - это чуть-ли не минимальное, при котором датчики однозначно не сгорят, если уменьшать, то могут и не оценить столь большого тока.

bwn
Offline
Зарегистрирован: 25.08.2014

По резистору как то так:

Сопротивление  резистора надо выбирать из компромисса между сопротивлением используемого кабеля и внешними помехами. Сопротивление резистора может быть от 5,1 до 1 кОм. Для кабелей с высоким  сопротивлением жил надо использовать более высокое  сопротивление. А там где присутствуют  промышленные помехи – выбирать более низкое сопротивление и использовать кабель с более большим  сечением провода.

Для телефонной лапши (4 жилы) для 100 метров необходимо резистор 3,3 кОм. Если вы применяете «витую пару » даже 2 категории длина может быть  увеличена да 300 метров!!!  ГАРАНТИРОВАННО. А при использовании схемы с внешним драйвером до 600.

SunX
SunX аватар
Offline
Зарегистрирован: 04.10.2014

В общем поменял вчера вечером первый и третий датчики местами, в итоге тот датчик, что стал первым всю ночь беспощадно менял свой адрес, тот же, что стал третим - остался работать нормально. Сейчас все успокоились и вернулись ко своим первоначальным адресам.

В итоге, похоже, проблема именно в кривых китайских датчиках, а не в кривости линии и отсутствии конденсаторов. Посмотрю, как будут себя дальше вести датчики

SunX
SunX аватар
Offline
Зарегистрирован: 04.10.2014

Если кому интересно, что в итоге я начинаю грешить не на сами датчики, а на радиоканал - похоже данные портились не на самом arduino, а в процессе их пересылки через NRF24L01.
Хотя и там, вроде, есть и включена проверка контрольной суммы. Добавил еще свою собственную контрольную сумму в пакет - буду ждать следующего раза, когда заглючит. Если дело окажется действительно в этом, то просто куплю поменяю для Raspberry Pi на вариант с внешней антенной.

bwn
Offline
Зарегистрирован: 25.08.2014

Если честно, то это более похоже на истину. ИМХО.

SunX
SunX аватар
Offline
Зарегистрирован: 04.10.2014

Изначально я этот вариант даже не рассматривал из-за того, что там вроде есть проверка чек-сумм и подобного быть не должно, но когда я заметил,что у меня датчик (DHT22, кажется), ID которого прибит гвоздями внезапно переименовался в каком-то из пакетов меня внезапно осенило, что проблема либо в том, что у меня где-то что-то в скетче криво и данные неправильно записываются (что, я, впрочем, перепроверил и пришел к выводу ,что все ок) или потери где-то в пути, за второй вариант так же говорит то,что когда я Пишку передвинул поближе к Ардуине в следствие перестановки в комнате, таких проблем стало гораздо меньше, а последнюю неделю - две вообще не наблюдается.

В общем, зря я, похоже, грешил на китайские датчики, но зато узнал нового на тему того, как стоит все делать и какие и куда конденсаторы ставить :)

Dr_McKay
Offline
Зарегистрирован: 24.01.2019

Тема старая но на всякий напишу у меня линк 15-17 м. Витухой CAT5 в обвязке по обеим концам резисторы 4.7кОм на плюсовой вывод + конденсаторы по питанию ТК в нагрузке 2 реле, стабильно работает уже 2 года
Шина 1-wire подобна шине can и для стабильной работы требуется обвязка обеих концов

Fynjy86
Fynjy86 аватар
Offline
Зарегистрирован: 09.06.2017

ку, проблему смены аресов решили?

в гугле/яндексе тихо...

сам столкнулся с такой проблемой - 15 датчиков на одной линии, датчики пронумерованы и привязаны по адресам, 2 датчика спонтанно меняют адреса.

inspiritus
Offline
Зарегистрирован: 17.12.2012

Все конечно прикольно, но мне однажды чел мозги парил проблемами глобальными, а потом оказалось, что арда на бредборде, раскоммутированиа пинчиками-дюпонами, а потом уже провода до девайсов. И вот земля по бредборду шла с такими бешеными подставками, что удивительно, как вообще работало. А еще периодически вообще контакты пропадали то там то тут.

brokly
brokly аватар
Offline
Зарегистрирован: 08.02.2014

В тырнете есть куча библиотек, у которых есть ошибки в работе процедуры SEARCH ROM. Скорее всего у ТС именно такая глюкавая библа.