1-wire долгие мучения - результат ноль

добрый день!
перечитал наверное почти все темы по 1-wire
пробовал принять те или иные варианты
пока результата нет. хотелось бы помощи зала

суть такая:
есть в наличии герметичные датчики DS18B20 (брал из поставок с оборудованием HDL) =далее как тип1
есть в наличии простые датчики (детальки, с алиэкспресс) = далее как тип 2 (для простоты описания проблемы)

в датчиками тип 1 - проблем при подключении к WB5 нет
при дополнительном подключении датчиков тип 2 - они не определяются
при отключении типа 1 и на линии только тип 2 - не определяются

далее беру тип 2 и подключаю на ардуину уно
тип2 определяется отлично

добавляю датчик тип 1 - все датчики видятся отлично

при этом на макетной плате есть 4.7кОм сопротивление (+ и данные), при его отключении связь между ардуино и датчиками отваливается
теперь беру всю эту конструкцию на макетной плате и несу к WB5
при этом на WB5 висит шлейф из 4 датчиков типа1, метров 20
добавляю макетную плату с 2 датчиками (тип 2) и 1 датчик (тип 1)
итого: WB5 сразу ловит датчик тип1 (HDL), при этом на макетной плате все еще висит сопротивление 4.7кОм
тип 2 - не определяется

при отключении сопротивления - ситуация без изменения, датчики с алиэкспресс не ловятся WB5
сенсор -герметичный - ловится. итого на шине 5 датчиков температуры

с ардуино когда подключены датчики вижу такую картинку

image

все датчики тип-1

причем сейчас обратил внимание
что при подключении датчиков которые на макетной плате к WB5
в итоге тип2 очень сильно нагревается и становится не рабочим - сгорает

заменил на макетной плате сгоревший датчик
опять подключил к ардуино
2 шт - тип2
1 шт - тип 1
image

Фото, ссылку дайте.

Внутри WB уже есть все нужные резисторы, внешние ставить не нужно.

Добавил для эксперимента еще пару ds’ок.
На макетке ( с WB6) работает без проблем.
IMG_20180829_100540__01
Отображается нормально.
%D0%A1%D0%BD%D0%B8%D0%BC%D0%BE%D0%BA

Для сравнения прицепил в герметичном корпусе
IMG_20180829_101437
Также без проблем отображается.
%D0%A1%D0%BD%D0%B8%D0%BC%D0%BE%D0%BA
с пустым прямоугольником выдернутый сенсор.

На мой взгляд уже в самой постановке вопроса есть ответ.
Контроллер работает нормально с сенсорами из другой партии.
В данном случае не имеет значение его оформление в герметичном корпусе.
Либо это не ds18b20 (проверьте маркировку внимательно), либо партия “левая”.

0-02-04-02785913fbe33b610078d94005e1a46228bc515c96032fed1b5926215850eef5_77df70d9

если бы был ответ в моем вопросе - это было бы отлично
но почему при подключении на арудионо - все сенсоры ведут себя адекватно?
опрос идет адекватный

а при подключении к WB5 - только те что в гильзах

а то, что вы описали как “сгорание” типа 2 при подключении к Wiren Board - после этого датчик не работает и при подключении к Arduino?

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

втыкаю новый из упаковки - они как не в чем не бывало считываются

Ещё одна проблема с датчиками ds18b20.
Купил на https://ru.aliexpress.com/item/SAMIORE-18B20/32832225749.html 40 штук датчиков.
Подключаю напрямую к WB6 по трёхпроводной схеме с питанием 5 вольт - работают (точность 0,5 градуса !?).
Подключаю к WB-M1W2 (по двухпроводной схеме с паразитным питанием) показывает 0 градусов (при отключении датчика преобразователь сигнализирует красным о пропадании его).
Соответственно, если беру просто датчик (не из этой партии) в ТО-92, то работает и так и так без вопросов.
Что это может быть?

Произвел замер напряжения в двух проводной линии.
Во время преобразования данных перед передачей у датчика в ТО-92 напряжение с 3.23 падает до 3.16В, а у датчика в гильзе оно с 3.23В падает почти до 0В, затем поднимается до 1,75 (наверное передача) и снова вырастает до 3.23В.

Датчик стал читаться после подключения обвеса из доп кондера и диода по схеме из статьи http://mypractic.ru/ds18b20-datchik-temperatury-s-interfejsom-1-wire-opisanie-na-russkom-yazyke.html#7
ds18b20_parasite
Рекомендованное значение кондера 0,1-1,0 мкФ
Я поставил сначала 1,0 мкФ (питание на ноге больше 3В)


Затем поставил 0,022 мкФ, тоже работает, но питание на ноге 1,25В.
Диод обычный (наверное КД522 или что-то из этой серии)

Вывод такой, что “не все йогурты одинаково полезны”!

а это разве не схема “паразитного” питания?

Это доработанная схема паразитного питания.
В чистом виде ds18b20 работает нормально и по двум проводам.
На провод “земли” вешается “земля” и “+” датчика, а на провод данных вешается Data от датчика.
Внутри уже есть и диод и кондер, но в моем случае, то ли сэкономили и не поставили, то ли их не хватает для нормальной работы.
Судя по замерам, когда напряжение “проваливается” почти до нуля во время преобразования, этих компонентов действительно там нет.

Дополню тему - попытался поставить 1wire ds18b20 в герметичном исполнении. Может проработать полдня, а может через 10 минут отвалится, в логах вижу:
Apr 25 00:07:31 wirenboard-ALWR73U7 user.info kernel: [24454.757938] w1_master_driver w1_bus_master1: Family 0 for 00.680000000000.a7 is not registered.
Apr 25 00:08:13 wirenboard-ALWR73U7 user.info kernel: [24497.381444] w1_master_driver w1_bus_master1: Family 0 for 00.e80000000000.2b is not registered.
Apr 25 00:09:19 wirenboard-ALWR73U7 user.info kernel: [24563.488531] w1_master_driver w1_bus_master1: Family 0 for 00.180000000000.5f is not registered.
Apr 25 00:10:01 wirenboard-ALWR73U7 user.info kernel: [24604.766096] w1_master_driver w1_bus_master1: Family 0 for 00.980000000000.d3 is not registered.

Датчик работает как в двухпроводном подключении, так и в трехпроводном, провод медный 4х0.75, около 12 метров.
Помогает только передергивание 5V Шины, к которой он подключен.

Для этого написал процедуру, может кому пригодится:

if (dev[“wb-w1”][“28-05473b6a1f00”] == “”) { log(“DS18B20 disconnected.”); toggle5V(); }

setInterval(function() { if (dev[“wb-w1”][“28-05473b6a1f00”] == “”) { log(“Temp watchdog fired”); toggle5V(); } }, 60000); // 60000 = каждые 60 секунд идет проверка, меньше 10 секунд лучше не ставить, будет слишком рьяно дергать 5V шину

function toggle5V() {
//Перезагрузка шины 1wire через передергивание выхода 5V
log(“5V toggled”);
dev[“wb-gpio”][“5V_OUT”] = false;

setTimeout(function () {
	dev["wb-gpio"]["5V_OUT"] = true;
}, 3000);

}

Пихаем все в файл любого названия, в папку /etc/wb-rules/ и наслаждаемся стабильной работы этого гада

2 Likes