Bonjour,
Je vous propose en partage ici un petit programme de mesure de la fréquence de votre Arduino avec votre PC en utilisant Processing (Processing est un IDE gratuit dont c'est inspiré Arduino).
Pourquoi?
Les Arduino sont sensés être cadencé à 16MHz, cependant ils comportent souvent un SWF à la place du quartz qui n'est pas très précis.
Limite du programme:
Windows n'étant pas un OS orienté temps réel, les mesures sont assez longues. De plus la précision est limitée par celle du quartz de votre PC.
On peut espérer une précision de l'ordre de 0,01%.
Avantage:
ne nécessite aucun composant externe.
Note: dans la cas d'un Arduino pro 8MHz, il faut diviser le résultat par deux.
Code Arduino:
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
}
Code Processing:
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() {
}
Edit du 14/08:
Correction dans le programme Processing.
Quelques résultats:
uno original: 16000KHz (pas fait exprès)
uno générique: 15880KHz
mega générique: 15895KHz
nano générique: 16004KHz
pro 5v générique: 16013KHz
pro 3.3v générique: 15990KHz
On remarquera une dérive plus importante sur les grande cartes, probablement liée à la présence d'un filtre à ondes de surface (SWF), qui se traduit par un boîtier plus grand.
Les petites cartes ayants un quartz par manque de place.
J'ai testé la dérive en exposant les cartes à un sèche-cheveux (air chaud). On observe une dérive d'environ -10 KHz sur l'ensemble des cartes.