Commande des tubes nixie
utilisation pour alimenter des tubes nixie
TechTalk
Root » Serveurs » Electro » Nique » Commande des tubes nixie

Sur cette page je veux vous montrer comment réaliser une horloge à affichage par tubes nixie. Tous les problèmes qu'on peut rencontrer en créant une horloge passent en revue.

Le schéma a été réalisé avec des composants de récupération ou trouvés au fond de mes tiroirs: il serait en théorie possible de réaliser un circuit plus optimal nécessitant moins de composant, mais le but ici était de "faire avec" ce que j'ai sous la main.

L'alimentation à commutation est décrite ici. Par rapport à un transfo classique, elle a l'avantage de moins consommer.

Pour commander les tubes nixie, on n'a pas vraiment le choix: il faut utiliser un circuit 74141 qui a été conçu spécifiquement pour cette tache, mais il y a des alternatives au 74141.

L'entrée du 74141 est un code BCD (binary coded decimal) sur 4 bits. Quand un code incorrect est fourni (par exemple IIII) aucun des chiffres de l'afficheur n'est alimenté.

Pour fournir 7 codes BCD, il faut 23 lignes de communication avec le processeur. C'est possible (certains petits microprocesseurs ont suffisamment de sorties), mais ce n'est pas élégant. L'arduino n'en a pas assez. De plus, il nous faut trois entrées pour pouvoir commander l'horloge (mise à l'heure). Et le microprocesseur doit de plus être connecté à une horloge qui garde l'heure même en cas de coupure de courant (real time clock avec une petite pile de 3V et un cristal de 32.768kHz).

On va utiliser 3 latches (mémoires) de type CD4099BE, ce qui nous permet de limiter le nombre de lignes de communication à 7.

  • La ligne W (write) permet de sélectionner la puce à accéder (la fonction correspond à un CE (chip Enable).
  • La ligne Data qui va vers toutes les puces indique s'il faut écrire un O ou un I
  • Les trois lignes Address qui indiquent quel bit de la puce doit être modifié.
Notre système a donc un bus d'adresse et de données, même si le bus de données ne fait qu'un bit de large!

Il faut ici un effort de programmation car nous utilisons une indirection. Pour écrire les secondes (unités) il faut donc sélectionner le latch 3 avec la lignes W correspondante. Il faut maintenant mettre en mémoire les 4 bits de portée la plus basse. L'adresse est un code BCD sur 3 bits, ce qui permet de sélectionner une des 8 lignes en sortie. Nous mettons à tour de role les 4 adresses sur le bus, la valeur à enregistrer et puis mettons la ligne W correspondante au niveau bas pour que la puce enregistre les données.

En pratique. Supposons que nous voulons allumer le chiffre 5 des secondes. Le driver 74141 doit recevoir le code BCD 0101 sur les lignes DCBA

  1. Mettre l'adresse 000 sur le bus adresse
  2. Mettre un 1 sur le bus data
  3. Attendre 1µs
  4. Donner on ordre d'écriture en mettant la ligne W au zéro pendant 1µs.
  5. Remettre la ligne W à 1 et attendre 1µs.
  6. Répéter l'opération pour l'adresse 001 (data = 0)
  7. Répéter l'opération pour l'adresse 010 (data = 1)
  8. Répéter l'opération pour l'adresse 011 (data = 0)
Pour allumer le chiffre 4 (BCD 0100) des dixaines de secondes, il faut:
  1. Enregistrer à l'adresse 100 une donnée 0
  2. Enregistrer à l'adresse 101 une donnée 0
  3. Enregistrer à l'adresse 110 une donnée 1
L'adresse 111 ne doit pas être utilisée pour les dixaines de secondes, puisque les dixaines de secondes vont de 0 à 5. Les entrées non utilisées du 74141 sont mises à la masse (0).

De plus, nous voulons fournir le jour de la semaine, mais nous avons un latch trop peu. Heureusement qu'il nous reste des lignes inutilisées: les dixaines de secondes et de minutes peuvent être encodées sous 3 bits et pour les heures nous avons assez avec deux bits. Cela nous donne 4 lignes, dont nous en utilisons 3 pour coder les jours de la semaine. La quatrième ligne peut par exemple être utilisée pour une alarme.

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 pois pour écrire une unité et deux ou trois fois pour écrire les dixaines).

La programmation est en language C avec quelques fonctions supplémentaires pour lire et écrire aux entrées/sorties.

Pour faire clignoter un chiffre (chiffre sélectionné pour changer sa valeur) on transmet alternativement le code du chiffre et un code incorrect (aucune ligne sélectionné: chiffre éteint). Cela ne fonctionne même pour les jours de la semaine (1 à 7) où il y a un code non-utilisé, notament le code 000.

Tout cela complique la programmation, mais il est plus facile de changer une ligne de code que de remplacer une puce.

La puce CD4099BE est en technologie CMOS. C'est bien, cela ne consomme pratiquement rien, mais ce n'est pas très rapide, et sûrement pas sous 5V. Pour éviter les erreurs, il faut que chaque niveau soit stable pendant au moins 1µs avant de donner l'instruction d'écriture, qui elle aussi doit durer 1µs. Cette lenteur n'est pas un problème, car nous n'avons que 7 chiffres à écrire par seconde.

Si vous utilisez un cable plat pour relier le 74141 aux tubes nixie, faites attention: les sorties ne sont pas dans un ordre logique 12345.... Il vaut mieux souder le cable selon la position des pins et corriger le tir au soquet du tube (qui a des connections plus larges).

La suite: La technologie CMOS ou TTL

L'arduino peut également être utilisé pour commander une installation de chauffage.

Links to relevant pages - Liens vers d'autres pages au contenu similaire - Links naar gelijkaardige pagina's