Дисплеи, датчики и прочие функциональные узлы, управляемые МК.
Ответить

Работа с датчиком HDT11

Вс июл 28, 2019 08:04:16

Здравствуйте.

Понадобилось мне добавить в устройство датчик влажности. Купил на али. Написал код. Но не работает. Несколько дней бился, но так и не смог добиться результата.

Имею вот такую программу


На УАРТ ничего не идет.
Вот что показывает логический анализатор, подключенный на ножку данных датчика
Изображение
Только передний "провал" показывает длительностью 18ms. Потом все импульсы и паузы, либо длительностью 50, либо 100 us.
Причем, посылка делается один раз. Потом просто высокий уровень стоит.
Не пойму, то ли с программой что то, то ли датчик неисправный какой то пришел.
Может кто то сталкивался с таким?
Спасибо.

Re: Работа с датчиком HDT11

Пн июл 29, 2019 09:12:39

можеть чего поможет
DHT11.pdf
(842.29 KiB) Скачиваний: 65

DHT11_b.pdf
(1.45 MiB) Скачиваний: 60

8)

Re: Работа с датчиком HDT11

Пн июл 29, 2019 10:09:59

Спасибо. Попробую ещё раз с этими документами сверить.

А можно вопрос? Это выложено в педагогических целях (то есть вы там увидели явную ошибку) или все таки это как документ, могущий помочь. Просто вроде не одну диаграмму посмотрел. Ну и делал согласно тем диаграммам.

Re: Работа с датчиком HDT11

Пн июл 29, 2019 11:46:21

Я на основе тех даташитов делал - но... ПОД АССЕМБЛЕРОМ...
8)

Воть ссыль на первый вариант макета
https://radiokot.ru/forum/viewtopic.php ... 7#p2198317
Правда ... даавненько то было...
:roll:
Последний раз редактировалось BOB51 Пн июл 29, 2019 13:24:35, всего редактировалось 1 раз.

Re: Работа с датчиком HDT11

Пн июл 29, 2019 11:55:54

Да какая разница на чем писать, в данном случае.. это ж просто временные диаграммы. есть подозрение, что с датчиком просто что то.. хотелось бы это опровергнуть или подтвердить как то..

Re: Работа с датчиком HDT11

Пн июл 29, 2019 11:58:38

В протеусе 8 есть его модель

Re: Работа с датчиком HDT11

Пн июл 29, 2019 12:37:29

К сожалению нет протеуса и не умею им пользоваться. Да и протеус далек от реальных устройств порою, как я слышал.

Re: Работа с датчиком HDT11

Пн июл 29, 2019 13:51:56

От реальности далеко, но проверить код и поглумиться над DHT то что надо.

Re: Работа с датчиком HDT11

Пн июл 29, 2019 14:10:42

У меня под СИ только адуринки...
А у оных вроде как уже готовая библиотека для DHT11...
Хотя... можно и помутить самоделку...
:roll:

Re: Работа с датчиком HDT11

Пт авг 09, 2019 09:08:46

Я делал и работает. На захвате по таймеру, с внутренним RC генератором. А посему ввёл толеранцию, с которой пришлось поиграться. Сейчас оставил 5uS, но не всегда получаю результат, буду увеличивать.
Асм, мега8.

Re: Работа с датчиком HDT11

Ср авг 14, 2019 02:45:33

Что то я не понял ничего. Не могли бы вы поподробнее объяснить?

Re: Работа с датчиком HDT11

Ср авг 14, 2019 21:45:48

Объяснить что именно? Алгоритм? Так по даташиту всё и делал. Таймер1 - 1 тик=1uS. Генерируем стартовый импульс >1000uS - влетаем в прерывание. В обработчике перенастраиваем таймер на захват. Получаем в регистрах ICR длительность импульсов в uS. А дальше разгребаем, пришёл 0 или 1. Это сдвигом пихаем в байт.
Да, у меня DHT22, но протокол тот же.

Re: Работа с датчиком HDT11

Чт авг 15, 2019 05:32:54

Объяснить что именно? Алгоритм? Так по даташиту всё и делал. Таймер1 - 1 тик=1uS. Генерируем стартовый импульс >1000uS - влетаем в прерывание. В обработчике перенастраиваем таймер на захват. Получаем в регистрах ICR длительность импульсов в uS. А дальше разгребаем, пришёл 0 или 1. Это сдвигом пихаем в байт.
Да, у меня DHT22, но протокол тот же.


А, отличие только что вы на таймерах делали?.. У меня боюсь таймеров не хватит. Или с ними как то извращаться нужно, чтобы комбинировать под разные задачи, что я наверно не осилю.


Непонятны эти слова
А посему ввёл толеранцию, с которой пришлось поиграться.
Их бы объяснить. Догадываюсь о чем, но хотелось бы точно.

Добавлено after 4 hours 36 minutes 21 second:
На другом форуме проверили мой код в протеусе. Код рабочий. Скорее всего проблема с датчиками. Китайцы наверно фуфло прислали.

Re: Работа с датчиком HDT11

Чт авг 15, 2019 09:01:28

На таймерах... можно конечно....
Интервал единицы принимаем за целое
Делим на 8.
Таймер настраиваем на 1/8.
Подсчет переполнений за время приема активной
части импульса и табличный селектор для записи значения бита данных,
соответствующего значению количества переполнений в текущий байт данных
а там 1/2 +/-1/8 это 0, а все, что более - 1.
Как-то так...
:roll:
Только длительность интервалов весьма маахонькая - проще
количество программных задержек использовать.
8)

Re: Работа с датчиком HDT11

Чт авг 15, 2019 09:24:33

С таймерами наверно может и хорошо. Вроде как точнее. Хотя мне кажется для такого датчика точность временных задержек не важна. Но и, как минимум, два у меня уже используются для отсчета времени. Третий тоже под вопросом. Да и сложнее это как то. Постоянно переконфигурировать таймер.

Re: Работа с датчиком HDT11

Чт авг 15, 2019 12:18:15

В моем проекте на программных циклах сделано было.
МК не сильно шустрый - 1МГц (0,000001 секунда на команду).
8)
Воть такой варьянт

это "чистый ассемблер" для MCS51.
Под АВР ку в "чистом асме" переделать не проблема, а вот с Сишным ассемблером (ассемблерные вставки)
я не работаю - там несколько своя специфика.
8)

Re: Работа с датчиком HDT11

Чт авг 15, 2019 21:54:09

Объясняю про толеранцию. В начале библы определяем, что толеранция= допустим,10uS. Когда произошёл захват, т.е. в обработчике прерывания по захвату впихиваем в память содержимое регистра ICR. В основном цикле берём из памяти младший байт - это длительность полученного от датчика импульса в микросекундах. Допустим, ловим импульс 80uS. Проверяем, если длительность <80-10 -это ошибка, если >80+10 - тоже ошибка. Т. е. Фактически ловим импульс 80+-10uS. Может датчик и выдаёт твёрдые интервалы, но с точки зрения внутреннего RC генератора эти интервалы очень растяжимое понятие.
PS. кстати, почему для отсчёта времени надо 2 таймера? Всю работу с временем может делать один самый глупый таймер на борту.
У меня таймер0 считает время, таймер1 занимается датчиком влажности, таймер2 молотит шим.

Добавлено after 26 minutes 10 seconds:
На таймерах... можно конечно....
Интервал единицы принимаем за целое
Делим на 8.
Таймер настраиваем на 1/8.
Подсчет переполнений за время приема активной
части импульса и табличный селектор для записи значения бита данных,
соответствующего значению количества переполнений в текущий байт данных
а там 1/2 +/-1/8 это 0, а все, что более - 1.
Как-то так...
:roll:
Только длительность интервалов весьма маахонькая - проще
количество программных задержек использовать.
8)

Да нет, я я запускаю таймер на захват(после старта) 1 тик= 1uS. И выпрыгиваю в главный цикл, где проверяю флаг, который устанавливается в прерывании по захвату. Соответственно, достаю из RAMа число (оно в микросекундах) и решаю 0 это или 1. И опять в главный цикл. Т.е. не зависаю на 4 mS на датчике.
Т.к.полученное число в микросекундах, просто по ДШ сравниваем (а чё это было) - 0, 1, или ещё какая херь.

Re: Работа с датчиком HDT11

Пт авг 16, 2019 06:58:49

О
PS. кстати, почему для отсчёта времени надо 2 таймера? Всю работу с временем может делать один самый глупый таймер на борту.


Таймеры считаю время для разных функций. Почему? - потому что мне так было проще. Наверно можно и на одном, но не хотел заморачиваться этим, т.к. вроде и так хватало)

Добавлено after 7 hours 1 minute 29 seconds:
dgrett, перечитал еще ваше сообщение несколько раз. Возможно позже и попробую на таймере замутить. Но позже.. Пока хочется хоть как то замутить

Re: Работа с датчиком HDT11

Пт авг 16, 2019 11:31:00

ЗамУчивайте:)

Добавлено after 1 hour 13 minutes 8 seconds:
Но! Т.к. протокол основан на измерении длительности импульсов(1-Wire), то сам атмел велел использовать таймер1 в режиме захвата, имхо.

Добавлено after 11 minutes 31 second:
tux, я в сях ноль полный, но я вижу, что стартовый импульс у вас 1 секунда, а это в 1000 раз больше чем надо. И в других местах тоже mS вместо uS. Подтяжка к плюсу, надеюсь, имеется?

Re: Работа с датчиком HDT11

Сб авг 17, 2019 11:51:47

1 секунда это не стартовый импульс. Это просто задержка после включения. В мс потом только стартовый импульс, который по даташиту равен 18мс. Потом везде микросекунды.

Добавлено after 2 minutes 12 seconds:
Ну и как я уже писал выше - программу проверили в симуляторе, алгоритм рабочий, проблема с вероятностью 99% где то в железе
Ответить