Easyelectronics.ru

Электроника для всех
Текущее время: 22 янв 2021, 20:37

Часовой пояс: UTC + 5 часов



JLCPCB – Прототипы печатных плат за $2/5шт. два слоя. $5/5шт. четыре слоя
Крупнейший производитель печатных плат и прототипов. Более 600000 клиентов и свыше 10000 заказов в день!
Получите скидку на почтовую отправку при первом заказе в JLCPCB!

Начать новую тему Ответить на тему  [ Сообщений: 18 ] 
Автор Сообщение
 Заголовок сообщения: Работа с датчиком DHT11
СообщениеДобавлено: 07 авг 2019, 11:24 
Только пришел

Зарегистрирован: 10 июл 2013, 07:16
Сообщения: 20
Здравствуйте.

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

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

Show



На УАРТ ничего не идет.
Во вложении то, что показывает логический анализатор, подключенный на ножку данных датчика.

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

Пока отлаживаю на плате PINBOARD c atmega16 кстати.


Вложения:
logic.PNG
logic.PNG [ 37.81 Кб | Просмотров: 792 ]
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Работа с датчиком DHT11
СообщениеДобавлено: 07 авг 2019, 12:23 
Старожил

Зарегистрирован: 08 авг 2013, 09:43
Сообщения: 3051
Ну уж по DHT11 готового кода масса в сети. Посмотрите чужие рабочие примеры, сравните со своим: https://guesto.ru/atmega-rabota-s-datchikom-dht11/
Плюс вы уверены, что ваш терминал покажем вам "мусор"? Вы же даже цифру влажности не как ASCII выводите в UART.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Работа с датчиком DHT11
СообщениеДобавлено: 07 авг 2019, 12:43 
Только пришел

Зарегистрирован: 10 июл 2013, 07:16
Сообщения: 20
Чужие смотрел. Собственно и писал, опираясь на чужие и документацию. Терминал должен показать все, что выходит с порта. Плюс, на Pinboard есть светодиоды, которые моргают, когда с уарта что то идет. Они не моргают в данном случае.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Работа с датчиком DHT11
СообщениеДобавлено: 07 авг 2019, 12:45 
Только пришел

Зарегистрирован: 10 июл 2013, 07:16
Сообщения: 20
Кстати на код по вашей ссылке я и ориентировался при написании. А примеров в сети именно под голый мк, не ардуино на самом деле не так и много.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Работа с датчиком DHT11
СообщениеДобавлено: 08 авг 2019, 01:47 
Старожил

Зарегистрирован: 16 окт 2013, 01:27
Сообщения: 1688
Видимо не там искали :)

Ниже рабочие процедуры для STM8, изначально переписывал обмен уже даже и не помню с какого контроллера по образу и подобию (кажется это был MSP430)


Код:
//--------------Работа с датчиками влажности----------------
#define RH_PORT GPIOA
#define RH_PIN GPIO_PIN_2

#define RH_INPUT_MODE()  RH_PORT->DDR &= ~RH_PIN            //сбрасываем бит - порт на чтение
#define RH_OUTPUT_MODE() RH_PORT->DDR |=  RH_PIN           // выставляем бит - порт на выход
#define RH_LOW()         RH_PORT->ODR &= (u8)(~RH_PIN)   // лог 0 на выход
#define RH_HIGH()        RH_PORT->ODR |= (u8)RH_PIN       // лог 1 на выход
#define RH_READ()            (RH_PORT->IDR &  (u8)RH_PIN)      // чтение пина


Задержки сделаете сами:
Код:
bool rh_read (void) //Считывание датчика влажности
{
   RH_OUTPUT_MODE();
  DelayMs(18);
   RH_INPUT_MODE();
   delay_50us();
   if (RH_READ())
            return 0;
   delay_80us();
   if (!RH_READ()) return 0;
   while(RH_READ());
   disableInterrupts();
   for(j=0;j<5;j++)
         {
         byteRH[j]=0;
           for(f=0;f<8;f++)
              {
                 while(!RH_READ());
                  delay_30us();
                  if(RH_READ()) byteRH[j]|=1<<(7-f);
                  while(RH_READ());
               }
         }
   enableInterrupts();   
return 1;   
}

volatile char rh_chk(void) // Определение типа датчика
{
   if (byteRH[0]==0 && byteRH[1]==0 && byteRH[2]==0 && byteRH[3]==0) return 0 ; //не подключен датчик
      else
       {
        if (byteRH[0] + byteRH[1] + byteRH[2] + byteRH[3] == byteRH[4])
          {
            if (byteRH[1]==0 && byteRH[3]==0) //если 1 и 3 равны 0 - это dht11
              {
              RH_tem=byteRH[2]*10;
                  RH_hum=byteRH[0]*10;
                  return 11;
              }
            else  // dht22
               {
                  RH_hum = byteRH[0] * 256 + byteRH[1];
                 RH_tem = (byteRH[2] & 0x7F)* 256 + byteRH[3];
                  if (byteRH[2] & 0x80)  RH_tem *= -1;
                  return 22;
               }
          }
         }
}    // на выходе температура и влажность умноженные на 10


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Работа с датчиком DHT11
СообщениеДобавлено: 08 авг 2019, 12:25 
Только пришел

Зарегистрирован: 10 июл 2013, 07:16
Сообщения: 20
Спасибо за код. Но..
1. Хочется понять, где все таки у меня ошибка.
2. Сравнил ваш код и свой и принципиальных отличий вроде не увидел. Кроме того, что вы используете if, а я while. Ну и перед ожиданием ответа я специально занизил время задержки на случай, если вдруг датчик раньше ответит. В первоначальном варианте все задержки были по даташиту, но так же не работало.
Судя по отсутствию ответов по коду - или в нем все нормально и все таки не работает датчик, или никто даже не смотрел, или никто больше не работал с таким датчиком (что вряд ли=)). В идеале хотелось бы чтоб кто то на своем заведомо рабочем датчике проверил мой код =)). Но видимо это только мечты))


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Работа с датчиком DHT11
СообщениеДобавлено: 08 авг 2019, 12:35 
Старожил

Зарегистрирован: 08 авг 2013, 09:43
Сообщения: 3051
Цитата:
Судя по отсутствию ответов по коду

у людей просто нет времени на анализ вашего кода. Тем более вот прямо здесь и сейчас.
Возьмите чужой, заведомо рабочий код, и проверьте работу датчика с ним. Заработает - значит дело не в датчике, а в вашем коде (на 99% в этом уверен). А потом уже видно будет.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Работа с датчиком DHT11
СообщениеДобавлено: 08 авг 2019, 12:53 
Только пришел

Зарегистрирован: 10 июл 2013, 07:16
Сообщения: 20
Я извиняюсь. Но прям рабочего кода, который подходит под мои возможности я не нашел. То есть, чтобы он считывал значение с датчика и выдавал в уарт. Код, ссылку на который вы давали мне не подходит, т.к. там данные идут на ЖК дисплей, библиотеки на который в статье не приложены. Код я брал не с этой статьи, а с какой то другой, но потом сравнивал с этим кодом и принципиальных отличий не видел. В том коде тоже информация выдавалась на дисплей, вроде на ССИ.
Я не требую ответа "здесь и сейчас". Не ответят - никаких претензий. Буду пробовать еще как то решить вопрос. Когда спрашивал тут в последний раз (давно было) - помогли как то быстро просто. Видимо все течет, все меняется. Или вопрос не тот.
Извините еще раз, если что то не так написал


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Работа с датчиком DHT11
СообщениеДобавлено: 08 авг 2019, 21:25 
Заглядывает иногда

Зарегистрирован: 18 дек 2016, 13:53
Сообщения: 30
Может подключили неправильно? Если я не ошибаюсь, он по двум протоколам может работать.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Работа с датчиком DHT11
СообщениеДобавлено: 08 авг 2019, 21:37 
Старожил

Зарегистрирован: 08 авг 2013, 09:43
Сообщения: 3051
Я бы честно посмотрел бы, проверил. Валяется даже DHT11 где-то... мегу16 не найду, но что-то похожее взять можно. Но пока вот некогда совсем. Так что если появится время и будет актуально еще гляну, но не раньше следующей недели.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Работа с датчиком DHT11
СообщениеДобавлено: 09 авг 2019, 00:23 
Старожил

Зарегистрирован: 16 окт 2013, 01:27
Сообщения: 1688
Просто эти датчики (DHT11, DHT22, AM2303) - отстой.
После того как 2 штуки вышли из строя за год, зарекся их использовать, в одном изделии поставил их с дуру (потом пожалел).
P\S сейчас много хороших и надежных вариантов, тот же самый BME280, будет в 100 раз лучше чем выше названные.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Работа с датчиком DHT11
СообщениеДобавлено: 09 авг 2019, 04:22 
Только пришел

Зарегистрирован: 10 июл 2013, 07:16
Сообщения: 20
NStorm писал(а):
Я бы честно посмотрел бы, проверил. Валяется даже DHT11 где-то... мегу16 не найду, но что-то похожее взять можно. Но пока вот некогда совсем. Так что если появится время и будет актуально еще гляну, но не раньше следующей недели.


Думаю будет актуально. Пока живу на чемоданах и не могу заниматься этим нормально. Был бы очень благодарен=). МК принципиального значения не имеет, 16 используется только потому, что стоит в ПИНбоарде. Результат будет все равно на 8меге, скорее всего.

sed_alex писал(а):
Просто эти датчики (DHT11, DHT22, AM2303) - отстой.
После того как 2 штуки вышли из строя за год, зарекся их использовать, в одном изделии поставил их с дуру (потом пожалел).

Хм.. Это печально.. Когда выбирал датчики - не встречал такую информацию
sed_alex писал(а):
P\S сейчас много хороших и надежных вариантов, тот же самый BME280, будет в 100 раз лучше чем выше названные.

Спасибо за наводку. Может быть закажу и попробую с таким, если с DHT ничего не получится.

Tacho писал(а):
Может подключили неправильно? Если я не ошибаюсь, он по двум протоколам может работать.

Да вроде уже несколько раз перепроверял. Протокол вроде один. Могут отличаться подключениями. И судя по коду выше, в байтах данных есть отличия между 11 и 22. Но могу ошибаться.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Работа с датчиком DHT11
СообщениеДобавлено: 09 авг 2019, 11:21 
Старожил

Зарегистрирован: 04 окт 2012, 00:23
Сообщения: 2745
Откуда: Москва
2. The default setting of CKSEL3:0 results in internal RC Oscillator @ 1MHz


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Работа с датчиком DHT11
СообщениеДобавлено: 09 авг 2019, 12:02 
Только пришел

Зарегистрирован: 10 июл 2013, 07:16
Сообщения: 20
ILYAUL писал(а):
2. The default setting of CKSEL3:0 results in internal RC Oscillator @ 1MHz


Немного не понял о чем вы. МК работает на внутренних 8МГц. МК тестовый, на нем уже протестирована ни одна программа..


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Работа с датчиком DHT11
СообщениеДобавлено: 09 авг 2019, 23:18 
Старожил

Зарегистрирован: 04 окт 2012, 00:23
Сообщения: 2745
Откуда: Москва
Т.е Вы давно изменили , то о чём я написал выше? И тестовый мк уже работал с USART?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Работа с датчиком DHT11
СообщениеДобавлено: 10 авг 2019, 04:29 
Только пришел

Зарегистрирован: 10 июл 2013, 07:16
Сообщения: 20
ILYAUL писал(а):
Т.е Вы давно изменили , то о чём я написал выше? И тестовый мк уже работал с USART?


Да. На нем уже написан базовый функционал. В том числе АЦП, таймеры, которые отлаживались через уарт.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Работа с датчиком DHT11
СообщениеДобавлено: 14 авг 2019, 13:57 
Старожил

Зарегистрирован: 08 авг 2013, 09:43
Сообщения: 3051
Проверил ваш код в протеусе. В симуляторе все работает:
Вложение:
Screenshot_20190814_115504.png
Screenshot_20190814_115504.png [ 48.82 Кб | Просмотров: 439 ]


Чуть изменил код, чтобы цифры читаемые были:
Show код


Всё прекрасно работает и читается значение с датчика. Проверяйте у себя в железе. Также проверьте фьюзы МК - может там что не так.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Работа с датчиком DHT11
СообщениеДобавлено: 15 авг 2019, 08:45 
Только пришел

Зарегистрирован: 10 июл 2013, 07:16
Сообщения: 20
Спасибо большое. Почему то так и думал. Вряд ли с фьюзами что то. По крайней мере очевидное. Все таки есть подозрение в работоспособности датчика..


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 18 ] 


Часовой пояс: UTC + 5 часов


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

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


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB