Страница 1 из 1

Датчики DS18B20 на шине 1-Wire (upd 27.12.2017)

Добавлено: 03.01.2018{, 22:29}
Олег
[ · Скачать удаленно (77кБ) ] 20.12.2017, 00:41
Блок создан на С. Предназначен для подключения нескольких датчиков DS18B20 по 1-Wire на одном пине. Один блок - один датчик, номер устанавливаем одинаковый во всех используемых блоках. Реализована проверка CRC и фильтр температур (85 - при включении питания, -127 - при временных потере связи, при обрыве, а так же температуры не входящие в диапазон -50...120). При появлении ошибки, температура на выходе блока выдается из предыдущего замера. Для реализации других функций контроля выполнен выход error (при ошибке 1) и crcOK (при совпадении контрольных сумм 1). Адрес датчика, время опроса, тип питания указываются внутри блока.

Оффтоп: Всем доброго времени суток!!! С FLProg познакомился недавно, очень понравилась логика работы в программе. Вот только не хватает возможностей редактора блоков или я в нем еще не разобрался (хотелось бы создавать блоки как у автора, с выпадающими списками) Это мой первый блок, так что выслушаю ваши вопросы и предложения.

UPD(27.12.2017)
В связи с особенностью программы(большое количество глобальных переменных) добавил измененный блок: задание частоты опроса датчика производится при добавлением на вход "en", генератора (симметричны мультивибратор). Разница в занимаемой памяти будет заметна при использовании большого количества датчиков.
12345
Категория: Блоки пользователей | Добавил: Abarmotovi4

Датчики DS18B20 на шине 1-Wire (upd 27.12.2017)

Добавлено: 08.02.2018{, 14:02}
Deuce
Если вопрос тупой - прошу не судить строго - я начинающий. Вопрос: есть-ли разница в получении и отображении температуры с датчика между этим блоком (который с входом с генератора) и "напрямую" с датчика?
как пример:

Отправлено спустя 56 минут 53 секунды:
Я поясню, чем вызван вопрос: я в проекте использую вариант "напрямую", все работает. Но так как температура "скачет", решил использовать этот блок, с генератором. Ставлю - с датчика нет температуры. Возвращаю "напрямую" - все работает. Пытался сравнить код, единственное, что нашел - проверку блоком CRC. Проверить выходом crcOk не могу пока - удаленно находится МК. Решил спросить тут.

Датчики DS18B20 на шине 1-Wire (upd 27.12.2017)

Добавлено: 08.02.2018{, 16:36}
pan
Deuce,
в стандартном блоке это всё есть. и вход разрешения. и период опроса.
СпойлерПоказать
Изображение
если надо сильно плавно то сделайте усреднение их нескольких показаний

Датчики DS18B20 на шине 1-Wire (upd 27.12.2017)

Добавлено: 08.02.2018{, 16:58}
Deuce
Я просто пытаюсь понять, где у меня косяк.

Датчики DS18B20 на шине 1-Wire (upd 27.12.2017)

Добавлено: 08.02.2018{, 19:36}
Abarmotovi4
Deuce, собрал метеостанцию блок + генератор все работает. Настройки блока проверяли? Адрес датчика, пин 1wire.

Датчики DS18B20 на шине 1-Wire (upd 27.12.2017)

Добавлено: 09.02.2018{, 09:08}
Deuce
Abarmotovi4 писал(а):
08.02.2018{, 19:36}
Настройки блока проверяли? Адрес датчика, пин 1wire.
Если собрать новый проект с этим блоком - все работает. Пытаюсь заменить "прямое" получение температуры в другом проекте - не работает. причем, дошло до забавного: прописал адрес одного датчика, а температура поступает с другого. Буду детально изучать феномен :)

Датчики DS18B20 на шине 1-Wire (upd 27.12.2017)

Добавлено: 05.03.2018{, 17:52}
Serg_Grn
Обнаружилась некорректная работа данного блока - DS18B20(1-wire). Хотя я не исключаю, что просто чего-то не понимаю, прошу меня поправить, если это так.
Описание схемы: датчик DS18B20 подключён к arduino nano по стандартной схеме - питание датчика +5В и Gnd, провод data подключён к 7-му пину и подтянут к питанию (+5в) резистором 4,7к.
Суть проблемы в следующем: при отсоединении от входного pin(а) ардуины сигнального провода (data) датчика, показания температуры становятся равны 0,0. При этом на выходе блока (DS18B20(1-wire)) сохраняется сигнал "crcOK" и нет сигнала "error", то есть выходы блока остаются в том же состоянии, в каком были до отсоединения сигнального провода.
Получается, что обрыв сигнального провода игнорируется и его невозможно определить (по крайней мере посредством сигналов "crcOK" и "error").
Сигналы "crcOK" и "error" я вывожу на дисплей чтобы видеть моменты появления и пропадания сигнала на этих выходах.

Датчики DS18B20 на шине 1-Wire (upd 27.12.2017)

Добавлено: 05.03.2018{, 21:58}
Abarmotovi4
Serg_Grn, проверял на блоке с генератором, температура в 0 не падает, а продолжает выдавать последнюю измеренную. Выходы crcOK и error не проверял. Сейчас в командировке, приеду недели через, если не решиться, будем исправлять)

Датчики DS18B20 на шине 1-Wire (upd 27.12.2017)

Добавлено: 06.03.2018{, 10:35}
Serg_Grn
Я использовал блок без генератора, подключал ко входу генератор и RTrig.

Уточняющий момент: температура "0,0" и отсутствие реакции выходных сигналов "crcOk" и "error" наблюдаю только при отсоединении от ардуины сигнального провода data. Если же отсоединять питание датчика (+ или -), то блок срабатывает правильно - температура остаётся на прежнем значении, уходит сигнал "crcOk" и появляется "error".

Спасибо за участие)

Датчики DS18B20 на шине 1-Wire (upd 27.12.2017)

Добавлено: 25.03.2018{, 14:22}
Serg_Grn
Хочу доложить окончательный вариант решения вопроса с получением сигнала "аварии" датчика DS18B20.
Ввиду того, что как я писал выше, блок DS18B20(1-wire) выдаёт на своих выходах сигналы только при обрыве питания, а при обрыве сигнального провода реакции нет, был взят дополнительно стандартный блок сканирования шины 1-Wire.
При отключении сигнального провода датчика, блок сканирования шины не выдаёт на выходе "1". Однако этот блок игнорирует отключение датчика по питанию.
Таким образом, блоки DS18B20(1-wire) и ScanOneWare по функциям как бы дополняют друг друга: если использовать оба блока одновременно, то можно получить сигнал "аварии" датчика для всех возможных случаев - обрыва сигнального провода или обрыва питания (+ или -).
В результате получилась такая схема:
СпойлерПоказать
Авария датчика.jpg
Блок "или" объединяет сигналы с двух блоков. При ненормальной работе датчика, на выходе блока "или" - "1". Ввиду того, что датчик сканируется периодически, то и на выходе блока периодически проскакивает "1" - когда датчик не опрашивается. Для того, чтобы отфильтровать это, стоят таймеры.

Результат: при нормальной работе датчика, значение переменной "Авария датчика" - "0". При обрыве любого провода датчика, либо при некорректных показаниях, спустя время таймера (1 мин.), срабатывает триггер и на переменной устанавливается "1". Если работа датчика приходит в норму, то спустя время таймера (30 сек.) триггер сбрасывается и в переменной устанавливается "0".

Единственный недостаток такого решения, это невозможность подключить несколько датчиков на 1 pin, ввиду того, что блок сканирования шины "не видит" конкретного датчика, а сканирует шину в общем.

Думаю, было бы неплохо объединить весь реализованный таким путем функционал в один блок, да ещё с возможностью подключения нескольких датчиков на 1 Pin.

Датчики DS18B20 на шине 1-Wire (upd 27.12.2017)

Добавлено: 26.03.2018{, 22:05}
Abarmotovi4
Serg_Grn, буду пробовать. Пока еще не выпускают с командировки). Есть одна задумка по реалищации блока, но это позже.

Датчики DS18B20 на шине 1-Wire (upd 27.12.2017)

Добавлено: 27.03.2018{, 19:57}
Serg_Grn
Abarmotovi4, спасибо за реакцию и заинтересованность!

Датчики DS18B20 на шине 1-Wire (upd 27.12.2017)

Добавлено: 28.09.2018{, 21:18}
Batman55
Abarmotovi4 писал(а):
26.03.2018{, 22:05}
Serg_Grn, буду пробовать. Пока еще не выпускают с командировки). Есть одна задумка по реалищации блока, но это позже.
Делаю себе небольшой проект, с несколькими датчиками, хотелось бы блок, с авариями, и на одном пине.

Датчики DS18B20 на шине 1-Wire (upd 27.12.2017)

Добавлено: 01.10.2018{, 09:18}
Abarmotovi4
[/quote] хотелось бы блок, с авариями, и на одном пине.[/quote]
Мне бы тоже хотелось;) Проделанный поиск вариантов решения не привел к прложительному результату, на ланный момент не знаю как можно реализовать индикацию аварии при обрыве шины данных. Если у кого-то есть предложения, готов выслушать.

Датчики DS18B20 на шине 1-Wire (upd 27.12.2017)

Добавлено: 01.10.2018{, 17:32}
SergeyShikal
У меня реализовано вот так

Датчики DS18B20 на шине 1-Wire (upd 27.12.2017)

Добавлено: 07.10.2018{, 20:15}
Abarmotovi4
SergeyShikal писал(а):
01.10.2018{, 17:32}
У меня реализовано вот так
В данной схеме авария при снижении температуры ниже 0, у меня в блоке реализована авария при обрыве шины data, ищу возможность реализовать контроль состояния шины питания.