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 :
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.
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.