dimanche 10 avril 2016

Horloge


Petit moment de détente cet après-midi... En faisant le tri des différents composants de ma boite à outils "électronique", j'ai remis la main sur des afficheurs 7 segments bien connus. Je n'ai jamais eu l'occasion de faire un projet avec ceux-ci. Alors, pour le plaisir, j'ai réalisé une horloge que j'installerai au dessus de mon établi afin de ne plus perdre la notion du temps lorsque je bricole... ;-)

Voici quelques photos de l'objet sans prétention...




Les 4 afficheurs individuels sont montés sur une plaquette insérée à la vertical sur la plaquette principale. Cette dernière contient un Arduino Nano, un module DS3232 incluant une horloge persistante (sauvegarde par pile) et 4 transistors qui permettent d'alimenter tour à tour chaque afficheur.

Quelques mots sur le montage... Les afficheurs sont des SMA42056 à cathode commune. Il serait préférable d'utiliser des afficheurs à anode commune, mais j'ai pris ce que j'avais sous la main ;-) Ce n'est pas d'une grande importance mais le second modèle aurait été plus simple à utiliser. J'y reviendrai prochainement dans le dossier Arduino...

Etant donné que chaque afficheur est commandé par 8 pins + commun, cela signifie qu'un Arduino comme le Nano n'a pas assez de ports pour maintenir les 4 afficheurs (32 outputs!). Vous imaginez bien qu'il y a une solution pour parer à cette difficulté sinon le monde de l'électronique serait bien désemparé dès qu'il s'agirait de commander plusieurs dizaines de LEDs... Là aussi, j'y reviendrai dans le dossier Arduino. Cependant je vais simplement introduire le sujet dans les lignes suivantes.

Vous connaissez déjà la notion de persistance rétinienne: afficher très rapidement une séquence de plusieurs informations entrelacées afin d'avoir l'impression qu'elles sont toutes affichées en même temps... Dans le cas présent, nous allons alimenter chaque afficheur l'un après l'autre et ce, très rapidement, de façon à n'utiliser que 8 ports de sortie au lieu de 32!

Ce mécanisme implique deux éléments. Mais avant de vous l'exposer, prenons l'exemple d'une simple LED. Mis-à-part la résistance de protection, l'anode de la LED doit être connectée à la source + et la cathode au 0 ou GND. Dans un montage de base, on connecte l'anode à une sortie de l'Arduino et la cathode au GND de l'Arduino. Ainsi, si le signal de sortie est HIGH, alors la LED s'allume puisque cela crée une différence de potentiels entre l'anode et la cathode. Si le signal est LOW, la différence est nulle et la LED reste éteinte. Donc, le port de sortie de l'Arduino a une fonction d'interrupteur en quelque sorte...

De la même façon, si le signal de sortie est HIGH en permanence mais que nous plaçons un interrupteur du côté de la cathode, la LED ne s'allumera que si l'interrupteur est fermé... Ce sera au transistor de jouer le rôle de l'interrupteur dans ce montage.

En résumé, les deux éléments mis en jeu sont:
  • les 8 ports de sortie, communs au 4 afficheurs
  • chaque cathode commune de chaque afficheur est contrôlée par un transistor.
Le programme fonctionnera alors ainsi:
  • définir les états des 8 sorties pour le premier afficheur et rendre le transistor 1 passant, créant ainsi un circuit fermé entre les segments dont les anodes sont à HIGH et la cathode qui est reliée au GND. Les autres transistors 2, 3 et 4 sont bloquants, donc les segments des afficheurs restent éteints.
  • définir les états des 8 sorties du deuxième afficheur et rendre le transistor 2 passant... Les transistors 1, 3 et 4 sont bloquants...
  • et ainsi de suite, à tour de rôle...
Pour information, voici à quoi ressemble le schéma de montage:


On notera que les mêmes segments des afficheurs sont reliés et que les cathodes communes ont toutes un transistor qui sert d'interrupteur d'alimentation...

A titre indicatif, les 8 résistances protégeant les afficheurs se situent autour de 560 Ohms. Les 4 résistances sur les bases des transistors sont des 2 kOhms. Les transistors sont des NPN 2N2222 très courants.

Remarques:
  • nous aurions pu utiliser une seule résistance par cathode (soient 4 au total) au lieu de 8. En effet, étant donné que chaque segment est alimenté l'un après l'autre, la résistance de protection peut être installée sur la cathode commune entre l'afficheur et le transistor... Mais cela ne fait qu'une économie de 4 résistances...
  • nous aurions aussi pu utiliser moins de sorties pour commander les segments en employant un registre à décalage ou un démultiplexeur. Dans ce cas, le montage aurait été légèrement différent puisqu'il aurait nécessité des afficheurs à anode commune! Nous aurons l'occasion d'y revenir...

Voilà dans les grandes lignes. Bien sûr, ces explications sont très succinctes mais je vous invite à surveiller le dossier Arduino pour plus de détails dans les jours à venir...