Сколько DS18b20 можно повесить на одну шину?
- Войдите на сайт для отправки комментариев
Вс, 10/05/2015 - 22:57
В общем хотел подключить 6 датчиков но обломался при подключении более 5 перестают работать, подлючены дачики все паралельно через один резистор 4.7К, думал шестой датчик не рабочий но поменял его местами с пятым он работает.
использую мегу и такой скетчь
#include <OneWire.h> #include <DallasTemperature.h> #define ONE_WIRE_BUS 9 OneWire oneWire(ONE_WIRE_BUS); DallasTemperature sensors(&oneWire); DeviceAddress Thermometer1 = { 0x28, 0xFF, 0x45, 0xF7, 0x4C, 0x04, 0x00, 0x35 }; DeviceAddress Thermometer2 = { 0x28, 0xFF, 0x16, 0x50, 0x73, 0x04, 0x00, 0x40 }; DeviceAddress Thermometer3 = { 0x28, 0xFF, 0x17, 0x43, 0x3A, 0x04, 0x00, 0x82 }; DeviceAddress Thermometer4 = { 0x28, 0xFF, 0x1A, 0x19, 0x63, 0x14, 0x03, 0x56 }; DeviceAddress Thermometer5 = { 0x28, 0xFF, 0xD6, 0x33, 0x63, 0x14, 0x03, 0x3E }; DeviceAddress Thermometer6 = { 0x28, 0xFF, 0xCF, 0x41, 0x63, 0x14, 0x03, 0x1E }; void setup() { sensors.begin(); sensors.setResolution(Thermometer1, 12); sensors.setResolution(Thermometer2, 12); sensors.setResolution(Thermometer3, 12); sensors.setResolution(Thermometer4, 12); sensors.setResolution(Thermometer5, 12); sensors.setResolution(Thermometer6, 12); Serial.begin(9600); } void printTemperature(DeviceAddress deviceAddress) { float tempC = sensors.getTempC(deviceAddress); Serial.println(tempC); } void loop() { sensors.requestTemperatures(); Serial.print("Sensor1 "); printTemperature(Thermometer1); Serial.print("Sensor2 "); printTemperature(Thermometer2); Serial.print("Sensor3 "); printTemperature(Thermometer3); Serial.print("Sensor4 "); printTemperature(Thermometer4); Serial.print("Sensor5 "); printTemperature(Thermometer5); Serial.print("Sensor6 "); printTemperature(Thermometer6); }
В чем может быть проблема?
Не факт но попробуйте sensors.requestTemperatures(); delay(1000);
Одиннадцать штука параллельно работают без проблем. Резистор один.
Резистор поменьше- 1к5 поставьте.....
А что в данном случае вы понимаете под словом параллельно? Где и как расположены датчики?
А что в данном случае вы понимаете под словом параллельно? Где и как расположены датчики?
а как еще можно подключить эти датчики? Они же на одной шине...
А что в данном случае вы понимаете под словом параллельно? Где и как расположены датчики?
а как еще можно подключить эти датчики? Они же на одной шине...
раскидать звездой в параллель, достаточно длинными шлейфами.
Не факт но попробуйте sensors.requestTemperatures(); delay(1000);
Не помогло, такое ощущение что не хватает питания датчикам от ардуины к ней ещё tft экран подключен и реле.
раскидать звездой в параллель, достаточно длинными шлейфами.
примерно так и есть резистор у самой ардуины далее выходять 20см три провода и к ним уже цепляются разной длины провода ко всем датчикам
раскидать звездой в параллель, достаточно длинными шлейфами.
примерно так и есть резистор у самой ардуины далее выходять 20см три провода и к ним уже цепляются разной длины провода ко всем датчикам
Насколько помню, правильно - это один шлейф и от него ответвления максимально короткие.
Насколько помню, правильно - это один шлейф и от него ответвления максимально короткие.
Ну посути у меня отдин шлейф только короткий а отводы на датчики длиные по другому не как, датчики в разных сторонах и на разном растоянии самый далекой метров 15 остальные в пределах 2-5метров.
Подключил отдельное питание стало лучше кажет все 6 датчиков только один самый дальний переодически раз 5-10мин выдает -127
Нет таких температур, скорее всего библиотека чует что вы опрашиваете или не существующий или не ответивший датчик и получив 1111 1111 1111 1111 ( резистор привязки) выдаёт вам -127.
По поводу количества.......
Вторая колонка- номер канала (аналогового пина, так удобнее на Мега128) к которому подключен шлейф.
И это не на столе 20 сантиметров, каждый шлейф по метров 100, запутан по зданию.
Я на нулевом канале насчитал 17 датчиков......
Почитайте это.
Кроме того, из личного опыта:
- не используйте паразитное питание (1-wire по 2-м проводам), используйте отдельное питание (1-wire по 3-м проводам) лучше всего взять две витые пары из кабеля, по одной пустить питание, по второй данные, землю каждой пары соединить.
- резистор 4.7к это много, по оригинальным спецификациям 2.2к, но можно ещё меньше.
- на длинной и/или кривой лини без активной подтяжки никиак.
При использовании активной подтяжки у меня без проблем работает 20 датчиков на линии 200м+ с ответвлениями на датчики по 2-3 метра.
Почитайте это.
Кроме того, из личного опыта:
- не используйте паразитное питание (1-wire по 2-м проводам), используйте отдельное питание (1-wire по 3-м проводам) лучше всего взять две витые пары из кабеля, по одной пустить питание, по второй данные, землю каждой пары соединить.
- резистор 4.7к это много, по оригинальным спецификациям 2.2к, но можно ещё меньше.
- на длинной и/или кривой лини без активной подтяжки никиак.
При использовании активной подтяжки у меня без проблем работает 20 датчиков на линии 200м+ с ответвлениями на датчики по 2-3 метра.
У меня используется 3 провода питание минус и сигнальный пин на всех датчиках, попробую конечно уменьшить до 2К резистор просто у меня нет в наличии 2.2К есть по 1К.
Что такое активная подтяжка? если использовать к примеру вроли шины витую пару то как к ней цеплять датчики? разрезать шину на отводы к каждому датчику и скручивать?
У меня используется 3 провода питание минус и сигнальный пин на всех датчиках, попробую конечно уменьшить до 2К резистор просто у меня нет в наличии 2.2К есть по 1К.
-[1к]-+-[1к]- = -[2к]- , но и 1к будет работать.
Что такое активная подтяжка?
Что-то типа такого:
[/quote]
если использовать к примеру вроли шины витую пару то как к ней цеплять датчики? разрезать шину на отводы к каждому датчику и скручивать?
Блин замучался уже (((( не фига работать нормально не хочет, последний самый удаленный датчик переодически выдает ошибку -127 уже и повесил на одну шину и резистор поставил на 2К и датчик заменил и питание отдельное на датчики, незнаю что ещё придумать. Самое прикольное что чем больше датчиков тем чаще эта ошибка. К примеру если на шине 3 датчика то ошибка возникает где то раз в час иногда реже, если 6 датчиков то ошибка раз в 5-10 минут и уже глюкает не только последний на и предпоследний.
Самое печальное, что от этих датчиков работает реле то есть по разнице показаний температуры включается и выключается и когда ошика реле срабатывает (((
Ещё прикол в том что всю зиму эти же датчики только 4 штуки отработали с NANO без проблем, а вот решил всё перевести на мегу с tft и начались проблемы ((
Может есть варианты програмно обойти ошибку ну что бы её игнорировать?
...переодически выдает ошибку -127...
...если на шине 3 датчика то ошибка возникает где то раз в час иногда реже...
...если 6 датчиков то ошибка раз в 5-10 минут...
Так игнорируйте програмно и повторяйте опрос. Вы же космическим кораблем управляете, я надеюсь.
з.ы. ой очепятка "Вы же НЕ космическим кораблем управляете, я надеюсь."
Вот мой полный скетч который сечас работает
програмно я бы хотел так что есть -127 то на экране остаются старые значения с датчика
Из вариантов, с бубном. Рядом с последним датчиком повесьте кондеры электролит мкФ на 100-1000 + керамику 0,1-10мкФ.
А по "-127" - If (переменная <=-127); {пропустить отображение, уйти на новый цикл измерения.}
Интересная строка имеется в файле DallasTemperature.h
#define DEVICE_DISCONNECTED -127
Вам это ничто не напоминает?
А в файлеDallasTemperature.cpp
// returns temperature in degrees F
// TODO: - when getTempC returns DEVICE_DISCONNECTED
// -127 gets converted to -196.6 F
Интересная строка имеется в файле DallasTemperature.h
#define DEVICE_DISCONNECTED -127
Вам это ничто не напоминает?
А в файлеDallasTemperature.cpp
// returns temperature in degrees F
// TODO: - when getTempC returns DEVICE_DISCONNECTED
// -127 gets converted to -196.6 F
Это я уже видел и понял что -127 возникает когда нет связи с датчиком, но как это решает проблему?
А датчики и соединения между ними у вас на пайке или разъемах?
А датчики и соединения между ними у вас на пайке или разъемах?
просто скрутка и изолента, что их паять если ещё сто раз пооду перебирать придется (( да и с nano так же все было.
Шина у меня ввиде провода ПВС 3х0,75 и отводы на датчики то же такие же, а около датчика 1метр роного тоненького кабеля датчики у меня водонепроницаемы в гильзах с 1метром провода.
Шина у меня ввиде провода ПВС 3х0,75.
А Вы знаете толк в извращениях. Возьмите витую пару.
А Вы знаете толк в извращениях. Возьмите витую пару.
думаете сечение проводов играет роль? вроде чем больше тем меньше потерь
А Вы знаете толк в извращениях. Возьмите витую пару.
думаете сечение проводов играет роль? вроде чем больше тем меньше потерь
Ну вы же не мощьность передаете :) Я не буду Вам сейчас лекцию читать почему витая пара для 1-wire гораздо предпочтительнее, чем Ваш провод. Попробуйте поверить так.
А Вы знаете толк в извращениях. Возьмите витую пару.
думаете сечение проводов играет роль? вроде чем больше тем меньше потерь
А Вы знаете толк в извращениях. Возьмите витую пару.
думаете сечение проводов играет роль? вроде чем больше тем меньше потерь
то есть нужно 2 GND провода цеплять к одному проводу GND датчика? так же кто как делает на витой паре просто у каждого датчика разрезаем её и вкручиваем датчик или может использует кто скажем тройники витой пары и обжимает? почему с nano в обще звездно образная система работала без проблем, а тут с мега такие косяки даже с шиной на тех же проводах? может косячат библиотеки с nano было всего три OneWire.h и DallasTemperature.h и EEPROM.h а в мегу засунул ещё две UTFT.h и max6675.h может они друг с другом так косячат?
1. При токах аж 1 миллиампер нужен ну очень толстый кабель..... ;)
2. Главная проблема Далласа- ёмкость кабеля.
Разряжает её на землю сам датчик, и с этим неплохо справляется его выходной транзистор, а вот заряжается она через резистор.
То есть фронты из " 0 " в " 1 " обычно затянуты.
И конденсатор по питанию обычно бесполезен.
1 миллиампер легко обеспечит ЛЮБОЙ кондёр на выходе ЛЮБОГО блока питания.
А вот уменьшить раз в 5 длительность именно этого фронта можно просто- уменьшив сопротивление в 5 раз.
Ток будет 5 миллиамперов, что полностью соответствует документации.
Я уже говорил вам об этом- но вы не слушаете.....
Да, и не путайте повышенную защищённость от внешних помех в витой паре с искажениями сигнала внутри кабеля.
1. При токах аж 1 миллиампер нужен ну очень толстый кабель..... ;)
2. Главная проблема Далласа- ёмкость кабеля.
Разряжает её на землю сам датчик, и с этим неплохо справляется его выходной транзистор, а вот заряжается она через резистор.
То есть фронты из " 0 " в " 1 " обычно затянуты.
И конденсатор по питанию обычно бесполезен.
1 миллиампер легко обеспечит ЛЮБОЙ кондёр на выходе ЛЮБОГО блока питания.
А вот уменьшить раз в 5 длительность именно этого фронта можно просто- уменьшив сопротивление в 5 раз.
Ток будет 5 миллиамперов, что полностью соответствует документации.
Я уже говорил вам об этом- но вы не слушаете.....
Да, и не путайте повышенную защищённость от внешних помех в витой паре с искажениями сигнала внутри кабеля.
Дак я и так уменьшил сопротивление заменив 4.7К на 2К вроде у меня и длина шины то всего метров 10-15 и датчиков 6 штук должно всего должно же хватать.
Про мой провод просто изначально он у меня был в наличии я на нем и собрал с nano и работало все и с резистором 4.7к и без внешнего питания, а тут перешол на мегу и получил косяки эти и с меньшим сопротивлением и с внешним питанием. буду пробовать витую пару последний вариант походу
А Вы знаете толк в извращениях. Возьмите витую пару.
думаете сечение проводов играет роль? вроде чем больше тем меньше потерь
Ну вы же не мощьность передаете :) Я не буду Вам сейчас лекцию читать почему витая пара для 1-wire гораздо предпочтительнее, чем Ваш провод. Попробуйте поверить так.
Соглашусь, что ПВС - это перебор.
Но вы попробуйтн меня аргументировано убедить, что витая пара в реальных условиях лучше, чем ШВВП.
Соглашусь, что ПВС - это перебор.
Но вы попробуйтн меня аргументировано убедить, что витая пара в реальных условиях лучше, чем ШВВП.
Зачем мне это? Если Вы этого не понимаете и ленитесь поискать и разобраться - это Ваши проблемы.
Вчера потратил несколько часов пересобирая шину на витойпаре (((( успел только подключить 4 датчика из 6 и все напрасно ошибка -127 все равно лезет но значительно реже то есть словил я её пару раз за 6 часов, думаю если подключу оставшиеся 2 дачика время участится ((( витую делал как предложили выше VCC x GND, SIG x GND
Попробую наверно со всеми 6 датчиками времено поставить nano без экрана посмотрю будет там ошибка или нет, бельше уже не знаю на что думать.
И чем Вам мешает -127 (сбой) один раз в 6 часов (даже раз в несколько минут при постоянном считывании оно не критично, имхо)? Там инертность датчика такая, что потратить ещё секунду-другую на повторное обращение к датчику ничего не должно изменить.
И чем Вам мешает -127 (сбой) один раз в 6 часов (даже раз в несколько минут при постоянном считывании оно не критично, имхо)? Там инертность датчика такая, что потратить ещё секунду-другую на повторное обращение к датчику ничего не должно изменить.
Она возникает на датчике самом дальнем который служит для управления циркулярным насосом то есть в коде есть условие когда температура датчика 6 меньше температуры дачика 5 насос отключается, вот и выходит что когда возникает -127 на шестом дотчике реле насоса отключается
Она возникает на датчике самом дальнем который служит для управления циркулярным насосом то есть в коде есть условие когда температура датчика 6 меньше температуры дачика 5 насос отключается, вот и выходит что когда возникает -127 на шестом дотчике реле насоса отключается
Фейспалм. А в программе задать условие при котором при считывании -127 попробовать считать повторно релингия не позволяет?
CRC на шине иногда могут и возникать - и это нормальное явление.
Но на ваших метрах.... Что-то здесь не так.
Подобное наблюдал когда два шлейфа на одном пине сидело- один с несколькими датчиками, а другой с одним на конце.
Длина кабелей была одинаковая.
Выяснилось что из-за длинных ( метров по 60) линий
при подключении второго переставал работать и первый и наоборот........
Предположил что при опросе дальнего датчика в любом из кабелей
со второго приходил отражённый сигнал от его "оборванного" конца ( а его не спрашивали- поэтому он молчал).
И это эхо приходило одновременно с тем, полезным, с первого кабеля.
Вылечилось вставлением в тот кабель что был с одним датчиком куска метров 20...... в бухте.....
Эхи "разбежались" по времени и больше не мешали.
Но это не правильно, просто выхода другого не было- кабеля были замазаны в стенки
Вот моя приблизительная схема обозначил растояние по шине мужду датчиками и длину отводов от шины до датчиков
Пока прикрутил пятый датчик и дописал условие
if (temp1 <= -127){
temp1 = sensors.getTempC(Thermometer1);
}
если датчик выдает -127 то повторно опрашивается
вроде пару часов без глюков уже работает, но все равно смущает такой выход датчик может и повторно прислать -127 тогда реле вырубится и котелок закипит (((
гыы сколько всего понаписали.... мне так видиться что советчикам просто скучно и они намеренно пропустили одну забавную штуку.
ДИКТУЮ БОЛЬШИМИ БУКВАМИ
просто скрутка и изолента, что их паять
Или еще добавить 8 метров кабеля и соединить по правильному.
куда добавить ещё 8 метров? как раз осталось витой столько ))) соеденить я хочу вот на такие троиники все
http://ru.aliexpress.com/item/Free-shipping-khaki-Plastic-3-Way-RJ45-LAN-Network-Ethernet-Splitter-Connector-1-to-2/32341956822.html
что бы было возможно легко снимать и менять датчики.
Пока вроде изменения в коде вернее условие повтора опроса последнего датчика при ошибке работает без проблем со всеми 6 датчиками по крайне мере за 10 часов не одной ошибки
куда добавить ещё 8 метров? как раз осталось витой столько ))) соеденить я хочу вот на такие троиники все
http://ru.aliexpress.com/item/Free-shipping-khaki-Plastic-3-Way-RJ45-LAN-Network-Ethernet-Splitter-Connector-1-to-2/32341956822.html
что бы было возможно легко снимать и менять датчики.
Пока вроде изменения в коде вернее условие повтора опроса последнего датчика при ошибке работает без проблем со всеми 6 датчиками по крайне мере за 10 часов не одной ошибки
маразм крепчает? зачем снимать и менять датчики? они у вас что гореть будут? тут на форуме есть товарищ у него эти датчики гроздьями висят почти по 100 штук на ветке... воду он там куда то дистилирует... паять нужно, а не скручивать изолентой.. тогда и сигнал перестанет пропадать.
а они работают в таких условиях один греется ежедневно от 40 до 95г иногда по недосмотру и до 110 бывает, другой погружной в воду то же греется и остывает постоянно, так что иногда выходят из строя в основном погружной и основная причина выхода из строя это окисляются ножки их и отваливаются по крайне мере за 2 года я поменял 5 штук и спайкой будет геморно менять
куда добавить ещё 8 метров? как раз осталось витой столько ))) соеденить я хочу вот на такие троиники все
http://ru.aliexpress.com/item/Free-shipping-khaki-Plastic-3-Way-RJ45-LAN-Network-Ethernet-Splitter-Connector-1-to-2/32341956822.html
что бы было возможно легко снимать и менять датчики.
Пока вроде изменения в коде вернее условие повтора опроса последнего датчика при ошибке работает без проблем со всеми 6 датчиками по крайне мере за 10 часов не одной ошибки
маразм крепчает? зачем снимать и менять датчики? они у вас что гореть будут? тут на форуме есть товарищ у него эти датчики гроздьями висят почти по 100 штук на ветке... воду он там куда то дистилирует... паять нужно, а не скручивать изолентой.. тогда и сигнал перестанет пропадать.
нууу не сто конечно а максимум что было 86, только макимум энтот не потому, что не шмогла, а потому, что на одной шине больше не нужно было , и шин таких теперь уже ПЯТЬ. И шина с 86 датчиками длиной, порядка 50 метров и поболее. И сбоила только когда рядом варили электросваркой и когда гроза была ( по сбоям есть статистика за пару лет). И вообще по моему мнению, если её правильно готовить, 1-wire классная штука.
Avgaz-у я посоветовал бы вертикальные сегменты делать не более 50см, резитор подтяжки поставить в конце линии, на питание в конце линии повесить электролит порядка 47 мкф. Питание ( плюс и минус) пустить витой парой, сигнал и минус пустить второй парой. Горизонталь неразрывным шлейфом, ответвления через rj-45.
Хрень вся эта работает у мну из-под бунты через адаптеры USb-1-Wire не помню название, есть на сайте радуги. Дрова owfs. Все остальное писано на пхп , пихается в мискл и показывается апачем - собственное.
ЗЫ. Не дистиллирую я воду , а ректифицирую вакуумно, с целью удаления из оной СТРАШНАГО ДЕЙТЕРИЯ. То есть из H2O+HDO удаляю HDO.
Не читал все ответы по этому вопросу, но я бы попробовал следующее:
- возле КАЖДОГО датчика (на проводах питания) запаял бы электролитический конденсатор ёмкостью 4,7 мкФ, 10 В;
- к КАЖДОМУ датчику (возле самого датчика) подключил бы резистор "подтяжки" 10 кОм;
- на выводе платы ардуины, идущего на линию IO датчиков, тоже установил бы "подтягивающий" резистор 4,7 кОм.
Не читал все ответы по этому вопросу, но я бы попробовал следующее:
- возле КАЖДОГО датчика (на проводах питания) запаял бы электролитический конденсатор ёмкостью 4,7 мкФ, 10 В;
- к КАЖДОМУ датчику (возле самого датчика) подключил бы резистор "подтяжки" 10 кОм;
- на выводе платы ардуины, идущего на линию IO датчиков, тоже установил бы "подтягивающий" резистор 4,7 кОм.
А ты сделай труд и почитай :)
У него все собрано на скрутках и изоленте... чему тут удивляться то? паять ему кажеться долго и не выгодно.
У него все собрано на скрутках и изоленте... чему тут удивляться то? паять ему кажеться долго и не выгодно.
Не думаю что в этом проблема, так как все 6 на скрутке и только один глюкает последний. и то при условии повторного опроса датчика при ошибке -127 глюков больше нет, уже двое суток.
Не думаю что в этом проблема, так как все 6 на скрутке и только один глюкает последний. и то при условии повторного опроса датчика при ошибке -127 глюков больше нет, уже двое суток.
мдаааа ну тогда конечно. я щас все платы выкину и буду просто скручивать и заматывать изолентой.. не подскажете как к чипу со 144 ногами прикрутить изолентой провода?
повторное опрашивание это костыль! там чтение может раза с 15 проходит.. а не со второго..
не ваш проект случайно? тож через повторное чтение сделали :)
Не думаю что в этом проблема, так как все 6 на скрутке и только один глюкает последний. и то при условии повторного опроса датчика при ошибке -127 глюков больше нет, уже двое суток.
мдаааа ну тогда конечно. я щас все платы выкину и буду просто скручивать и заматывать изолентой.. не подскажете как к чипу со 144 ногами прикрутить изолентой провода?
повторное опрашивание это костыль! там чтение может раза с 15 проходит.. а не со второго..
не ваш проект случайно? тож через повторное чтение сделали :)
Ну не преувеличивайте, согласен что пайка намного лучше, но нормальная скрутка в 1см то же сойдет я же не к ногам скручивал, к ножкам датчика припаян провод, а уже этот провод в общею шину на скрутку, выше писал что у меня датчики в гильзах с 1метром провода.
Повторный опрос происходит всего один раз, а не циклически пока не придут данные то есть вот так
if (temp1 <= -127){
temp1 = sensors.getTempC(Thermometer1);
}
спорим если взять витую пару как советовали выше и пропаять все датчики. то легко можно и пару сотен повесить?