Arduino
25 conserver l'heure
Sommaire
| Avoir la bonne heure ! Ou le bonheur ? Ah, la bonne heure ! |
| Ajustement de fréquence du quartz |
Dans les applicatiosn gérant le temps (avec Time.h par exemple), il peut être intéréssant d'ajuster le quartz de l'ARDUINO pour une meilleure précision.
Normalement, un quartz devrait être précis à 30ppm, soit une écart maxi de 2,59 secondes/jour.
Sur l'ARDUINO UNO V3, si l'horloge va trop vite, on peut mettre en paralèlle avec l'un des condensateurs de 22pF qui sont autour du Quartz un condensateur de 5, 10, 15 ou 22 pF pour le ralentir.
Si l'horloge va trop lentement, cela devient plus difficile : il faudrait éliminer un condensateur de 22pF et le remplacer par uen valeur plus faible.
Quant à l'ARDUINO ETHERNET, le quartz est tellement petit que l'intervention au fer à souder est très risquée ! Je pense d'ailleurs qeu c'st un résonnateur, le mien est décalé de 1800 ppm environ (trop rapide).
Existe-t-il une solution 'logicielle' ?
La vitesse du quartz est déclarée dans le fichier 'C:\Program Files (x86)\Arduino\hardware\arduino\boards.txt'.
Suffit-il d'ajuster cette valeur pour que les calculs de temps soient plus exacts ?
Recopier le paragraphe correspondant à votre modèle d'ARDUINO en fin de fichier, et le modifier : ajouter un indice au radical ('ethernet' devient 'ethernet1'), changer le '.name' pour le reconnaitre, et changer la valeur de 'ethernet1.build.f_cpu=16000000L' -> 'ethernet1.build.f_cpu=8000000L' .
Sélectionner alors ce type d'ARDUINO dans le menu 'Outils' 'Type de carte', et le tour est joué !
NOTA IMPORTANT : seules les valeurs 16000000 et 8000000 sont reconnues par le système !
Donc, fausse piste, sauf pour l'ARDUINO sans QUARTZ qui oscille à 8 Mhz, mais bien sûr pas stable !
La seule solution est de faire une compensation logicielle, telle que :
// Dans la pratique, l'horloge ADRDUINO dérive de quelques secondes par jour (30ppm = 2,59secondes/jour),
// une synchro horaire est très suffisante !
// On peut tenter d'ajuster l'horloge de l'arduino en mettant en paralèlle sur l'une des
// 2 capacités du quartz de 16 Mhz un condensateur ajustable de 20 à 40 pF
// Si l'horloge va trop lentement enlever cette capacité et la remplacer par
// le condensateur ajustable.
// Compensation logicielle du décalage connu du quartz ...
// Etherner 'B' avance de environ de 6 secondes/heure soit 1666 ppm (théorique quartz 30 ppm)
if ( tempo_ntp == 0 && (minute()%10 == 9) && second() == 45 ) {
horodatage_serial(); Serial << "rattrapage d'une seconde ";
setTime(now()-1); // si avance
// setTime(now()+1); // si retarde
horodatage_serial(); Serial << endl;
tempo_ntp = 3000;
}
Ou d'utiliser un circuit externe spécialisé : DS1307 par exemple ou autre soolutions.
Sur internet, on peut récupérer l'heure sur des machines dites 'serveurs NTP'. NTP est un protocole qui permet de synchroniser l'heure entre ma machine et des horloges atomiques très précises. Des serveurs 'secondaires' sont à disposition de tous pour synchroniser tout type d'horloge, celles des ordinateurs (y compris le vôtre à la maison, les dernières versions de Windows l'intègrent automatiquement), mais aussi des horloges ou stations météo connectées.
Photos de la page :
Dernière mise à jour : 11:40:07 18/09/2020