La logique pour lire l'état des boutons-poussoirs, commander l'allumage des chiffres des tubes nixie,... |
-
La page précédente: les circuits CMOS et TTL.
CommandeNotre horloge est commandée par 3 boutons-poussoirs:
Quand on quitte le mode de programmation de l'alarme, le temps est stocké dans la mémoire EEPROM du processeur s'il y a eu une modification. Le statut de l'alarme est également stockée en EEPROM. Pour éviter les fausses lectures, nous n'acceptons une valeur que si elle est stable pendant deux cycles (plus d'une milliseconde). Nous utilisons uniquement le flanc montant pour détecter une fonction, pour éviter qu'un mode de fonctionnement ne soit enclenché et déclenché à chaque cycle. Quand un bouton est enfoncé, nous modifions uniquement un paramètre (un état logique), mais nous continuons l'exécution normale du programme. Dans le programme même, l'état logique est controlé là où c'est nécessaire. Il ne s'agit pas ici d'une programmation événementielle (réponse directe à une condition), mais d'une programmation prodédurale classique. Dans ce type de système (commande de systèmes, de processus chimiques, etc), c'est la programmation classique qui est la mieux adaptée, car elle répond de façon fluide et pondérée aux conditions externes. La programmation événementielle peut être utilisée pour des systèmes de commande de processus chimiques, mais uniquement pour répondre à des conditions hors-limites (température ou pression trop élevée,...). Une programmation événementielle permet de réagir plus rapidement à une condition d'erreur, mais produit un fonctionnement desordonné si on utilise uniquement ce type de programmation. Un dépassement de capacité peut arriver si beaucoup de conditions à traiter apparaissent simultanément: littérallement le logiciel ne sait plus à quelle condition répondre en premier. Comme l'arduino nano que nous utilisons a trop peu d'entrées et de sorties, nous utilisons une entrée analogique pour lire le bouton. On utilise un diviseur de tension pour déterminer quel bouton est enfoncé: chaque bouton a une résistance propre, et alec la résistance de charge (fixe) nous avons un diviseur de tension. Un exemple se trouve sur la page d'utilisation de l'arduino pour commander le chauffage. A droite la programmation de l'Arduino avec l'initialisation des ports et la procédure pour écrire un bit (qui est répétée 4 fois pour écrire une unité et deux ou trois fois pour écrire les dixaines). Ce code a été remplacé par un code plus efficace et rapide (voir page suivante).
AffichageLa commande des tubes nixie est déjà décrite ici. Nous avons 45 cathodes à commander (dixaines d'heures: 3, unités d'heures: 10, dixaines de minutes: 6, unités de minutes: 10, dixaines de secondes: 6, unités de secondes: 10). Nous avons besoin d'une expansion à double étage!
Quand l'alarme est enclenchée, elle retentit pendant 5 secondes à la mise en route (et en cas de reset du processeur). L'alarme est également indiquée par une led. La sonnerie est réalisée par une ligne numérique qui passe alternativement d'un niveau bas à un niveau haut et qui commande un petit haut parleur de 25Ω via un condensateur de 1µF. L'arduino uno n'a pas d'horloge embarquée et l'heure se perd en cas de coupure de courant ou de reset. Une horloge RTC externe est décrite ici. Elle utilise une puce DS1307. Page suivante: le logiciel détaillé. |
Publicités - Reklame