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

Пользовательские блоки расширяющие базовый функуионал программы по работе с различными датчиками и энкодерами
Правила форума
Рекомендации по размещению блоков:
Автор блока создает подробное описание блока, отличие от подобных(если есть на данный момент).Сложные блоки очень желательно с примерами.
При выходе новых версий редактирует/дополняет свой первый пост с указанием даты, версии, причины.
В каждой теме обсуждается только выложенный автором блок - баги, возможность (или предложение) доработки и прочие хотелки.
Свои блоки, переработанные, с другими библиотеками, протоколами и т.д.- размещаем либо сами отдельно, либо обсуждаем и дорабатываем в форуме Разработка блоков.
Пользователи улучшив блок автора и проверив его работоспособность - могут обратиться к автору или модераторам с просьбой добавить их версию блока в первое сообщение темы.
Ответить
Аватара пользователя
Олег
Полковник
Сообщения: 1532
Зарегистрирован: 13.10.2015{, 16:47}
Репутация: 63
Контактная информация:

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

#1

Сообщение Олег » 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

Deuce
Сержант
Сообщения: 170
Зарегистрирован: 20.07.2017{, 17:35}
Репутация: 8

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

#2

Сообщение Deuce » 08.02.2018{, 14:02}

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

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

pan
Полковник
Сообщения: 2860
Зарегистрирован: 13.04.2017{, 11:57}
Репутация: 204
Имя: noname

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

#3

Сообщение pan » 08.02.2018{, 16:36}

Deuce,
в стандартном блоке это всё есть. и вход разрешения. и период опроса.
СпойлерПоказать
Изображение
если надо сильно плавно то сделайте усреднение их нескольких показаний

Deuce
Сержант
Сообщения: 170
Зарегистрирован: 20.07.2017{, 17:35}
Репутация: 8

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

#4

Сообщение Deuce » 08.02.2018{, 16:58}

Я просто пытаюсь понять, где у меня косяк.
"У меня достаточно хлопот с собственными недостатками, чтобы ещё раздражаться из-за того, что Бог не позаботился равномерно распределить между людьми умственные способности" (Дейл Карнеги)

Аватара пользователя
Abarmotovi4
Рядовой
Сообщения: 24
Зарегистрирован: 19.12.2017{, 21:16}
Репутация: 1
Откуда: Могилев
Имя: Георгий

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

#5

Сообщение Abarmotovi4 » 08.02.2018{, 19:36}

Deuce, собрал метеостанцию блок + генератор все работает. Настройки блока проверяли? Адрес датчика, пин 1wire.

Deuce
Сержант
Сообщения: 170
Зарегистрирован: 20.07.2017{, 17:35}
Репутация: 8

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

#6

Сообщение Deuce » 09.02.2018{, 09:08}

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

Serg_Grn
Лейтенант
Сообщения: 333
Зарегистрирован: 11.02.2018{, 13:07}
Репутация: 36
Имя: Сергей

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

#7

Сообщение Serg_Grn » 05.03.2018{, 17:52}

Обнаружилась некорректная работа данного блока - 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" я вывожу на дисплей чтобы видеть моменты появления и пропадания сигнала на этих выходах.

Аватара пользователя
Abarmotovi4
Рядовой
Сообщения: 24
Зарегистрирован: 19.12.2017{, 21:16}
Репутация: 1
Откуда: Могилев
Имя: Георгий

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

#8

Сообщение Abarmotovi4 » 05.03.2018{, 21:58}

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

Serg_Grn
Лейтенант
Сообщения: 333
Зарегистрирован: 11.02.2018{, 13:07}
Репутация: 36
Имя: Сергей

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

#9

Сообщение Serg_Grn » 06.03.2018{, 10:35}

Я использовал блок без генератора, подключал ко входу генератор и RTrig.

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

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

Serg_Grn
Лейтенант
Сообщения: 333
Зарегистрирован: 11.02.2018{, 13:07}
Репутация: 36
Имя: Сергей

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

#10

Сообщение Serg_Grn » 25.03.2018{, 14:22}

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

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

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

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

Аватара пользователя
Abarmotovi4
Рядовой
Сообщения: 24
Зарегистрирован: 19.12.2017{, 21:16}
Репутация: 1
Откуда: Могилев
Имя: Георгий

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

#11

Сообщение Abarmotovi4 » 26.03.2018{, 22:05}

Serg_Grn, буду пробовать. Пока еще не выпускают с командировки). Есть одна задумка по реалищации блока, но это позже.

Serg_Grn
Лейтенант
Сообщения: 333
Зарегистрирован: 11.02.2018{, 13:07}
Репутация: 36
Имя: Сергей

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

#12

Сообщение Serg_Grn » 27.03.2018{, 19:57}

Abarmotovi4, спасибо за реакцию и заинтересованность!

Аватара пользователя
Batman55
Рядовой
Сообщения: 9
Зарегистрирован: 29.11.2015{, 09:30}
Репутация: 0
Откуда: Omsk

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

#13

Сообщение Batman55 » 28.09.2018{, 21:18}

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

Аватара пользователя
Abarmotovi4
Рядовой
Сообщения: 24
Зарегистрирован: 19.12.2017{, 21:16}
Репутация: 1
Откуда: Могилев
Имя: Георгий

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

#14

Сообщение Abarmotovi4 » 01.10.2018{, 09:18}

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

Аватара пользователя
SergeyShikal
Лейтенант
Сообщения: 574
Зарегистрирован: 30.08.2018{, 17:15}
Репутация: 47
Откуда: Иркутская область
Имя: Сергей

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

#15

Сообщение SergeyShikal » 01.10.2018{, 17:32}

У меня реализовано вот так
Вложения
Авария.flp
(173.62 КБ) 160 скачиваний

Аватара пользователя
Abarmotovi4
Рядовой
Сообщения: 24
Зарегистрирован: 19.12.2017{, 21:16}
Репутация: 1
Откуда: Могилев
Имя: Георгий

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

#16

Сообщение Abarmotovi4 » 07.10.2018{, 20:15}

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

Ответить

Вернуться в «Датчики и энкодеры»