Уточнение по поводу много 18B20
- Войдите на сайт для отправки комментариев
Вс, 06/12/2015 - 20:08
Хочу уточнить по поводу подключения Dallas 18B20. Если один то все понятно: три провода, датчик, резистор 4,7К. А вот если несколько 18B20: надо ОДИН резистор на всю шину или на КАЖДЫЙ датчик свой резистор 4,7К? И насколько обязателен конденсатор между проводами питания? Если да, то какой: обычный или электролит? Какой емкости?
http://www.tweaking4all.com/wp-content/uploads/2014/03/ds18b20-normal-power.jpg
Конденсатор по питанию уже есть на плате Arduino. Но можно поставить еще один электролит, хуже не будет.
Я вешаю резистор и электролит на конце линии ( длина которой кстати достигает 50 метров и 80 с лишним датчиков).
2 Tomasina. Спасибо, т.е. таки один и в начале линии судя по рисунку.
Я вешаю резистор и электролит на конце линии ( длина которой кстати достигает 50 метров и 80 с лишним датчиков).
И на сколько электролит, если не секрет? Кабель с экранированием? И ни один датчик не показывает -127.0?
Электролит 10мкф, и керамика 0.2-0.1
витая пара - одна пара : питание , вторая : сигнал и земля
резистор один и В КОНЦЕ ЛИНИИ ! Вместе с электролитьм и керамикой.
и что, все 80 датчиков работают ?
2 inspiritus. Спасибо! Попробую такой способ.
inspiritus, резистор в конце, так сложилось или был эксперимент? Т.к везде вроде рекомендуют ставить в начале шлейфа.
Электролит 10мкф, и керамика 0.2-0.1
витая пара - одна пара : питание , вторая : сигнал и земля
резистор один и В КОНЦЕ ЛИНИИ ! Вместе с электролитьм и керамикой.
А как включать электролит, керамику? Между землёй и сигналом?
нет, по питанию.
Конечно по питанию
была разработка с многими апробациями
работает боевая производственная система с десятками датчиков на луче длиной более 50 м в окружении кучи железа.
были времена, когда зернет жил в коаксиале, терминатор вешали на конце линии.
нет, по питанию.
Конечно по питанию
Резистор, я так понимаю, нужен для гашения отражённых сигналов, но он вешается между землёй и сигналом,
а в чём смысл вешать и электролит, и керамику между питанием и землёй, одного чего-то недостаточно?
электролит имеет высокую емкость и компенсирует провалы напряжения, кераимка имеет очень малую емкость, но высокое быстродействие и подавляет высокочастотные помехи.
Индуктивность у электролитов ощутимая, и внутреннее сопротивление тоже. А у керамики маленькие.
Электролит 10мкф, и керамика 0.2-0.1
витая пара - одна пара : питание , вторая : сигнал и земля
резистор один и В КОНЦЕ ЛИНИИ ! Вместе с электролитьм и керамикой.
Не совсем понятно: "витая пара - одна пара : питание , вторая: сигнал и земля". Ведь питание "минус" и "земля" - это одно и то же. Просто два провода соедененных вместе?
Я выделил из витой пары три провода: "минус", "+5V", "сигнал". Между "минус" и "+5V" в конце линии поставил и электролит, и керамику. Между "минус" и "сигнал" в конце линии резистор на 4,7К. Для питания других датчиков выделил из витой пары другие провода. Длина всего 10м. Всего два 18В20. Один в помещении, другой на улице. Все равно, примерно в 2-5% замеров в сутки из примерно 280 замеров один из датчиков выдает либо "-127.00", либо с обоих одинаковые показания: тот, что в конце линии на улице показывает температуру точь в точь такую же, как и первый в помещении.
Витая пара и датчики - новые. То же было и без конденсаторов на старом проводе, старых датчиках, на каждом из которых был резистор. У меня все мысли закончились как побороть.
"витая пара - одна пара : питание , вторая: сигнал и земля".- две ПАРЫ проводов , которые свиты между собой, а не три раздельных проводка. И резистор - между плюсом питания и средним выводом датчика .Одна пара - это плюс и минус питания , а вторая пара - опять минус питания и сигнал с датчика. То есть : минус питания и в первой паре , переплетающийся с плюсом , и во второй паре , переплетающийся с сигнальным проводом.
Почти.
Только на каждой точке подключения датчика я подключаю gnd датчика на gnd пары питания и gnd сигнальной пары.
Очень важно резистор 4.7 ком вешать между сигналом и питанием на самом дальнем датчике.
Когда линия длинная, или датчиков много на дальнем датчике надо вешать электролит на питание, иначе периодически может не хватать питания при преобразовании и вылетает показание 85 гр.
если проблема питания стоит очень остро( очень длинная линия или очень много датчиков) по паре питания запускаем 12в а питание организуем по группам дополнительной парой с применением различных стабилизаторов на 5в ( 7805 или импульсных по желанию).
Подскажите где можно найти описание библиотеки ONEWare на нормальном русском языке и как можно более подробное. Или может кто объяснит как напрямую обратится к датчику подключенному на конкретном пине и имеющего конкретный адрес. Потом счетать с него температуру, записать это значение какой то переменной (для последующего использования) и вывести данные на монитор. Хочу подключить каждый датчик на свой пин. 2 библиотеки я подключил, все вроде присвоил, непонятен алгоритм считывания измерения, какая последовательность и какие функции
Что-то мне подсказывает, что подробнее, чем исходный код библиотеки и скетчей к ней, найти врядли удасться. Тем более, на русском.
Если дело касается датчиков 18B20, то почему бы не использовать библиотеку DallasTemperature которая работает поверх OneWire? Имхо, с ней работать намного удобнее.
Описания такого не встречал, но на хрена адресные датчики вешать на раздельные пины? Загадкас.(((((
#define ONE_WIRE_BUS_WATER_PIN A1 // water sensor pin
OneWire oneWireWaterSensor(ONE_WIRE_BUS_WATER_PIN);
DallasTemperature waterSensor(&oneWireWaterSensor);
setup
waterSensor.begin();
waterSensor.setResolution(TEMPERATURE_PRECISION);
loop
waterTemp=waterSensor.getTempCByIndex(0);
У меня нашлось , и никакого адреса знать не хочу, какой воткнул- тот и работает.
Тем более их всего два..... и пинов не жалко
Посмотрите http://arduino.ru/forum/programmirovanie/arduino-i-termodatchiki-ds18b20-na-raznykh-vyvodakh
Что-то мне подсказывает, что подробнее, чем исходный код библиотеки и скетчей к ней, найти врядли удасться. Тем более, на русском.
Если дело касается датчиков 18B20, то почему бы не использовать библиотеку DallasTemperature которая работает поверх OneWire? Имхо, с ней работать намного удобнее.
Возможно, у меня подключается и одна и другая библиотеки, чесно говоря какая команда к какой относится незнаю, все познается на примерах и методом тыка, поэтому есть проблемы.
Описания такого не встречал, но на хрена адресные датчики вешать на раздельные пины? Загадкас.(((((
Просто есть сомнения в надежности и стабильности работы. Самое простое вылетел штырек из гнезда ардуино и все вся гирлянда датчиков накрылась. Эти разъёмы самое слабое место, хоть бери и припаивайся к разьему
Спасибо, буду изучать
Описания такого не встречал, но на хрена адресные датчики вешать на раздельные пины? Загадкас.(((((
А причем здесь дуина и готовый девайс? Плата, пайка, нормальные разъемы и т.д. Можно нану на плату, иначе никак. ИМХО.
Вопрос по быстродействию! Возможно ли так запрограммировать: За 1 секунду опросить 10 датчиков (параллельно)?
Например, сперва всем раздать команду 0x44, а потом по всем 0xBE со считыванием .read_bytes(data, 9);? Как бы параллельно? У меня пока не получилось... (С использованием только #include <OneWire.h>)
Плохо ищите. Всю тему почитайте, у ТС на WDT, но ниже и с миллис есть. Масштабируется легко, автоопределение адресов не делалось.
AVR параллельно не умеет.
Спасибо! Вот в чем был затык (???), при этом правильно считывался только второй датчик:
1
ds.reset();
2
ds.select(ADDR[0]);
3
ds.write(0x44, 1);
//Команда на конвертацию
4
ds.reset();
5
ds.select(ADDR[1]);
6
ds.write(0x44, 1);
//Команда на конвертацию
7
delay(1000);
Теперь, конечно, оба:
1
ds.reset();
2
ds.write(0xCC);
//Обращение ко всем датчикам
3
ds.write(0x44, 1);
4
delay(1000);
А delay(1000):, это по религиозным соображениям?
Нет, конечно, а типа, сосредоточился предельно на этом куске... пока не понял,почему не работает... delay ставил и между двумя 0x44 -ми "командами"..
Работать будет и без delay(), только старую температуру отдавать.
Год назад я жаловался в этой теме:
> Кстати, как только начались морозы, если температура падает ниже -16, то наружный датчик дает сплошные -127.00
Теперь готов сказать решение. Вернее, обходной маневр. Такое возникает если пользоваться функцией из библиотеки DallasTemperature
1
sensors.getTempC(deviceAddress);
Если вместо этого взять кусок из примера работы с OneWire:
01
float
getTemperature(DeviceAddress deviceAddress)
02
{
03
byte
i;
04
byte
present = 0;
05
byte
type_s;
06
byte
data[12];
07
float
tempC;
08
09
oneWire.reset();
10
oneWire.select(deviceAddress);
11
oneWire.write(0x44, 1);
// start conversion, with parasite power on at the end
12
13
present = oneWire.reset();
14
oneWire.select(deviceAddress);
15
oneWire.write(0xBE);
// Read Scratchpad
16
17
for
( i = 0; i < 9; i++) {
// we need 9 bytes
18
data[i] = oneWire.read();
19
}
20
21
// Convert the data to actual temperature
22
// because the result is a 16 bit signed integer, it should
23
// be stored to an "int16_t" type, which is always 16 bits
24
// even when compiled on a 32 bit processor.
25
int16_t raw = (data[1] << 8) | data[0];
26
if
(type_s) {
27
raw = raw << 3;
// 9 bit resolution default
28
if
(data[7] == 0x10) {
29
// "count remain" gives full 12 bit resolution
30
raw = (raw & 0xFFF0) + 12 - data[6];
31
}
32
}
else
{
33
byte
cfg = (data[4] & 0x60);
34
// at lower res, the low bits are undefined, so let's zero them
35
if
(cfg == 0x00) raw = raw & ~7;
// 9 bit resolution, 93.75 ms
36
else
if
(cfg == 0x20) raw = raw & ~3;
// 10 bit res, 187.5 ms
37
else
if
(cfg == 0x40) raw = raw & ~1;
// 11 bit res, 375 ms
38
//// default is 12 bit resolution, 750 ms conversion time
39
}
40
tempC = (
float
)raw / 16.0;
41
42
return
tempC;
43
}
То проблема -127.0 при падении температуры ниже -16 по Цельсию не возникает. Видать, ошибка где-то в DallasTemperature.
DallasTemperature - фффф топку. OneWire - прожиточный и самодостаточный минимум. ИМХО.
Прожиточный и самодостаточный минимум, тогда уж, Assembler для Atmel :) ИМХО
Прожиточный и самодостаточный минимум, тогда уж, Assembler для Atmel :) ИМХО
Если умеете, зачем тогда Ардуина?
Если умеете, зачем тогда Ардуина?
Не умею... :(
Тогда OneWire. Там особо уметь не требуется. А DT - жрущая ресурсы надстройка и ничего больше. Кто к ней привык сейчас ополчаться.))))