Comportement etrange delay()

Bonjour.
J'ai un pcb perso à base d'atmega328pb, sur lequel je test le sketch ci-dessous.

#define V1 PIN_PB1

#define TEMPS (0.5)

void setup() {
  // put your setup code here, to run once:
  Serial.begin(9600);
  pinMode(V1, OUTPUT);
}

void loop() {

    digitalWrite(V1, HIGH);
    delay(TEMPS*1000);

    digitalWrite(V1, LOW);
    delay(TEMPS*1000);

}

Étrangement, le delay censé être de 0.5s dure réellement **8 secondes ** !!
Lorsque je passe à un delay de 1s, j'obtiens 16 secondes, erreur cohérente donc.

J'ai remplacé le quartz du pcb, les condo autour pour savoir si le problème venait de là, mais il n'en ai rien, fonctionnement identique.

J'aimerais donc votre aide pour comprendre pourquoi le delay() ne donne pas du tout le temps indiqué ?

Est-ce un problème logiciel ? Un problème de quartz ?

Info peut être importante, j'ai uploadé le sketch vers l'atmega avec une carte uno en tant que programmeur (Arduino As ISP) puis en utilisant la fonction upload using programmer

Le hardware que j'utilise est celui de Minicore, avec les paramètres suivants :

Hello
Peux tu tester en définissant "temps" comme un variable normale et non par un "# define"

bonsoir @dfgh
résultat: idem !

Bonjour,

Est ce que tu as bien programmé les fuses pour un fonctionnement avec quartz 16MHz?

Il peut y avoir un problème dans le choix du quartz ou des condensateurs qui sont autour, auquel cas même si tu les changes ça ne fonctionnera pas mieux.
Après avoir confirmé l'état des fusibles de configuration, ce serait quand même bien de vérifier que l'oscillateur tourne bien à 16MHz.

j'y ai pas du tout touché... c'est la 1ère fois que je programme l'UC via un programmateur.

Avec avrdudess, j'obtiens les fuses suivants :

et je ne sais pas du tout quoi choisir comme paramètres sur ce site
configuration des fuses

J'utilise un quartz de 16Mhz, et je ne vois aucune option pour un quartz de 16Mhz...

Finalement, après recherches sur les fuses, c'était bien le problème. Résolu en appliquant les fuses suivants

image

Faudrait maintenant que je cherche à comprendre qu'est ce que c'est que BOD, LTO, eeprom retained et autres...

Merci à tous !

Par défaut les ATmega328 sont configurés avec l'oscillateur interne à 8MHz divisé par 8 soit une horloge à 1MHz.

A noter que l'IDE programme les fusibles pour toi lorsque tu utilises "Graver la séquence d'initialisation" du menu outils. Il suffit juste de choisir un type de carte compatible de ton matériel.

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.