[Résolu] Timeout sur DHT11

Bonjour,

Je suis en train de me bricoler une ventilation de plafond pour ma salle de bain avec un (puissant) ventilateur de PC. J'ai mis une télécommande infrarouge et un capteur d'humidité (DHT11) afin d'avoir en plus du mode manuel un mode auto. Pas de problème pour lire le capteur sur l'arduino. Mais j'ai transféré cela sur un atmega168 seul et je n'arrive plus à lire ce capteur. Je reçois toujours un message de timeout. Je me suis dit que peut-être cela était du à l'absence de quartz (il est avec le quartz interne), mais le récepteur IR semble bien fonctionner (pourtant certainement plus sensible au timing). Avez -vous déjà rencontré ce problème ?

En mode oscillateur Interne, l'ATmega tourne à 8MHz alors que sur une UNO il tourne à 16MHz Donc si tu n'as pas compilé ton sketch pour un 168@8MHz, tous les timings seront faux. Malgré tout, le DTH11 utilise l'ADC internet du ATmega donc je ne vois pas ce qui pourrait clocher de ce coté.

D'ou vient le message de timeout ? C'est ton sketch qui l'envoie ?

Peux tu être plus précis sur l'environnement "qui marche". Que comprend t'il ? Ensuite qu'as tu fait pour passer sur l'ATmega168 ?

Effectivement c’est pas super clair :slight_smile:

J’ai donc un atmega168. Sur les différents pins j’ai (en numérotation arduino) :
2 - Capteur humidité DTH11. Celui-ci est relié également au 5v et à la masse et une resistance de 10k est entre le 5v et le pin data
3 - Commande du ventilateur, via TIP120 (en mode on/off, pas de pwm).
4 - Led indiquant ventilateur ON
5 - Led indiquant le mode auto (en fait 4+5 sont sur une led bicolore)
6 - Buzzer pour une validation sonore du changement de mode (ON->auto->OFF)
11 - Capteur IR pour la télécommande

Bibliothèques utilisées :
DHT : Adafruit
IRremote : Ken Shirriff

J’ai testé chaque composantes séparées (IR, DHT11, commande ventilo) avec ma plaque arduino.
Puis j’ai programmé mon sketche et chargé ça sur mon atmega via l’IDE arduino et mon programmateur tinyusb.

Le timeout est renvoyé par la bibliothèque DHT.

Il est effectivement possible que ce soit un problème de fusible. En effet, je n’utilise pas la partie décodage du signal IR reçu par la télécommande, mais juste le fait qu’on a reçu un signal (quelconque). Ma télécommande ne me sert qu’à passer alternativement d’un mode à l’autre. Bon je vais tester tout ça…

20120506_210346.jpg

J'ai testé chaque composantes séparées (IR, DHT11, commande ventilo) avec ma plaque arduino.

C'est là où j'ai du mal. "testé sur ma plaque Arduino" c'est quoi ? Ca veut dire sur une vrai carte Arduino genre une UNO ? Ou sur la carte que tu montre en photo ?

Puis j'ai programmé mon sketche et chargé ça sur mon atmega via l'IDE arduino et mon programmateur tinyusb.

Je comprend que tu as pris un Atmega168 sans bootloader Arduino (circuit acheté "nu") et que donc il faut que tu flashes tout.

Donc je pense effectivement qu'il doit y avoir un problème de fusible.

J'ai recemment monté une carte avec un ATmega168 (kit LedRingV2) et Robert l'auteur fournit un fichier board.txt et un bootloader adapté. J'ai utilisé mon ArduinoBreadboard comme programmeur ICSP (sketch ArduinoISP) pour programmer la bête.

Comme apparemment j'ai l'impression que tu veux tourner sans oscillateur ni quartz donc sur horloge interne, il faut les bonnes valeurs de fusibles. Pour info, voici le contenu du board.txt que j'utilise pour la carte en question qui tourne donc avec un ATmega168 sur horloge interne (avec un bootloader mais je pense que ca ne change rien, tu dois pouvoir l'utiliser pour flasher directement ton application)

RGBLedRing2.name=RGB LED RING - ATmega168 / 8MHz RC OSC / optiboot 19k2 (default)
RGBLedRing2.upload.protocol=arduino
RGBLedRing2.upload.maximum_size=15872
RGBLedRing2.upload.speed=19200
RGBLedRing2.bootloader.low_fuses=0xE2
RGBLedRing2.bootloader.high_fuses=0xDD
RGBLedRing2.bootloader.extended_fuses=0x04
RGBLedRing2.bootloader.path=optiboot
RGBLedRing2.bootloader.file=optiboot_lilypad_8MHz_19k2.hex
RGBLedRing2.bootloader.unlock_bits=0x3F
RGBLedRing2.bootloader.lock_bits=0x0F
RGBLedRing2.build.mcu=atmega168
RGBLedRing2.build.f_cpu=8000000L
RGBLedRing2.build.core=arduino
RGBLedRing2.build.variant=eightanaloginputs

barbudor: "testé sur ma plaque Arduino" c'est quoi ? Ca veut dire sur une vrai carte Arduino genre une UNO ? Ou sur la carte que tu montre en photo ?

Oui, oui, sur une Arduino standard (ma vielle Diecimila avec un atmega 168).

Je comprend que tu as pris un Atmega168 sans bootloader Arduino (circuit acheté "nu") et que donc il faut que tu flashes tout. Donc je pense effectivement qu'il doit y avoir un problème de fusible... Comme apparemment j'ai l'impression que tu veux tourner sans oscillateur ni quartz donc sur horloge interne, il faut les bonnes valeurs de fusibles.

C'est bien ça, mais je passe à côté d'un truc, mais je ne trouve pas... J'ai vérifié mes fusibles, ils sont bien à 8 mhz sans diviseur. J'ai fait clignoter une led à 1Hz avec un delay(1000) et chronométré pendant 60x, j'ai bien 1 mn.

Pour info, voici le contenu du board.txt que j'utilise (...)

RGBLedRing2.bootloader.low_fuses=0xE2 RGBLedRing2.bootloader.high_fuses=0xDD RGBLedRing2.bootloader.extended_fuses=0x04

Quasiment ceux que j'utilise, sauf mon high à D7 (sans brown-out) et l'extended à F9 (valeur par défaut)

Bon... je vais laisser reposer tout ça un moment je crois...

Problème résolu par l'ajout d'un résonateur 16Mhz. Je pense que le quartz interne n'est pas assez précis pour la communication du DTH11.

Je croyais que le DTH11 était un capteur analogique branché sur une entrée analogique ? C'est quoi le protocole ?

barbudor: Je croyais que le DTH11 était un capteur analogique branché sur une entrée analogique ? C'est quoi le protocole ?

Non, non c'est bien du numérique. Je ne sais pas exactement quel est le protocole utilisé, je passe par une librairie toute faite. C'est de la connexion 1-wire (un seul fil pour les données avec, bien sur, l'alimentation + et -). D'après ce que j'ai pu voir ça et là, c'est codé sur 40 bits, mais j'avoue que je n'ai pas cherché à réinventer la poudre. Mon programme tient sur 8 des 16k de l'atmega, alors...

barbudor: Je croyais que le DTH11 était un capteur analogique branché sur une entrée analogique ? C'est quoi le protocole ?

bonsoir barbudor c'est du numerique , le protocole est une sorte de 1-wire "du pauvre"

http://www.nuelectronics.com/download/projects/DHT11.pdf http://arduino.cc/playground/Main/DHT11Lib

perso , je n'en ai jamais utilisé, mais il me semble que ça a été discuté récemment sur le projet de couveuse d'infobarquee

Merci