Contrôler la fréquence d'un Arduino...

Voici une manip que je trouve géniale et qui a été proposée par ChristopheFr sur le forum français d’arduino.cc. Son idée permet de contrôler très simplement la fréquence réelle de fonctionnement des cartes Arduino et compatibles. Et cela sans aucun matériel complexe! Il suffit de télécharger le logiciel gratuit Processing.

processing3-logo

Dans l’éditeur arduino, on copie/colle le sketch suivant et on l’upload sur la carte:
void setup() {
  Serial.begin(115200);
}

void loop() {
  static uint32_t t = micros();

  while (micros() - t < 16000000);
  t += 16000000;
  Serial.write('1'); // envoi un octet sur le port série toutes les 16 secondes
}


Et dans l’éditeur Processing, on utilise le code suivant:
import processing.serial.*;

Serial Port;
int t1,t2;

void setup() {
  int i;
  Port = new Serial(this, "COM7", 115200); // remplacez COM7 par le port occupé par l'Arduino, sinon bug!
  
  t1 = millis();
  while(true) {
    while(Port.available() > 0) {
      i = Port.read();
      t2 = millis();
      println(256000000 / (t2-t1) + "KHz"); // affiche la fréquence du quartz de l'Arduino en KHz toutes les 16 secondes (la première mesure n'est pas fiable).
      t1 = t2;
    }
    delay(1);
  }
}

void draw() {
}


C’est terminé! On lance l’exécution du code sur Processing et on patiente.

Testé chez moi avec la MKS MINI V2.0 Makerbase et une carte Arduino MEGA de chez SUNFOUNDER:
- La SUNFOUNDER tourne à 15996KHz (avec +-1 KHz de variation entre les mesures).
- La MKS MINI est parfaitement calibrée à 16000KHz.

J’ai ensuite testé en chauffant les cartes avec un sèche cheveux:
- La carte SUNFOUNDER perd quasi instantanément 10Khz et elle descend encore un peu pour se stabiliser autour des 15983Khz au bout de quelques minutes.
- La MKS MINI ne bronche pas et reste parfaitement stable à 16000KHz.

Voilà qui confirme la MKS MINI comme un excellent choix pour mon projet. Sa fréquence est conforme et elle ne souffre pas de dérive en fonction de la température ambiante. :)

Moralité: attention aux cartes choisies pour un usage en astronomie. Si possible, vérifiez bien dans les specs qu’elles sont équipées de Quartz. Moi je me suis fait berner de visu avec la SUNFOUNDER qui est équipée de résonateurs céramiques en boitier métallique ressemblant à un boitier de Quartz (merci à al1fch pour l’info).

Lien vers le topic original lancé par ChristopheFr:
Mesurer la fréquence d'un Arduino avec Processing