La multiplication des pins (2)
La dernière fois, on a cherché à "multiplexer" les signaux, pour commander plus de composants qu´on n´a de pattes.
Car on ne veut plus aujourd´hui comme à l´époque de ce Concorde fabriquer des torons de milliers de fils électriques gros comme une cuisse... Et en plus, si on en fabrique 10, il y a dix fois le même travail à faire avec les risques d´erreur...
Un montage très complexe en Meccano électronique, c´était un peu pareil : percer, couper, dénuder, souder, chaque lecteur devait vivre l´angoisse.
Avec un microP programmé, c´est fini : seul l´auteur sue, le lecteur jouit !
 

Profitons à fond des trois états
Pour augmenter encore le nombre de leds allumables par un nombre restreint de pins, on va étudier puis adopter le montage ci-dessous [c´est un schéma signé Microchip, qu´on trouve dans un document (en anglais) consacré spécialement aux PIC à faible nombre de pattes !], où le troisième état logique est utilisé : z, la haute impédance.

Une led est allumée :
a
) quand son anode est sur une patte niveau du microP ;
b
) et sa cathode est sur une patte au niveau du microP ;
c) et quand une (ou des) résistance(s) chutrice(s) l´empêche(nt) d´exploser
Une led est éteinte dans toutes les autres conditions (deux pattes au , deux pattes au , une patte à et une patte à haute impédance, deux pattes à haute impédance, etc.)
Vérifions pour la led ci-dessous (quand elle est seule), par exemple : la cathode de cette led est sur GP1, son anode sur GP2 ; nous devons mettre GP2 en sortie et porter cette sortie à (elle va fournir, source, du courant)  ; GP1 en sortie et la porter à (elle va absorber, sink, du courant), tous les autres GP étant négligeables (0 ou 1, on s´en fiche).
Pour ce faire nous allons écrire dans le registre TRISIO qui mémorise si les pattes sont en entrée (bit à 1) ou en sortie (bit à zéro) : un dans GP1 et GP2 les met tous les deux en sortie (mnémonique : zéro —> O —> Output). Puis nous allons écrire dans GPIO qui mémorise si les pattes sont à (bit à 1) ou à (bit à zéro) : et voilà, notre led est allumée !
Toutes les autres combinaisons des bits 1 et 2 de TRISIO/GPIO entraînent une led éteinte... Vérifiez-le sur ces deux exemples  : ici TRISIO2 est en entrée (donc en haute impédance : tout se passe comme si la pin GP2 n´était reliée à rien)...
Ici GPIO2 est à zéro...
Reprenons notre schéma de tout à l´heure : L1 (qu´on vient de traiter sous toutes les coutures) s´y retrouve, avec quatre autres leds. Chacune pourra être allumée ou éteinte indépendamment de ses voisines, grâce à ce biais de la logique trois états ( ou ou Z)...
N.-B. — Pour éviter une éventuelle confusion : le “Z” qui dénote en électronique la haute impédance n´a rien à voir avec le “Z” du registre STATUS des PIC.

FAQ Séraphin nous écrit : “Ça n´a pas de bon sens de prendre un microP pour faire des jeux de lumière, câlice ! On a le LM3914 ou le UAA 170 qui sont exprès pour ça !”
Faux, mon cher Séraphin, on ne trouve presque plus dans le commerce de ces “drivers de bargraph” (ou alors avec la mention “jusqu´à épuisement du stock”) ! Et pour cause : leur prix, entre 3 et 5 euros (soit le prix de un à onze microP !), et qu´on ne pourra jamais espérer voir baisser...
FAQ Séraphin insiste : “Ouais, mais quand même : faire clignoter des lampions, c´est niaiseux.
Soit, alors disons qu´à partir d´aujourd´hui une led représente n´importe quel organe de train électrique : moteur de loco, d´accessoire, aiguillage, fil à mémoire, dételeur, relais, ampoule, fil chaud à découper le polystyrène, et même la fournaise pour chauffer ton local ! Et je n´invente rien ni ne fais de science-fiction : pour protéger des parasites nos mignons microP, on les isole du monde extérieur en les laissant seulement commander la led d´un optocoupleur (cf. Pictrain2), qui fait tout le reste du boulot.
Pendant cette digression, nos deux registres ont donc été modifiés et voici une led qui s´allume ! Vérifions une dernière fois l´état des deux registres , et qu´aucune des autres leds n´est en état de s´illuminer... (un × dans ce tableau signifie que l´état de ce bit 0 ou 1 est indifférent) :
Pourquoi deux résistances ? Parce que le courant circulera toujours (quelle que soit la configuration) par ces deux R (en série et dont les valeurs s´additionnent), à laquelle nous allons donc accorder la demi-valeur d´une R toute seule, soit environ 220 ohms (note 1).
Voici le tableau complet d´une solution plus riche encore , commandant huit lampes avec quatre pins...
Et “la totale” (toujours selon un schéma de Microchip [note 3], ne croyez pas que sommes en train de délirer), douze leds — soit plus qu´avec un 4017 à quatorze pattes, C.Q.F.D. !
On pourra battre facilement ce record car vous avez remarqué que GP0 restait inutilisée (et GP3 aussi, mais sachant que cette dernière est confinée au rôle d´entrée et que son bit TRISIO reste éternellement à , elle peut être considérée comme perdue)... Avec cette pin GP0 en plus, on commande vingt leds, la formule étant : nombre_de_leds_maximal = nombre_de_pins × (nombre_de_pins – 1).
Après cela, il n´y a plus qu´à saisir le code nécessaire à ces opérations...
Ci-contre, un extrait du programme (sans la zone d´en-tête habituelle, que vous pourrez copier à partir d´une des applications Pictrain). Il faudra, évidemment, introduire une pause à chaque changement de led (si l'on recopiait ce code sans pause, c'est quelques millionièmes de seconde que chaque led éclairerait !)...
Dans un premier temps, on se rend en bank 1 et tout TRISIO est mis à zéro (clear). Puis on s´occupe de la led n° 1 : quatre des bits de TRISIO sont réglés en entrée ou sortie (lignes 6 et 7), puis on passe en bank 0 et un bit est écrit dans GPIO, celui de la led 1... (lignes 9 et 10).
Pour la led 2, le contenu de TRISIO n´a pas à être modifié, on reste en bank 0 et on change juste la position du bit de GPIO pour viser la led 2 (lignes 13 et 14).
Le reste est à l´avenant... Si l´on voulait commander les leds dans un autre ordre (1,7,6,2,4,10...) il serait nécessaire de modifier TRISIO à chaque opération.
Dans l´état actuel de nos connaissances, la saisie de ce code est longue et fastidieuse ; mais personne d´entre nos lecteurs ne peut douter qu´il existe des solutions bien plus rapides et élégantes de faire la même chose et que nous découvrirons bientôt...
Vous trouverez ci-dessous le pense-bête graphique que je m´étais fait pour m´aider à la saisie :


1. Il s'agit là de mes valeurs habituelles car j'utilise des leds bleues à grand rendement lumineux. Pour des rouges, ou en général si la luminosité ne vous satisfait pas, vous pouvez mettre des résistances de moindre valeur !
2. D'autant plus qu'il existe évidemment des microP possédant plus de pattes (jusqu'à 80) et destinés à une gestion bien plus simple de ce genre de problème...
3. Nous avons d'ailleurs corrigé une grave faute de frappe dans un tableau de cette page de Microchip ;¬)
Jidé
09.11.2007
Bibliogr. : Microchip, ds91029
Nota-bene. — Les étoiles envoient vers le dictionnaire des termes électroniques, en cours de fabrication, voir ici....
Ptitrain, l´e-magazine du train éclectique. — Directeur de la publication : Christophe Franchini.
Rédacteur en chef : Jean-Denis Rondinet