DHT22 (Aosong AM2302) нет реакции от датчика.

Дисплеи, датчики и прочие функциональные узлы, управляемые МК.
Ответить
The_Ketchup
Родился
Сообщения: 14
Зарегистрирован: Чт мар 13, 2014 13:29:50

DHT22 (Aosong AM2302) нет реакции от датчика.

Сообщение The_Ketchup »

Добрый день. Подключал датчик AM2302 (dht22) к mega8 - не мог дать толку - решил "по-быстрому" подключить его к arduino(mega2560) и посмотреть что там. С библиотекой под него и примером к ней датчик не заработал. В итоге, написал программу которая подает единицу в течение 5 секунд, затем придавливает к земле на 1.2мс а затем снимает 5000 значений отстоящих на 2мкс с соответствующего PIN. В итоге все 5000 значений - "1".
Проверил работу программы вольтметром (с увеличенными задержками) - всё нормально. Тем не менее датчик вообще ни как не откликается.
Схема подключения как здесь: http://chingachgook.net/arduino/podklyu ... duino.html только у меня датчик без маленькой платы - просто 4 ноги (1-VDD,DATA,NC,GND).
Пробовал включать без подтяжки между VDD и DATA, пробовал 4.7кOm, 10kOm между ногами - всё одинакого...

Ради интереса промерял тестером сопротивления между ногами датчика VDD-DATA - 4.7kOm(это чисто сам датчик без подтяжек), VDD-GND ~ 6kOm, VDD-NCC ~6kOm.

Подскажите пожалуйста как дальше бороться ? Есть подозрение что датчик не рабочий и уже надо выкидывать, хотя не правильных подключений не было, VDD/GND/DATA/NC не путал, не паял... Воткнут в breadboard, в общем всё как по ссылке выше.
Покупался на ebay, второго такого нет. Заказал конечно ещё 2 на Ali но приедут через пару недель в лучшем случае..., так что курить бамбук это время не хочется.

Прошу совета по дальнейшим действиям. Опыт маленький у меня, с не рабочими деталями дела ещё не имел :).
Фотографию или схему подключения могу выложить, хотя всё как в мануалах в интернете.
Фразу в DS о том что если у вас постоянно "1" - проверяйте подключение - видел, проверял :).

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

#define ArSize 5000
boolean values[ArSize];
boolean b;
void setup() {
  // put your setup code here, to run once:
#define s0 B00000000
#define s1 B00010000

  int i=0;
  for (i=0;i<ArSize;i++)
  {
    values[i]=false;
  }

  DDRE=0xFF;
  PORTE=0xFF;
  delay(5000);
  PORTE=0x00;
  delayMicroseconds(1200);
  DDRE=0x00;


  for (i=0;i<ArSize;i++)
  {
    delayMicroseconds(2);
    values[i]=(PINE&s1)>0;
  }
  
  Serial.begin(57600);
  Serial.println("Output Begin");
  
  for (i=0;i<ArSize;i++)
  {
      Serial.print(i);
      Serial.print(':');
      Serial.println(values[i]);
  }
  
    
}

void loop() {
  // put your main code here, to run repeatedly:
 
  return ;
}
Реклама
Аватара пользователя
oleg110592
Друг Кота
Сообщения: 3832
Зарегистрирован: Сб сен 10, 2011 17:46:25

Re: DHT22 (Aosong AM2302) нет реакции от датчика.

Сообщение oleg110592 »

сильно смущает это:

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

#define ArSize 5000
boolean values[ArSize];
Логический, булев (англ. Boolean или logical data type) тип данных — примитивный тип данных в информатике, которые могут принимать два возможных значения, иногда называемых истиной (true) и ложью (false). Присутствует в подавляющем большинстве языков программирования как самостоятельная сущность или реализуется через численный тип. В подавляющем большинстве языков за истину полагается единица, за ложь — ноль.(c)
Для ардуино вроде все также: http://arduino.cc/en/Reference/BooleanVariables
Делал разработку на DHT11, протокол вроде тот же. Проверить датчик можно так: подать на DATA логический "0" на 18мс, затем переключить выход микроконтроллера на вход, подождать 20-40мкс, датчик должен выставить на DATA логический "0" на 80мкс и т.д. по документации.
Реклама
The_Ketchup
Родился
Сообщения: 14
Зарегистрирован: Чт мар 13, 2014 13:29:50

Re: DHT22 (Aosong AM2302) нет реакции от датчика.

Сообщение The_Ketchup »

oleg110592 писал(а):сильно смущает это:

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

#define ArSize 5000
boolean values[ArSize];
Вообще это массив из boolean, размером 5000 элементов...
Собственно программа эта и написана для того чтобы прижать DATA пин к 0 на нужное время(по DS - typical -1,2ms) а потом считать 5000 значений через 2мкс друг от друга - это по факту, учитывая издержки операции мк, - более 10мс. Прога выводит все 5000 значений равными 1, то есть на PIN всегда логическая единица - датчик ни чего ни куда не подтягивает.
если отключить провод который ведет к данному контакту - то всё будет заполнено нулями. Так что код, я думаю, написан правильно. В этой части проблем нет.
Опять же с даташитом в согласовании... Я думаю всё же что датчику пора на помойку или он изначально бракованный...
хз. вот думаю может кто поддержит моё мнение. Выкидывать 200р жалко чисто на не опытном своём мнении ).
Просто если бы я даже не верно обрабатывал протокол датчика то в этом массиве всё равно должны быть видны какие-то изменения на порту, а их нет...

P.S.
oleg110592 писал(а): В подавляющем большинстве языков за истину полагается единица, за ложь — ноль.(c)
В Си:
0 - false
всё что отличается от 0 - true

так что

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

values[i]=(PINE&s1)>0;
можно написать и просто:

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

values[i]=PINE&s1;
Просто boolean дурацкий и при печати выведет не 0/1, а вот то число которое получится после побитового &(0/8). что как, по мне дак, крайне не верно реализованный тип.
Аватара пользователя
oleg110592
Друг Кота
Сообщения: 3832
Зарегистрирован: Сб сен 10, 2011 17:46:25

Re: DHT22 (Aosong AM2302) нет реакции от датчика.

Сообщение oleg110592 »

попробуйте импульс "0" сделать больше чем 2мс:

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

  // now pull it low for ~20 milliseconds
  pinMode(_pin, OUTPUT);
  digitalWrite(_pin, LOW);
  delay(20);
  cli();
  digitalWrite(_pin, HIGH);
  delayMicroseconds(40);
  pinMode(_pin, INPUT);   
отсюда: https://github.com/adafruit/DHT-sensor- ... er/DHT.cpp
а смущает, то что 5000 boolean займут, скорее всего 5000 байт RAM, а в меге8 их всего 1024.
Реклама
Эиком - электронные компоненты и радиодетали
The_Ketchup
Родился
Сообщения: 14
Зарегистрирован: Чт мар 13, 2014 13:29:50

Re: DHT22 (Aosong AM2302) нет реакции от датчика.

Сообщение The_Ketchup »

oleg110592 писал(а):попробуйте импульс "0" сделать больше чем 2мс
Спасибо за совет. Вроде я токое пробовал..., с работы приду и через часок ещё раз попробую на 20мс подтяжке как у вас в примере.
oleg110592 писал(а):а смущает, то что 5000 boolean займут, скорее всего 5000 байт RAM, а в меге8 их всего 1024.
только я написал что я после неудач с atmega8 начал разбираться уже на arduino mega2560, а там памяти по больше.
На счёт boolean value[5000] - да 5КБайт занимает. Это ардуино IDE показывает ). Собственно я из-за памяти с меги8 на ардуино и перешел, ну ещё конечно его перепрограммировать проще и быстрее чем ISP программатор подключать каждый раз, да и вывод на "консоль" удобнее чем схемы городить с uart -> usb...
Реклама
The_Ketchup
Родился
Сообщения: 14
Зарегистрирован: Чт мар 13, 2014 13:29:50

Re: DHT22 (Aosong AM2302) нет реакции от датчика.

Сообщение The_Ketchup »

1,2,5,10,15,20,200мс ни чего не поменяли....
Реклама
Аватара пользователя
oleg110592
Друг Кота
Сообщения: 3832
Зарегистрирован: Сб сен 10, 2011 17:46:25

Re: DHT22 (Aosong AM2302) нет реакции от датчика.

Сообщение oleg110592 »

в стол, пока новые не приедут
The_Ketchup
Родился
Сообщения: 14
Зарегистрирован: Чт мар 13, 2014 13:29:50

Re: DHT22 (Aosong AM2302) нет реакции от датчика.

Сообщение The_Ketchup »

Да, пожалуй...
Хорошо что новые датчики таможню уже прошли...
Спасибо за советы.
Новые придут - отпишусь.

Вообще меня терзает подозрение что датчик поддельный просто был - "китайская подделка" так сказать.
The_Ketchup
Родился
Сообщения: 14
Зарегистрирован: Чт мар 13, 2014 13:29:50

Re: DHT22 (Aosong AM2302) нет реакции от датчика.

Сообщение The_Ketchup »

попробовал подключить к raspberry pi. тоже не работает. датчик подключается просто напрямую к пинам, код просто скомпилен и всё. итог: не работает...
положу в стол. в стол у помойки..
The_Ketchup
Родился
Сообщения: 14
Зарегистрирован: Чт мар 13, 2014 13:29:50

Re: DHT22 (Aosong AM2302) нет реакции от датчика.

Сообщение The_Ketchup »

Приехал новый датчик с Aliexpress. С новым датчиком моя программа показывает что датчик дёргает шину туда-сюда - похоже что ВСЁ ОК. C ардуино тоже всё нормально завелось.
Да, к сведению, старый датчик я расколупал перед тем как выкинуть - компоненты вроде есть... Микруха, похоже конденсатор, резистор "влажностный", что-то ещё...
Аватара пользователя
mr_smit
Вымогатель припоя
Сообщения: 651
Зарегистрирован: Пн мар 23, 2009 09:25:58
Откуда: Самара

Re: DHT22 (Aosong AM2302) нет реакции от датчика.

Сообщение mr_smit »

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

Период "0" по даташиту 50мкс + 26мкс = 76 мкс. На деле же варьируется от 79 мкс до 93 мкс !!!
Период "1" по даташиту 50мкс + 70мкс = 120 мкс. На деле же варьируется от 126 мкс до 140 мкс !!!

И это всё в пределах одного запроса.

Пробовал 3 разных датчика, картина у всех одинаковая. Так же пробовал датчик AM2301 (это который типа для наружной установки). То же самое. Может кому то это поможет.
Нельзя всё знать, достаточно понимать.
Аватара пользователя
Buddha
Родился
Сообщения: 18
Зарегистрирован: Чт май 29, 2014 16:41:33
Откуда: Хабаровск
Контактная информация:

Re: DHT22 (Aosong AM2302) нет реакции от датчика.

Сообщение Buddha »

Уважаемый mr_smit!

Получилось таки победить датчик? А то я тут собрался писать обработку на таймере... Вот думаю, может у кого есть готовое решение?
"Если вас критикуют, то значит вы всё делаете правильно.
Потому что люди нападают на всякого у кого есть мозги."
Брюс Ли
Ответить

Вернуться в «Периферия»