Commande des tubes nixie
L'interface CMOS et TTL
TechTalk
Root » Serveurs » Electro » Nique » Interface CMOS et TTL

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, en particulier l'interface entre TTL et CMOS.

La commande des tubes nixie est décrite ici.

Le schéma utilise deux technologies concurrentes, notament CMOS et TTL.

Technologie CMOS

La technologie CMOS est la plus facile à appréhender. Elle utilise des transistors complémentaires à effet de champ, fonctionne sur une tension entre 5 et 15V et est commandé en tension. En gros, en entrée si la tension est inférieure de moitié à la tension d'alimentation, c'est un 0, si elle est supérieure c'est un 1. Les entrées sont à haute impédance et ne peuvent pas être laissées en l'air.


Une porte CMOS se compose de transistors MOSFET complémentaires qui tirent la sortie vers le positif ou la masse (symmétrique), mais avec un courant limité.

Une porte TTL se compose de transistors NPN dont l'entrée est à basse impédance et asymmétrique.


Une porte NAND et NOR en technologie TTL


Réalisation d'un circuit TTL avec des composants classiques (transistors 2N2222) et indication des tensions.

La commande se fait en courant. On voit qu'il faut un courant de 1.7mA pour faire basculer le circuit.


Level shift de 1.2V (2 et 3 diodes).
Pour obtenir 0.6V, on enlève chaque fois une diode.

Les circuits CMOS de la série 4000 (par exemple CD4099BE) ont une sortie symmétrique avec deux transistors complémentaires. Le circuit tire la sortie soit à la masse, soit à l'alimentation. Le "B" indique une sortie symmétrique (buffered) et le E indique un boitier DIL plastique.

La sortie ne peut pas fournir ou absorber un courant très important (surtout si alimenté en 5V), au maximum 5mA si alimenté en 5V. De plus le courant qui peut être fourni diminue plus la tension de sortie s'approche de la tension à fournir. Supposons que le circuit a une sortie 0. La ligne de sortie est alors à 0V si la charge est nulle, mais augmente si du courant est nécessaire. S'il faut tirer 3mA à la masse, la tension monte à 1.5V.

Les circuits CMOS sont plus lents que les circuits TTL mais consomment moins (surtout si utilisés en mode statique). Les caractéristiques chutent avec la tension d'alimentation. Un circuit CMOS peut en théorie commander un nombre indéfini de circuits CMOS, uniquement limité par la fréquence à laquelle le circuit doit fonctionner: c'est la capacité interne de chaque entrée qui détermine le nombre d'entrées qui peuvent être commandées selon la fréquence choisie.

Technologie TTL

La technologie TTL est plus ancienne, plus rapide mais consomme plus. On utilise ici des transistors NPN. La tension d'alimentation est fixée à 5V et ne peut dépasser les 7V. L'entrée et la sortie sont asymmétriques. Commençons par l'entrée.

L'entrée est vraiment bizarre, elle se fait sur l'émetteur d'un transistor. Si l'entrée est une fonction OR, il s'agit même d'un transistor multi-émetteur. On peut assimiler son fonctionnement à celui d'une double diode du point de vue de l'entrée. Si l'entrée est laissée en l'air, elle a un niveau haut (d'elle même elle ne va pas monter à plus de 0.65V). Le transistor de fonction est alors alimenté par la résistance et est en conduction (niveau de sortie bas). Si l'entrée est à un potentiel bas (inférieur à 0.4V) le transistor d'entrée est en saturation et le transistor de fonction n'est plus alimenté. La sortie est à un niveau haut.

Une porte NAND peut ainsi être réalisée avec un transistor multi-émetteur et un transistor de sortie, tandis qu'une porte NOR nécessite un transistor d'entrée et un transistor de sortie par porte.

La sortie est asymmétrique: le transistor de sortie peut tirer la sortie à la masse, mais pour obtener un niveau haut, il n'y a que la résistance de charge. Cela ne pose pas de problème pour commander un autre circuit TTL, puisque celui-ci doit simplement être tiré à la masse pour un niveau 0. Un circuit TTL peut en théorie commander 10 circuits (fanout de 10).

Certains circuits TTL ont une sortie à collecteur ouvert et utilisent la résistance interne du circuit suivant pour déterminer le niveau de tension. D'autres circuits ont une sortie sous forme de totem (totempole), mais la sortie reste fondamentalement asymmétrique.

Un circuit TTL est en fait commandé en courant, et non en tension comme un circuit CMOS. Pour produire un 0, on met l'entrée à la masse (il y a un courant qui circule), pour produire un 1 on laisse l'entrée flottante et il n'y a donc pas de courant qui circule.

La raison de la limitation de la tension d'alimentation à 5V est que le transistor d'entrée, s'il est tiré vers le haut via son émetteur est polarisé inversément. Or la jonction émetteur-base claque si elle dépasse une tension inverse de 6V environ.

La technologie TTL d'origine a rapidement fait des petits: le but est de réduire la consommation (qui était à l'origine de plus de 2mA par port) à une consommation de 0.1mA par port, tout en gardant la même vitesse de fonctionnement. Il existe même une famille TTL réalisée à partir de composants CMOS!

Interface CMOS - TTL et inverse

Le problème se pose évidemment quand on doit faire l'interface CMOS et TTL. Les deux peuvent fonctionner sous 5V, donc la tension d'alimentation n'est pas un problème.

C'est le plus simple de TTL à CMOS: pour éviter les tensions non-définies (TTL à collecteur ouvert) on utilise une résistance de charge (pull up) branchée au 5V. La valeur n'est pas très importante, 2.2kΩ est une valeur courante. Un circuit TTL peut commander un nombre infini de circuits CMOS (une seule résistance pull up suffit par sortie).

Ca se complique pour l'interface CMOS à TTL. Les circuits CMOS ne sont pas en mesure de tirer un fort courant à la masse (surtout s'ils sont alimentés en 5V). Les circuits TTL récents ont une résistance interne suffisamment élevée, le circuit CMOS peut ainsi tirer la ligne à un niveau suffisamment bas pour coder un 0, mais ce n'est pas garanti que cela va fonctionner dans tous les cas. Le nombre de circuits TTL qu'une sortie CMOS peut commander est au mieux limité à 1. Il n'y a pas de problème pour fournir un 1.

Pour les tests, les circuits commandent des lampes LED. J'utilise ici des résistances de charge de 470Ω mais ces résistances ne sont en théorie pas nécessaires, les circuits CMOS ne pouvant tirer au maximum que 5mA à la masse si alimentés en 5V. Si les circuits sont connectés aux puces TTL, il faut déconnecter la charge. Cela peut être réalisé tout simplement en coupant l'alimentation 5V des leds, les lampes se comportent alors comme des diodes qui ne sont pas en conduction.

Le circuit 74141 étant d'une ancienne génération (donc pas "low power", loin s'en faut), j'ai prévu un "level shift" qui va déplacer l'alimentation des circuits TTL à 0.6 et 5.6V. Quand une sortie CMOS tire une entrée TTL à la masse et que la sortie ne descend pas sous 0.9V (parce que le circuit CMOS ne peut pas absorber suffisamment de courant), le circuit TTL voit lui une tension de 0.3V (0.9 - 0.6 = 0.3) qui est une valeur "0" valable.

Ce level shift de 0.6V ne joue absolument aucun rôle pour les sorties du 74141 qui sont les tubes nixie.

Cela fonctionne, mais je n'arrive pas à éteindre complètement les chiffres qui ne doivent pas être allumés. C'est fort visible, surtout quand je fais clignoter un chiffre pour la mise à l'heure. C'est probablement causé par la tension de sortie maximale d'environ 65V du 74141, qui fait qu'il y a toujours une tension d'environ 155V aux bornes d'un chiffre, même quand il ne doit pas être allumé.

Même avec une résistance de charge de 120kΩ en parallèle sur chaque chiffre de chaque tube, certains chiffres restent légèrement allumés (une résistance entre l'anode et chaque cathode).

J'ai décidé d'utiliser un circuit alternatif composé de CD4028BE (BCD to decimal) à la place du 74141 classique. Chaque 4028 commande des petits transistors haute tension (BF422 au format TO92) ou BD127 au format TO126. Ici aussi il faut un décodeur par tube nixie.

La suite: la logique utilisée pour lire la position des boutons et afficher l'heure.

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