micros-cycle.ino
Avant d'asservir une fréquence, mesurez : ce banc de test utilise micros() du Nano Every pour chronométrer une lecture ADC et son traitement, avec min/max/moyenne sur 100 cycles. La résolution de 4 µs du 4809 suffit à la plupart des temporisations critiques.
Matériel requis
Un Arduino Nano Every (ATmega4809 à 20 MHz, brochage identique au Nano, USB micro-B, convertisseur UART séparé, broches 5 V, pile de compatibilité avec le Nano classique). Nano Every, source sur A0 (même flottante pour mesurer le convertisseur seul).
Câblage
Rien de critique ; notez qu'une broche flottante ajoute du temps de settling au multiplexeur ADC.
Fonctionnement
micros() compte l'horloge système ; la soustraction t1-t0 gère le débordement naturel des unsigned. Les statistiques min/max révèlent les interruptions qui perturbent la mesure.
Exécution
Installez le package Arduino megaAVR Boards dans l'IDE, sélectionnez Arduino Nano Every, téléversez. Le Serial USB est séparé du Serial1 matériel (broches RX/TX) : le code série classique fonctionne tel quel.
Variantes
Pour du temps réel dur, comparez avec les timers TCA en mode capture, ou désactivez les interruptions pendant la fenêtre de mesure.
micros-cycle.ino
// micros() du 4809 : resolution 4 us (prescaler 8 a 20 MHz).
// Mesure de la duree d'une lecture capteur + boucle de controle.
const int CANAL = A0;
unsigned long t0, t1;
unsigned long minD = 1000000, maxD = 0, somme = 0;
int n = 0;
void setup() {
Serial.begin(115200);
}
void loop() {
t0 = micros();
int v = analogRead(CANAL); // ~100 us sur le 4809
float tension = v * (5.0 / 1023.0);
t1 = micros();
unsigned long duree = t1 - t0;
minD = min(minD, duree);
maxD = max(maxD, duree);
somme += duree;
n++;
if (n >= 100) {
Serial.print(F("min=")); Serial.print(minD);
Serial.print(F(" max=")); Serial.print(maxD);
Serial.print(F(" moy=")); Serial.println(somme / n);
Serial.println(F("us pour lecture+conversion"));
n = 0; minD = 1000000; maxD = 0; somme = 0;
}
delay(10);
}