Dernière mise à jour :
13/09/2009
Présentation
Dans un système d'affichage, le multiplexage est
un procédé qui consiste à utiliser plusieurs
voyants ou plusieurs afficheurs et à ne pas tous les allumer à la fois,
en vue
d'économiser de l'énergie et de limiter le nombre de fils de câblage.
Par exemple, l'affichage de votre radio réveil numérique, de votre
machine à laver ou de votre four micro-onde est fort probablement
multiplexé.
Principe de fonctionnement
Le
principe est fort simple à comprendre, surtout si vous savez déjà que
la vidéo que vous regardez sur une télé est constituée d'une
suite
d'images, qui elles-mêmes sont constituées de plusieurs lignes, chaque
ligne étant quant à elle composée de plusieurs points individuels (non,
ce n'est pas tant hors sujet que ça peut sembler l'être). Les
points sont allumés à tour de rôle, les lignes sont dessinées les unes
après les autres, et les images se succèdent rapidement, à une cadence
de 25 images par secondes (en réalité 50 trames par secondes, mais on
ne vas pas entrer dans les détails). Bref, à un instant donné, un seul
point de l'image est éclairé sur votre télé, et pourtant vous voyez une
image
complète. Pourquoi ? Parce que tout se passe très vite, à tel point que
votre oeil n'arrive pas à suivre. La raison pour laquelle cela est fait
comme ça est lié à l'histoire de la télévision et à la technique alors
employée, qui ne permettait de transmettre qu'un seul point à la fois.
Pour tromper le téléspectateur, il faut envoyer les points les un après
les autres à très grande vitesse (là encore je simplifie car en
télévision analogique, on ne transmet pas des points mais des tensions
continues qui varient dans le temps; mais au niveau de l'analyse de
l'image effectuée dans la caméra et au niveau du téléviseur qui
restitue cette image, il est bien question de points finis). Mais vous
devez vous demander quel rapport il peut bien exister entre télévision
et afficheurs sept segments... Celui de la persistance rétinienne. Pour
que l'oeil et le cerveau n'y voient que du feu, c'est à dire pour qu'il
ne se rende pas compte que tout n'est pas affiché en même temps, il
faut que la cadence d'affichage aille au-delà d'une certaine vitesse,
qui est voisine de 20 Hz. Les anciens films tournés à 15 images par
seconde rendent parfaitement le côté saccadé ou "scintillant" que l'on
a cherché par la suite à éliminer pour diminuer la fatigue visuelle due
à ce défaut. Les téléviseurs 50 Hz on fait leur apparition (affichage
doublé de chaque image d'origine), et les écrans d'ordinateur affichent
actuellement entre 60 et 100 images par seconde. Pour revenir à nos
moutons, l'affichage d'un
nombre de 0000 à 9999 implique l'emploi de quatre afficheurs, et si
chacun est
allumé à tour de rôle, il faut que ce soit rapide.
Multiplexage "simple"
On
peut avoir interêt à utiliser le multiplexage dès l'instant où on
utilise au moins deux afficheurs. Le schéma suivant montre l'exemple
d'un circuit permettant d'afficher un nombre compris entre 000 et 999,
à l'aide de trois
afficheurs
à LED
sept segments. Une façon simple de faire (sans multiplexage) est
d'attaquer les trois afficheurs de façon séparée, ce qui porte le
nombre total de fils de commande à 24, en tenant compte de l'électrode
commune des afficheurs. Le schéma qui suit montre ainsi comment
afficher le nombre 274 en mode non multiplexé.
Etat haut = H = Rouge
Etat bas = L = Bleu
Affichage sans
multiplexage
Avec le
schéma qui précède, les trois afficheurs sont alimentés en continu, et
la consommation globale est maximale pour l'affichage du nombre 888
(tous les segments sont alors allumés). Regardons maintenant le schéma
suivant, qui met en oeuvre le multiplexage.
Affichage avec
multiplexage
Le
nombre total de fils de commande est passé de 24 à 10, pour un nombre
identique d'afficheurs. Ce qui est loin
d'être négligeable, sachant que parfois un seul fil de gagné
permet de se sortir d'une situation "embêtante". Et encore, nous
n'avons affaire ici qu'à trois afficheurs. Avec un système à quatre
afficheurs, on passe de 32 fils de commande à 11 fils seulement (ou
même de 36 fils à 12 fils si on ajoute le point décimal sur chaque
afficheur) ! Maintenant, détaillons le fonctionnement du système. Dans
le cas du système non multiplexé, les trois afficheurs étaient
alimentés en même temps, ce
n'est plus le cas maintenant. Les fils de commande qui permettent
d'allumer les segments A à G sont reliés
en même temps
à tous les afficheurs, mais les points
communs des segments sont quant à eux pilotés à part au travers des
fils C1, C2 et C3. Les trois vues
qui suivent montrent que l'on active en fait un seul afficheur à la
fois, en
lui faisant allumer les seuls segments nécessaires pour le chiffre qui
le concerne. Dans le cas présent, on souhaite l'affichage du nombre
274, le premier afficheur doit donc afficher le chiffre 2, le
second afficheur doit afficher le chiffre 7 et le dernier
afficheur doit montrer le chiffre 4. L'affichage du nombre 274
s'effectue ainsi en trois étapes, qui sont les suivantes :
1
- Activation de l'afficheur n° 1 pour le chiffre 2 (cathode commune à
la masse au travers
de la jonction E-C de Q3), et activation des segments A, B, D, E et G.
2 - Activation de l'afficheur n° 2 pour le chiffre 7 (cathode commune à
la masse au
travers de la jonction E-C de Q2), et activation des segments A, B et C.
3 - Activation de l'afficheur n° 3 pour le chiffre 4 (cathode commune à
la masse au
travers de la jonction E-C de Q1), et activation des segments B, C, F
et G.
Puis on retourne au point 1, et ainsi de suite.
Affichage du chiffre 2 -
Mise en
conduction de Q3
Affichage du chiffre 7 - Mise en conduction de Q2
Affichage du chiffre 4 - Mise en conduction de Q1
Vous
l'avez compris, si on activait en même temps les trois afficheurs,
chacun afficherait le même chiffre, et le nombre affiché ne serait pas
celui attendu.
Remarque
: avec un tel mode d'affichage, on peut fort bien utiliser une
combinaison d'afficheurs numériques et de LEDs isolées. C'est ce que
j'ai fait par exemple avec mon
thermomètre
003.
Exemple de proto avec quatre afficheurs 7 segments
J'ai réalisé le proto suivant pour tester mes circuits mettant en
oeuvre le multiplexage d'afficheurs sept segments. Les afficheurs sont
montés sur des supports en barrette sécable, ce qui
me permet de mettre aisement des afficheurs à anode commune ou à
cathode commune.
Plus de détail concernant ce circuit d'affichage à la page
Afficheur
LED sept segments 003.
Il est parfois rigolo de prendre en photo un affichage
multiplexé. Si le temps "d'ouverture" du système de prise
de vue est trop court par rapport à la fréquence de
balayage des afficheurs, tous les chiffres ne sont pas imprimés
sur la pellicule ou sur l'image numérique, comme peuvent en
témoigner les photos suivantes, prises avec un APN lors d'essais
effectués sur mon
chronomètre
001.
Les photos sont sombres parce que prises le soir avec pour seul
éclairage un flash bien peu efficace...
Exemple de proto avec module afficheur 4 digits 7
segments
Les
quatres afficheurs individuels vus ci-avant peuvent être remplacés par
un module d'affichage multiple tel un afficheur 4 digits 7 segments.
C'est ce que j'ai fait pour mon
afficheur
LED sept segments 007.
Multiplexage "multiple"
Il
existe d'autres procédés de multiplexage, permettant de réduire encore
plus le nombre de fils de commande, mais qui ne conviennent pas pour
des afficheurs dont les segments possèdent un point commun (anode
commune ou cathode commune). Par exemple, il est possible de piloter 12
leds différentes avec seulement 4 fils de commande, comme le suggère le
schéma suivant.
Mais
pour que ce type de câblage puisse fonctionner, on ne peut pas se
contenter de travailler seulement avec des niveaux logiques hauts (par
exemple +5 V) et des niveaux logiques bas (0 V). Il faut en plus avoir
à disposition un troisième état logique, qui est un état logique
"inexistant". Je vous rassure tout de suite, il est très facile de
disposer de cet état logique "inexistant", qui ne correspond à rien
d'autre qu'à un circuit ouvert (en électronique, on nomme aussi cet
état "état haute impédance"). Le principe est donc aussi simple que
cela : chaque borne de chaque led du schéma précédent peut être portée
soit à un état logique bas, soit à un état logique haut... soit à rien
du tout ! Vous pouvez faire le compte des possibilités qu'offrent 4
fils de commande, vous trouverez bien 12 solutions possibles (en fait
6 solutions possibles, mais possibilité de câbler deux leds tête-bêche
pour chacune), que le
tableau suivante résume pour vous éviter tout mal de crâne.
Etat haut = H = Rouge
Etat bas = L = Bleu
Etat haute impédance = Z = Gris
Led
allumée |
A |
B |
C |
D |
D1 |
H |
L |
Z |
Z |
D2 |
L |
H |
Z |
Z |
D3 |
H |
Z |
L |
Z |
D4 |
L |
Z |
H |
Z |
D5 |
H |
Z |
Z |
L |
D6 |
L |
Z |
Z |
H |
D7 |
Z |
H |
L |
Z |
D8 |
Z |
L |
H |
Z |
D9 |
Z |
H |
Z |
L |
D10 |
Z |
L |
Z |
H |
D11 |
Z |
Z |
H |
L |
D12 |
Z |
Z |
L |
H |
Exemple
: pour allumer la led D7, il faut appliquer un état logique haut sur B
(carré rouge), un état logique bas sur C (carré bleu), et A et D
doivent "rester en l'air" (carré gris).
D'autres
leds que D7 voient bien un niveau logique haut ou bas sur une de leurs
pattes, mais seule D7 voit ce qu'il faut sur ses deux pattes pour lui
permettre de s'illuminer. D8 aimerait sans doute bien s'allumer aussi,
mais elle est branchée "à l'envers" par rapport aux tensions
appliquées, et reste donc éteinte. Notons en passant que la tension
inverse appliquée à chaque led reste limitée par la tension directe de
la led qui est en parallèle tête-bêche. Exemples pratiques en pages
Voltmètre
006 et
Vumètre 012.
Multiplexage en colonne
Il existe certaines réalisations qui
possèdent un très grand nombre de LED montées en "matrice" (plusieures
rangées et plusieures colonnes) qui servent à afficher des caractères
alphanumériques constituant un message de type texte. Il s'agit de
journaux lumineux comportant parfois plusieurs centaines de LED (un
premier
modèle
en cours de fabrication et
un
second plus avancé).
Avec
ce type de montage, le multiplexage est presque imposé de fait, à cause
de la consommation électrique excessive à laquelle il faudrait
autrement se plier.
Principe de base
Chaque
caractère alphanumérique (lettres, chiffres et autres caractères
spéciaux) est dessiné sur
une
matrice de 5 (colonnes) x 7
(rangées) de LED.
On peut aussi, bien sûr utiliser des matrices 8x8 qui parfois coûtent
moins cher.
Le
fait que chaque caractère est affiché sur plusieurs colonnes autorise
leur défilement progressif et pas brutal, puisqu'il suffit de décaler
chaque colonne d'un (seul) cran vers la gauche.
Le
défilement des caractères n'est pas obligatoire si le message à
afficher est court, mais le devient bien si l'ensemble du texte déborde
de la capacité d'affichage.
Stockage des caractères
Afin
de pouvoir être affichés à l'endroit voulu, les caractères doivent être
"dessinés" et stockés en mémoire, et pouvoir être appelés à tout
instant. L'occupation mémoire requise pour leur stockage dépend du
nombre de LED affectées à chacun d'eux, qui dans l'exemple qui
précède est de
35 bits (matrice 5 x 7). En pratique, l'occupation réelle est de 5
octets, ce qui correspond à 40 bits (5 x 8 bits), 5 bits
ne sont
pas utilisés sur les 40. Ce qu'il faut comprendre, c'est qu'on ne
stocke pas des caractères "entiers", mais des "tranches
verticales" de caractère, cela est indispensable pour permettre un
défilement par pas d'une colonne à la fois. Le mieux est de s'appuyer
sur un exemple concret, prenons par exemple le cas de la lettre "E".
Si
on regarde la première colonne de la matrice qui forme cette lettre, on
constate que toutes les LED sont allumées. Chaque LED étant
représentée par un bit de donnée, et chaque colonne comportant
sept LED (sept bits), chaque colonne peut être stockée dans un
octet de
huit bits. Par convention, disons que la LED la plus haute de
la
colonne correspont au bit de poids fort de l'octet, et que
la LED
la
plus basse correspond au bit de poids faible. Dans ces contitions, on
peut dire que la valeur de l'octet représentant la première colonne du
caractère "E" est "01111111" en binaire, soit 7F en hexadécimal ($7F).
Notez bien encore une fois que le bit de poids fort est ici le septième
bit et non le huitième bit, puisque chaque colonne ne comporte que
sept LED et non huit. La valeur du huitième bit qui n'est pas
utilisé peut
indifférement être 0 ou 1, j'ai choisi par convention de lui laisser
toujours la valeur 0. La valeur de l'octet qui représente la deuxième
colonne a pour valeur "01001001" ($49), cette valeur est la même pour
les colonnes 3 et 4. Et pour la cinquième colonne, valeur de "01000001"
($41). D'un point de vu logiciel, nous aurons donc, pour la lettre E,
les octets suivant à traiter :
ch_E : array[0..6]
of byte = (
%11111000,
%10000000,
%10000000,
%11110000,
%10000000,
%10000000,
%11111000
);
Avez-vous remarqué la "forme" donnée par les bits de valeur 1 ?
Au total, si on compte les 26 lettres de l'alphabet, les
dix chiffres de 0 à 9 et une dizaine de caractères spéciaux, il nout
faut 46 x 5 octets, soit 230 octets, qui peuvent être placés en
ROM, EEPROM ou dans une mémoire externe, selon ressources
disponibles.