Hé les gars...
Voici un suivi du projet d’horloge numérique que j’ai posté il y a un an. Je n'ai pas tenu compte de la dérive du module RTC ! J’ai trouvé la dérive pour être ainsi passé 1 minute de CCF pour tous les 21 jours, c’est énorme. Il s’agit déjà après la réorientation de l’oscillateur xtal dans le module de ventilation DS1307 pour être au plus près la puce que possible, ce qui était proposée ainsi que d’autres considérations, dans la maxime app Remarque.
Options envisagées :
1. optimisation des CCF : coup d’oeil pour meilleur xtal, assorti capacitances, etc., etc. <--IMPOSSIBLE
2. ajouter la touche de décrémentation manuelle pour la valeur de minutes <--cela signifie des changements au niveau matériel. La porte de sortie facile!!
3. étalonnage automatique par le hôte microcontrôleur
L’algorithme :
Ce que j’ai besoin est une routine de calibration automatique informatisée. Après quelques essais (et effectivement de trouver le temps de le faire!), je suis venu avec ce... Sauver le facteur d’étalonnage 21 (jours / minute) et le jour du dernier cal a été fait dans un emplacement non volatile. Chaque fois que l’horloge est mis sous tension (dans mon cas c’est tous les matins 07:05, sauf week-ends et jours fériés;), le mcu lit ces valeurs et les comparer avec la date actuelle de CCF si multiples de 21 jours est déjà passée. Si oui, décrémentation valeur minute par le comte correspondant puis enregistrez actuel jour retour à la l’emplacement de « lastCalDay ». Faire la même vérification sur la puissance suivante vers le haut...
La mise en œuvre :
Pour l’emplacement de la cal, DS1307 a un « usage général avec batterie de secours ram avec écrit illimité ». Nous aurons besoin de deux octets de 8 bits chacun pour les calFactor et les lastCalDay. Pour compter les différence de jours, nous allons convertir la date du CCF (nombre de mois et le jour) à un nombre entier unique à partir de la date de référence. Pour cela nous pouvons utiliser le premier jour de l’année en cours comme la référence, le numéro du jour 1. Cela signifie que le nombre maximal de jours entre la cal ne doit pas dépasser 365. À l’aide du numéro du jour est pratique pour faire la différence et aussi pour l’enregistrement de la date de ram. Il suffit d’ajouter la disposition pour le nouvel an, lorsque le nombre de jours remonte de 365 à 1. Une fois que les différence de jours est déterminé que nous pouvons alors décrémenter le nombre de minutes correspondant. Pour la simplicité du code, j’ai choisi de sauter cal si la minute résultante différence va faire reculer le chiffre des heures. Veuillez consulter l’attachmed pour la mise en œuvre du code complet.
Les résultats :
Résultats de ma validation ont montré un fonctionnement correct comme prévu. Bien sûr, le code et en effet l’algorithme peuvent encore être optimisées pour la précision et l’élégance, mais pour l’instant, celui-ci fonctionne pour mon but très bien !
S’il vous plaît faites le moi savoir si vous avez besoin plus d’informations si vous souhaitez faire de ce projet aussi bien... Suggestions sont également les bienvenues.
Merci. Profitez !