[résolu]Horloge interne 8MHZ mauvaise valeur pour delay DHT11

Bonjour,

Pour lire les valeurs d'un DHT11 ( capteur d'humidité) J'utilise les fonctions delay() et delayMicroseconds(). Mais alors que cela fonctionne très bien sur ma carte Arduino UNO (rev3), quand je fais le montage avec un ATmega8 a 8Mhz en horloge interne je n'arrive plus à lire le capteur. Je pense que cela vient du timing pour lire le capteur et du fait que les fonctions delay() et delayMicroseconds() durent 2 fois plus longtemps que la normale (ce qui semble logique vu que Arduino tourne a 16Mhz)

J'ai bien mis le symbole #define F_CPU 8000000UL et je ne sais pas comment faire pour retrouver les bonnes valeurs de temps a 8Mhz...

La fonction delay(x) attend x millisecondes quelle que soit la carte et sa vitesse d'horloge, le compilateur s'occupe de lui faire un code adapté.

Merci pour ta réponse.

Effectivement le problème ne vient pas de la, c'est le temps de lecture du dht11 qui perturbe ma mesure du temps. Par contre le capteur me ramene 0 comme valeur de temperature et d'humidite alors que cela marche avec la carte arduino, je vais creuser un peu plus.

Peut être pas branché sur la bonne pin d'entrée.

A vrai dire j’y perd un peu mon latin. Le DHT était bien branché.

Je refais un programme pour revérifier le temps :

#define F_CPU 8000000L
#include "Arduino.h"

unsigned long temps;
unsigned long previous;
unsigned long bip;
int sec = 0;

void setup(void)
{
	pinMode(10, OUTPUT); // test temps
	temps= 1000;// 1s
	bip = 100; // 100ms temps d'allumage
	previous = millis();	

}

void loop(void)
{	
	if ( ( millis() - previous ) > temps ) 
	{
		previous = millis();
		digitalWrite(10, HIGH);
		sec++;
	}	
	
	if ( ( millis() - previous ) > bip ) // eteint la led 100 ms apres 
	{
		digitalWrite(10, LOW);
	}		
}

A chaque fois que la led s’allume une seconde a passé, elle s’éteint 100ms après. c’est plus facile pour compter.
Je chronomètre et je trouver 10 clignotements en 20 sec environ.

Je suis un peu perdu. Est-ce que cela peut venir du bootloader ?

en fichier joint la photo du montage avec la led en pin 10.

Morgiahn: Je refais un programme pour revérifier le temps :

#define F_CPU 8000000L
#include "Arduino.h"

Je chronomètre et je trouver 10 clignotements en 20 sec environ.

Je suis un peu perdu. Est-ce que cela peut venir du bootloader ?

bonsoir ça ressemble à un facteur 2 entre 16 et 8 MHz ça donne quoi si tu envoi une autre valeur acceptable 4 ou 16 (rapport constant) ?

Morgiahn: Je suis un peu perdu. Est-ce que cela peut venir du bootloader ?

Le bootloader doit correspondre à la cible. En particulier il doit connaitre la fréquence de l'horloge du système.

De même lors de la compilation il faut indiquer un type de carte compatible avec le type du processeur utilisé sur ta carte avec la bonne fréquence d'horloge. Les fichier de configuration pour les cartes cibles définissent la constante avec la fréquence d'horloge du processeur. Toutes ces valeurs sont dans le fichier board.txt du répertoire hardware/arduino

Merci pour vos réponses

@ Artouste J'ai beau changer les valeurs de F_CPU, la led clignote pareil

@fdufnews Apparement y a du mieux, j'ai ajouté une configuration pour ATmega8 a 8Mhz en prenant exemple sur les autres

ATmega8 a 8Mhz

atmega8_8.name=ATmega8 a 8Mhz atmega8_8.upload.tool=avrdude atmega8_8.upload.protocol=arduino atmega8_8.upload.speed=19200 atmega8_8.bootloader.tool=avrdude atmega8_8.bootloader.unlock_bits=0x3F atmega8_8.bootloader.lock_bits=0x0F atmega8_8.build.mcu=atmega8 atmega8_8.build.f_cpu=8000000L atmega8_8.build.core=arduino atmega8_8.build.variant=standard

Est-ce que c'est correct ? Je suis loin de maitriser tous les paramètres. Maintenant les secondes s'écoulent normalement.

Et comment faire cette sélection avec AtmelStudio 6 ?

Morgiahn: Merci pour vos réponses

@ Artouste J'ai beau changer les valeurs de F_CPU, la led clignote pareil

Alors on peut raisonablement penser que c'est une "mention inutile/gnorée" dans ta configuration.

Je ne suis pas assez "pointu " sur la gestion d'environnement, mais Fdufnews t'a donné des bonnes pistes "de recherche"

Oui effectivement j'ai modifié le fichier boards.txt et maintenant c'est bon.

Par contre je n'arrive pas à faire cette correction avec atmelsudio 6...

Morgiahn: @fdufnews Apparement y a du mieux, j'ai ajouté une configuration pour ATmega8 a 8Mhz en prenant exemple sur les autres

ATmega8 a 8Mhz

atmega8_8.name=ATmega8 a 8Mhz atmega8_8.upload.tool=avrdude atmega8_8.upload.protocol=arduino atmega8_8.upload.speed=19200 atmega8_8.bootloader.tool=avrdude atmega8_8.bootloader.unlock_bits=0x3F atmega8_8.bootloader.lock_bits=0x0F atmega8_8.build.mcu=atmega8 atmega8_8.build.f_cpu=8000000L atmega8_8.build.core=arduino atmega8_8.build.variant=standard

Est-ce que c'est correct ? Je suis loin de maitriser tous les paramètres. Maintenant les secondes s'écoulent normalement.

Le fichier board.txt est utilisé spécifiquement par l'IDE arduino qui vient y chercher les paramètres pour la compilation et la programmation des binaires. Par contre attention si ton processeur n'est pas un ATmega8 tu risques d'avoir quelques soucis les ressources ne sont pas les mêmes avec par exemple un ATmega328 (RAM et Flash ou certains périphériques)

AtmelStudio fonctionne différement, il faudrait chercher dans les paramètres de configuration du projet. Mais là je ne suis plus compétent. Désolé.

Merci beaucoup déjà pour ces réponses. Je passe je sujet a résolu