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

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

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

Сообщение Олег »

[ · Скачать удаленно (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 июл 2017, 17:35

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

Сообщение Deuce »

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

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

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

Сообщение pan »

[ref]Deuce[/ref],
в стандартном блоке это всё есть. и вход разрешения. и период опроса.
[spoiler]Изображение[/spoiler]

если надо сильно плавно то сделайте усреднение их нескольких показаний
Deuce
Сержант
Сообщения: 170
Зарегистрирован: 20 июл 2017, 17:35

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

Сообщение Deuce »

Я просто пытаюсь понять, где у меня косяк.
"У меня достаточно хлопот с собственными недостатками, чтобы ещё раздражаться из-за того, что Бог не позаботился равномерно распределить между людьми умственные способности" (Дейл Карнеги)
Аватара пользователя
Abarmotovi4
Рядовой
Сообщения: 24
Зарегистрирован: 19 дек 2017, 21:16
Откуда: Могилев
Имя: Георгий

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

Сообщение Abarmotovi4 »

[ref]Deuce[/ref], собрал метеостанцию блок + генератор все работает. Настройки блока проверяли? Адрес датчика, пин 1wire.
Deuce
Сержант
Сообщения: 170
Зарегистрирован: 20 июл 2017, 17:35

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

Сообщение Deuce »

Abarmotovi4 писал(а): 08 фев 2018, 19:36Настройки блока проверяли? Адрес датчика, пин 1wire.
Если собрать новый проект с этим блоком - все работает. Пытаюсь заменить "прямое" получение температуры в другом проекте - не работает. причем, дошло до забавного: прописал адрес одного датчика, а температура поступает с другого. Буду детально изучать феномен :)
"У меня достаточно хлопот с собственными недостатками, чтобы ещё раздражаться из-за того, что Бог не позаботился равномерно распределить между людьми умственные способности" (Дейл Карнеги)
Serg_Grn
Лейтенант
Сообщения: 338
Зарегистрирован: 11 фев 2018, 13:07
Имя: Сергей
Благодарил (а): 5 раз
Поблагодарили: 1 раз

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

Сообщение 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" я вывожу на дисплей чтобы видеть моменты появления и пропадания сигнала на этих выходах.
Аватара пользователя
Abarmotovi4
Рядовой
Сообщения: 24
Зарегистрирован: 19 дек 2017, 21:16
Откуда: Могилев
Имя: Георгий

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

Сообщение Abarmotovi4 »

[ref]Serg_Grn[/ref], проверял на блоке с генератором, температура в 0 не падает, а продолжает выдавать последнюю измеренную. Выходы crcOK и error не проверял. Сейчас в командировке, приеду недели через, если не решиться, будем исправлять)
Serg_Grn
Лейтенант
Сообщения: 338
Зарегистрирован: 11 фев 2018, 13:07
Имя: Сергей
Благодарил (а): 5 раз
Поблагодарили: 1 раз

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

Сообщение Serg_Grn »

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

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

Спасибо за участие)
Serg_Grn
Лейтенант
Сообщения: 338
Зарегистрирован: 11 фев 2018, 13:07
Имя: Сергей
Благодарил (а): 5 раз
Поблагодарили: 1 раз

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

Сообщение Serg_Grn »

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

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

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

Думаю, было бы неплохо объединить весь реализованный таким путем функционал в один блок, да ещё с возможностью подключения нескольких датчиков на 1 Pin.
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Аватара пользователя
Abarmotovi4
Рядовой
Сообщения: 24
Зарегистрирован: 19 дек 2017, 21:16
Откуда: Могилев
Имя: Георгий

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

Сообщение Abarmotovi4 »

[ref]Serg_Grn[/ref], буду пробовать. Пока еще не выпускают с командировки). Есть одна задумка по реалищации блока, но это позже.
Serg_Grn
Лейтенант
Сообщения: 338
Зарегистрирован: 11 фев 2018, 13:07
Имя: Сергей
Благодарил (а): 5 раз
Поблагодарили: 1 раз

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

Сообщение Serg_Grn »

[ref]Abarmotovi4[/ref], спасибо за реакцию и заинтересованность!
Аватара пользователя
Batman55
Рядовой
Сообщения: 9
Зарегистрирован: 29 ноя 2015, 09:30
Откуда: Omsk

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

Сообщение Batman55 »

Abarmotovi4 писал(а): 26 мар 2018, 22:05[ref]Serg_Grn[/ref], буду пробовать. Пока еще не выпускают с командировки). Есть одна задумка по реалищации блока, но это позже.
Делаю себе небольшой проект, с несколькими датчиками, хотелось бы блок, с авариями, и на одном пине.
Аватара пользователя
Abarmotovi4
Рядовой
Сообщения: 24
Зарегистрирован: 19 дек 2017, 21:16
Откуда: Могилев
Имя: Георгий

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

Сообщение Abarmotovi4 »

[/quote] хотелось бы блок, с авариями, и на одном пине.[/quote]
Мне бы тоже хотелось;) Проделанный поиск вариантов решения не привел к прложительному результату, на ланный момент не знаю как можно реализовать индикацию аварии при обрыве шины данных. Если у кого-то есть предложения, готов выслушать.
Аватара пользователя
SergeyShikal
Лейтенант
Сообщения: 593
Зарегистрирован: 30 авг 2018, 17:15
Откуда: Иркутская область
Имя: Сергей
Благодарил (а): 2 раза
Поблагодарили: 1 раз

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

Сообщение SergeyShikal »

У меня реализовано вот так
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Аватара пользователя
Abarmotovi4
Рядовой
Сообщения: 24
Зарегистрирован: 19 дек 2017, 21:16
Откуда: Могилев
Имя: Георгий

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

Сообщение Abarmotovi4 »

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

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

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 6 гостей