micros-cycle.ino

Arduino Nano Every · Archivo : micros-cycle.ino · Lenguaje : Arduino · Uso : Mesurer un temps court avec micros()

Antes de servir una frecuencia, mide: este banco de prueba usa micros() del Nano Every para cronometrar una lectura ADC y su tratamiento, con min/max/media sobre 100 ciclos. La resolución de 4 µs del 4809 basta para la mayoría de temporizaciones críticas.

Hardware

Un Arduino Nano Every (ATmega4809 a 20 MHz, mismo formato que el Nano, USB micro-B, chip UART separado, pines de 5 V, compatibilidad directa con el Nano clásico). Nano Every, fuente en A0 (aunque flotante para medir solo el convertidor).

Cableado

Nada crítico; observa que un pin flotante añade tiempo de asentamiento al multiplexor ADC.

Funcionamiento

micros() cuenta el reloj del sistema; la resta t1-t0 gestiona el desbordamiento natural de los unsigned. Las estadísticas min/max revelan las interrupciones que perturban la medida.

Ejecución

Instala el paquete Arduino megaAVR Boards en el IDE, selecciona Arduino Nano Every y carga. El Serial USB está separado del Serial1 de hardware (pines RX/TX): el código serie clásico funciona tal cual.

Variantes

Para tiempo real duro, compara con los timers TCA en modo captura o desactiva las interrupciones durante la ventana de medida.

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);
}

← Volver a la ficha