ds18B20 и длина провода
- Войдите на сайт для отправки комментариев
Пнд, 30/09/2013 - 00:21
Здравствуйте, датчик ds18B20 прикручен к аруинке по ~5м проводу.
Резистр использую на 5К Ом(2 по 10 параллельно).
Датчик показывает температуру через раз.
Прозвонивал провод, проверял контакты. Все в норме.
Обновляет температуру каждую секунду. В итоге в определнный момент ардуино перестала видеть датчик. Потом опять заработал. Теперь снова не видит.
Подозреваю, что проблема в длинном кабеле.
Можно как-то вылечить, не уменьшая длину кабеля?
гарантированного решения думаю для вашей проблемы нет, но есть рекомендации, может помогут:
- прежде всего убедитесь, что при подключении короткими проводами проблема не возникает
- используйте экранированый провод где желательно, чтобы все три жилы были в экране (т.е. экран подключить к земле, но ток по нему не пускать - питание на датчик подавать по другому проводу внутри экрана
- попробуйте снизить споростивление до 1-3ком, надеюсь резистор стоит на той стороне провода которая ближе к ардуине, а не к датчику
- попробуйте поставить электролит на 1-10мкф в паралель с керамическим конденсатором на 100нф около самого датчика
Раз в секунду - слишком часто для этого датчика. Сделайте раз в 5 секунд.
Раз в секунду - слишком часто для этого датчика. Сделайте раз в 5 секунд.
если использована грамотная библиотека то там уже встроено ожидание датчика
максимальнео ожидание 0.75сек соотвествует максимальной точности 12 бит. Время можно сильно сократить если снизить разрещение датчика. В даташите вся эта информация есть, так что если важна частота, а не точность - реально и чаще чем раз в секунду
гарантированного решения думаю для вашей проблемы нет, но есть рекомендации, может помогут:
- прежде всего убедитесь, что при подключении короткими проводами проблема не возникает
- используйте экранированый провод где желательно, чтобы все три жилы были в экране (т.е. экран подключить к земле, но ток по нему не пускать - питание на датчик подавать по другому проводу внутри экрана
- попробуйте снизить споростивление до 1-3ком, надеюсь резистор стоит на той стороне провода которая ближе к ардуине, а не к датчику
- попробуйте поставить электролит на 1-10мкф в паралель с керамическим конденсатором на 100нф около самого датчика
А эти рекомендации в полном объеме и для DHT22 можно использовать?
И насколько принципиально место установки подтягивающего резистора?
С dht не работал, рекомендации точно применимы для любого 1-wire
Для 1-wire место установки резистора критично как раз с точки зрения помех
Вообще если провода нужны длинные, а проблему с помехами решить не удается, то надо использовать помехоустойчивые протоколы. Как вариант ставить по ардуине с каждой стороны. Ардуины связывать например по Serial. При большой длине проводов потребуются еще и преобразователи uart-rs232 или uart-rs485
Тогда всп будет как надо)
Как запитан датчик: два или три провода?
У меня работает с паразитным питанием на 10 метров по телефонной лапше.
У меня два датчика, один работает с переменным успехом, а второй вообще молчит. От переплюсовки они умирают или нет?... а то боюсь я мог перепутать в первый раз.
У меня работает с паразитным питанием на 10 метров по телефонной лапше.
Около 100 метров, питание 5 Вольт, кабель сигнализационный 4-х жильный, резистор 1 кило Ом.
На линиях от 5-ти до 15-ти датчиков ( на каждом входе ) .
От переплюсовки они умирают или нет?... а то боюсь я мог перепутать в первый раз.
В смерти замечены не были, на питание каждой линии стоит 78L05(100 мА К.З.) с кондёром 470.0 мкф на выходе
Как-то ради интереса подключал датчик к 300 метровой бухте витой пары, резистор ставил на 1К....отлично работало)
подключение через бухту равнозначно подключению короткими проводами в которые добавлено сопротивление в сотню ом на кажду/ю линию и еще между проводами добавлены конденсаторы не десяток нанофарад. Это совсем не тоже самое, что подключить датчики проводами длинной 300 метров. Так как one wire протокол с низкими скоростями обмена лишнее сопротивление и лишняя емкость на линии ему должны быть не так страшны, а вот помехи наведенные длинными проводами - как раз вритичны. Иными словами пример с бухтой ни о чем не говорит)))
Не подскажет ли кто, как можно определить программно присутствие датчика? Может у кого табличка по командам для него есть?
Не подскажет ли кто, как можно определить программно присутствие датчика? Может у кого табличка по командам для него есть?
Все таблицы в даташит. Примеры реализации в библитеках, например http://www.pjrc.com/teensy/td_libs_OneWire.html
А дальше творчество, можно например в епром сохранять адреса и привязки датчиков, чтобы понимать какой отвалится к примеру.
Не подскажет ли кто, как можно определить программно присутствие датчика? Может у кого табличка по командам для него есть?
А как Вы первый раз обращаетесь к датчику? :) Наверное надо ловить ответ после того, как дали reset на линию...
Del
Конкретно по емкостям, электролит+керамика параллельно линии питания.
кондер - НЕэлектролит 0,1мкф (выдрал с видеокарты) непосредственно на ноги датчика, подтяжка 2,2к возле МК, 1,5к в питание датчика 0,1 мкф с двух сторон (возле МК). Кабель датчика на улицу вдоль силовых кабелей (магнитные пускатели и прочая прелесть) 15м, экран никуда не подключен, но есть. Может и есть збои но за 1 месяц я не замечал их.
кондер - НЕэлектролит 0,1мкф (выдрал с видеокарты) непосредственно на ноги датчика, подтяжка 2,2к возле МК, 1,5к в питание датчика 0,1 мкф с двух сторон (возле МК). Кабель датчика на улицу вдоль силовых кабелей (магнитные пускатели и прочая прелесть) 15м, экран никуда не подключен, но есть. Может и есть збои но за 1 месяц я не замечал их.
Гриша, не очень понял по "1,5к в питание датчика" как подключен, если последовательно резистор - питание датчика, то в чем его смысл?
Гриша, не очень понял по "1,5к в питание датчика" как подключен, если последовательно резистор - питание датчика, то в чем его смысл?
датчик потребляет микроАмперы, а наводка на питание может нарушить работу МК - защита от сбоев основого устройства.
можно отрезать и наростить кабель не отключая и выключая устройство.... вот только сопрот в линию данных так и забыл поставить...