Датчик DS18B20 с контролем работоспособности

есть сигнал обрыва, только один датчин на один пин

Пользовательские блоки расширяющие базовый функуионал программы по работе с различными датчиками и энкодерами
Правила форума
Рекомендации по размещению блоков:
Автор блока создает подробное описание блока, отличие от подобных(если есть на данный момент).Сложные блоки очень желательно с примерами.
При выходе новых версий редактирует/дополняет свой первый пост с указанием даты, версии, причины.
В каждой теме обсуждается только выложенный автором блок - баги, возможность (или предложение) доработки и прочие хотелки.
Свои блоки, переработанные, с другими библиотеками, протоколами и т.д.- размещаем либо сами отдельно, либо обсуждаем и дорабатываем в форуме Разработка блоков.
Пользователи улучшив блок автора и проверив его работоспособность - могут обратиться к автору или модераторам с просьбой добавить их версию блока в первое сообщение темы.
Аватара пользователя
RedSky
Лейтенант
Сообщения: 575
Зарегистрирован: 19.12.2016{, 20:07}
Репутация: 72
Откуда: Днепропетровск
Имя: Алексей

Датчик DS18B20 с контролем работоспособности

#1

Сообщение RedSky » 27.10.2018{, 00:57}

Дальнейшая доработка моего блока (выкладывал на старом форуме), упростил использование в проекте, теперь не надо генераторов и триггеров.
Блок служит для опроса одного датчика (только один датчик на один пин). Реализован контроль работоспособности датчика.
Не требуется прописывать адрес датчика, можно заменять датчик без отключения устройства.
Работает следующим образом: сразу после включения контроллера или подключения датчика происходит частый опрос шины (каждые 800 мс), на выходе "error" при этом высокий уровень, в случае нахождения датчика происходит измерение температуры. Выход "error" будет сброшен после следующего опроса, это нужно что бы пропустить некорректные 85 градусов. Далее опрос происходит с заданным периодом (вход "period"). В случае обрыва датчика поиск снова выполняется с периодом 800 мс независимо от установленного периода опроса. Опрос происходит только при наличии высокого уровня на входе "EN"
Входы:
EN - разрешение опроса
period - период опроса, мс
Выходы:
temp - температура
crcOK - контрольная сумма правильная
error - обрыв линии данных, нет питания датчика, датчик неисправен
Параметры пользователя:
pins - номер пина для подключения датчика
Нужна библиотека OneWire.
ds18b20_error_Ver_0.2_(CODE).ubi
(86.44 КБ) 556 скачиваний


Добавил новый блок, т. к. старый не обеспечивал должной надёжности. Теперь контроль более строгий, контрольная сумма принимается в расчёт в любом случае. Выход ошибки теперь один, по прежнему когда есть ошибка опрос максимально частый независимо от заданного времени для максимально быстрого восстановления рабочего состояния. В остальном без изменений.
ds18b20_errorCRCVer_0.2_(Code_-_Basic).ubi
(171.12 КБ) 307 скачиваний

Переписал блок в новом редакторе. Некоторые вычисления упрятал в функции - меньший расход памяти при использовании нескольких блоков. Вход периода опроса теперь подключаемый - возможен опрос по входу EN (через rtrigger, ещё меньше памяти).
Добавил возможность подключения внутреннего подтягивающего резистора (только для тестов, нет необходимости использовать внешний на 4,7к).
ds18b20_v0.2_(Code_-_Professional).ubi
(488 КБ) 100 скачиваний
Последний раз редактировалось RedSky 26.05.2023{, 11:43}, всего редактировалось 7 раз.

Аватара пользователя
RedSky
Лейтенант
Сообщения: 575
Зарегистрирован: 19.12.2016{, 20:07}
Репутация: 72
Откуда: Днепропетровск
Имя: Алексей

Датчик DS18B20 с контролем работоспособности

#21

Сообщение RedSky » 25.05.2023{, 18:15}

Переписал блок в новом редакторе. Некоторые вычисления упрятал в функции - меньший расход памяти при использовании нескольких блоков. Вход периода опроса теперь подключаемый - возможен опрос по входу EN (через rtrigger, ещё меньше памяти).
Добавил возможность подключения внутреннего подтягивающего резистора (только для тестов, нет необходимости использовать внешний на 4,7к).

dsfbuy
Сержант
Сообщения: 171
Зарегистрирован: 03.11.2018{, 12:40}
Репутация: 21
Откуда: Братск
Имя: Виктор

Датчик DS18B20 с контролем работоспособности

#22

Сообщение dsfbuy » 26.05.2023{, 09:23}

RedSky, IDE ругается на функцию bool find_signal(byte *find_data, byte condition). Может так должно быть:

Код: Выделить всё

bool find_signal(byte *find_data, byte condition)
{
    //byte j;
        for (byte j=0; j<8; j++)
     {
        if (find_data[j] == condition) return true;
        //else return 0;
     }
return false;
}

Аватара пользователя
RedSky
Лейтенант
Сообщения: 575
Зарегистрирован: 19.12.2016{, 20:07}
Репутация: 72
Откуда: Днепропетровск
Имя: Алексей

Датчик DS18B20 с контролем работоспособности

#23

Сообщение RedSky » 26.05.2023{, 11:22}

dsfbuy писал(а):
26.05.2023{, 09:23}
RedSky, IDE ругается на функцию bool find_signal(byte *find_data, byte condition). Может так должно быть:
КОД: ВЫДЕЛИТЬ ВСЁ

bool find_signal(byte *find_data, byte condition)
{
//byte j;
for (byte j=0; j<8; j++)
{
if (find_data
== condition) return true;
//else return 0;
}
return false;
}
В таком случае всегда ошибка т. к. return false будет независимо от условия. Сделал через промежуточную переменную - компилятор предупреждений не выдаёт, но больший расход памяти на 42 байта.
На работу не влияет. Возможно кто-то ещё подскажет насчёт оптимизации.
Вложения
ds18b20_v0.2_test_(Code_-_Professional).ubi
(485.88 КБ) 32 скачивания

Аватара пользователя
AlexCrane
Капитан
Сообщения: 895
Зарегистрирован: 20.10.2017{, 13:22}
Репутация: 294
Откуда: Ульяновск
Имя: Александр

Датчик DS18B20 с контролем работоспособности

#24

Сообщение AlexCrane » 26.05.2023{, 13:24}

RedSky писал(а):
26.05.2023{, 11:22}
В таком случае всегда ошибка т. к. return false будет независимо от условия.
return прерывает выполнение функции, так что до return false дело не дойдет при выполнении условия.
Если не знаю, то не скажу. Если скажу, то сначала проверю...
Если нет возможности отблагодарить материально, хотя бы оцени пост....

Sams
Рядовой
Сообщения: 22
Зарегистрирован: 31.03.2023{, 13:28}
Репутация: 2
Имя: Вася

Датчик DS18B20 с контролем работоспособности

#25

Сообщение Sams » 22.08.2023{, 14:33}

а под стм32 есть возможность ковырнуть его ?
на экране ничего не отображает

ecoins
Полковник
Сообщения: 2962
Зарегистрирован: 12.02.2016{, 11:40}
Репутация: 455
Откуда: Шатура
Имя: Энвер

Датчик DS18B20 с контролем работоспособности

#26

Сообщение ecoins » 22.08.2023{, 20:15}

Sams писал(а):
22.08.2023{, 14:33}
а под стм32 есть возможность ковырнуть его ?
на экране ничего не отображает
Блок от ecoins

Аватара пользователя
Imran
Сержант
Сообщения: 229
Зарегистрирован: 08.11.2017{, 20:53}
Репутация: 9
Имя: Имран

Датчик DS18B20 с контролем работоспособности

#27

Сообщение Imran » 10.03.2024{, 19:50}

RedSky, Совмести ли с ESP8266 ? У меня не сработало поставил пин 0 (GPIO16) и отедельно пин 16 тоже написал не работает не как.

Ander
Рядовой
Сообщения: 70
Зарегистрирован: 31.10.2023{, 12:50}
Репутация: 12
Имя: Андрей

Датчик DS18B20 с контролем работоспособности

#28

Сообщение Ander » 10.03.2024{, 20:32}

Совместим возьмите не D0

Аватара пользователя
Imran
Сержант
Сообщения: 229
Зарегистрирован: 08.11.2017{, 20:53}
Репутация: 9
Имя: Имран

Датчик DS18B20 с контролем работоспособности

#29

Сообщение Imran » 10.03.2024{, 20:53}

Ander, поменял на D5 (GPIO14) зависает контроллер точнее дисплей (OLED SSD1306) перестает работать или же данные перестают поступать

Mazur
Рядовой
Сообщения: 61
Зарегистрирован: 31.08.2023{, 13:43}
Репутация: 2
Имя: Денис

Датчик DS18B20 с контролем работоспособности

#30

Сообщение Mazur » 11.03.2024{, 09:22}

хз блок рабочий 6 датчиков вешал на 6 пинов

Аватара пользователя
RedSky
Лейтенант
Сообщения: 575
Зарегистрирован: 19.12.2016{, 20:07}
Репутация: 72
Откуда: Днепропетровск
Имя: Алексей

Датчик DS18B20 с контролем работоспособности

#31

Сообщение RedSky » 11.03.2024{, 11:14}

Ander писал(а):
10.03.2024{, 20:32}
Совмести ли с ESP8266 ?
У gpio16 свои особенности - может не работать.
Точно работает на 12, 13, 14.

Ander
Рядовой
Сообщения: 70
Зарегистрирован: 31.10.2023{, 12:50}
Репутация: 12
Имя: Андрей

Датчик DS18B20 с контролем работоспособности

#32

Сообщение Ander » 11.03.2024{, 12:17}

Imran писал(а):
10.03.2024{, 20:53}
Ander, поменял на D5 (GPIO14) зависает контроллер точнее дисплей (OLED SSD1306) перестает работать или же данные перестают поступать
Приложите проект, ускорит решение проблемы!

Аватара пользователя
Rovki
Полковник
Сообщения: 4880
Зарегистрирован: 22.04.2016{, 17:25}
Репутация: 268
Откуда: Чехов
Имя: Анатолий
Контактная информация:

Датчик DS18B20 с контролем работоспособности

#33

Сообщение Rovki » Сегодня{, 08:26}

Если использвать 1-3,4 датчика на каждый пин ,то можно и другие датчики найти температуры . Главное приемущество 1-wire - это использование большого количества датчиков ds18b20 на значительное расстояние .Многие авторы блоков пошли по пути- один датчик , один пин. А жаль, теряется смысл шины 1-wire...
Использовал штатный блок и опрашивал до 16 датчиков. Все хорошо, но вот выход error , что то не работает :( .
Электронщик до мозга костей и не только

slsl
Рядовой
Сообщения: 72
Зарегистрирован: 08.12.2021{, 22:41}
Репутация: 8
Имя: Вячеслав

Датчик DS18B20 с контролем работоспособности

#34

Сообщение slsl » Сегодня{, 08:54}

Rovki писал(а):
Сегодня{, 08:26}
Многие авторы блоков пошли по пути- один датчик , один пин. А жаль, теряется смысл шины 1-wire...
Ну дык, гемор при подключении и замене датчика(ов), зачастую перевешивает всю прелесть шины.

Аватара пользователя
Rovki
Полковник
Сообщения: 4880
Зарегистрирован: 22.04.2016{, 17:25}
Репутация: 268
Откуда: Чехов
Имя: Анатолий
Контактная информация:

Датчик DS18B20 с контролем работоспособности

#35

Сообщение Rovki » Сегодня{, 09:17}

slsl писал(а):
Сегодня{, 08:54}
Rovki писал(а):
Сегодня{, 08:26}
Многие авторы блоков пошли по пути- один датчик , один пин. А жаль, теряется смысл шины 1-wire...
Ну дык, гемор при подключении и замене датчика(ов), зачастую перевешивает всю прелесть шины.
У меня сделано так- все датчики подключаю на 1 шину по очереди , по одному. в веб интерфейсе задаю номер датчика (1-16) и нажимаю кнопку сканирование... и так для каждого датчика . Делается это один раз. При выходе из строя одного датчика (например 5) , откидываю шину от контроллера и сканирую новый датчик (под номером 5). Ставлю датчик на место и подключаю общею шину...Все (5 минут на замену). Быстродействие не волнует , потому как для работы с датчиками (только) использую отдельную ЕСП 8285 с веб интерфейсом. Значения температур со всех датчиков складываю в регистры , которые мастер (МК) считыват по UART (modbus RTU). датчики раскинуты в пределах 100метров. В вебинтерфейсе так же наблюдаю все температуры с датчиков, задаю уставки в энергонезависимую память для МК. Задаю скрость по uart. Если нужно можно пдключиться к локальной сети... :smile37:
Ну не 48 же проводов тянуть :D (16х3)...

Отправлено спустя 7 минут 56 секунд:
Есть две разновидности таких плат на базе ESP8285
1. 1wire-UART
2. 2Wire- RS485
Электронщик до мозга костей и не только

Аватара пользователя
Rovki
Полковник
Сообщения: 4880
Зарегистрирован: 22.04.2016{, 17:25}
Репутация: 268
Откуда: Чехов
Имя: Анатолий
Контактная информация:

Датчик DS18B20 с контролем работоспособности

#36

Сообщение Rovki » Сегодня{, 09:26}

Rovki писал(а):
Сегодня{, 09:25}
slsl писал(а):
Сегодня{, 08:54}
Rovki писал(а):
Сегодня{, 08:26}
Многие авторы блоков пошли по пути- один датчик , один пин. А жаль, теряется смысл шины 1-wire...
Ну дык, гемор при подключении и замене датчика(ов), зачастую перевешивает всю прелесть шины.
У меня сделано так- все датчики подключаю на 1 шину по очереди , по одному. в веб интерфейсе задаю номер датчика (1-16) и нажимаю кнопку сканирование... и так для каждого датчика . Делается это один раз. При выходе из строя одного датчика (например 5) , откидываю шину от контроллера и сканирую новый датчик (под номером 5). Ставлю датчик на место и подключаю общею шину...Все (5 минут на замену). Быстродействие не волнует , потому как для работы с датчиками (только) использую отдельную ЕСП 8285 с веб интерфейсом. Значения температур со всех датчиков складываю в регистры , которые мастер (МК) считыват по UART (modbus RTU). датчики раскинуты в пределах 100метров. В вебинтерфейсе так же наблюдаю все температуры с датчиков, задаю уставки в энергонезависимую память для МК. Задаю скрость по uart. Если нужно можно пдключиться к локальной сети... :smile37:
Ну не 48 же проводов тянуть :D (16х3)...

Отправлено спустя 7 минут 56 секунд:
Есть две разновидности таких плат на базе ESP8285
1. 1wire-UART
2. 1Wire- RS485
Отправлено спустя 49 минут 32 секунды:
Без веб интерфейса , согласен - гемор :yes:
Электронщик до мозга костей и не только

Ответить

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