Commande des tubes nixie
La logique pour lire l'état des boutons et commander les tubes
TechTalk
Root » Serveurs » ElectroNique » Arduino » Nixie » Logique de commande de l'horloge

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.

Commande

Notre horloge est commandée par 3 boutons-poussoirs:
  1. SEL
    Permet de sélectionner un chiffre pour la mise à l'heure. A chaque pression, le chiffre suivant est sélectionné (dixaines d'heures --> unités d'heures --> dixaines de minutes --> unité des minutes --> fonctionnement normal). Le chiffre sélectionné clignote.

    L'horloge continue à fonctionner en mode de sélection, mais en cas d'overflow quand les chiffres sont augmentés manuellement il n'y a pas de report au chiffre suivant.

    Les secondes ne peuvent pas être modifiées.

  2. +
    Augmente le chiffre sélectionné (en mode de sélection)

  3. ALARM
    Mode de réglage de l'alarme, est enclenché et déclenché par pression sur le bouton. En mode de réglage de l'alarme les secondes sont éteintes, ce qui permet de faire la différence avec l'état normal.

    La mise à l'heure de l'alarme se fait en appuyant sur SEL pour sélectionner un chiffre et + pour le modifier.

    L'alarme est activée ou desactivée en appuyant le bouton + en mode alarme quand aucun chiffre est sélectionné.

    Si l'alarme retentit (pendant une minute), on peut l'arrêter en appuyant sur le bouton ALARM.

Appuyer le bouton ALARM quand une sélection est activée n'a aucun effet.

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).

Affichage

La 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!
  • Le premier port expander a une fonction de mémoire (latch): il faut programmer chaque sortie individuellement.
    Il transforme 7 lignes en entrée en 24 lignes en sortie (toutes ne sont pas utilisées pour l'horloge)

  • Le second port expander transforme 4 sorties (code BCD) en code décimal (10 sorties) pour commander les cathodes.
    Ici aussi toutes les lignes ne sont pas utilisées: les lignes non-utilisées pour l'affichage par tubes nixie peuvent être utilisées pour l'indication de fonctions activées.

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

-