ElectroniqueBases > Affichage et multiplexage

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_multiplexage_001_ex_001z
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_multiplexage_001_ex_001
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_multiplexage_001_ex_001a
Affichage du chiffre 2 - Mise en conduction de Q3

affichage_multiplexage_001_ex_001b
Affichage du chiffre 7 - Mise en conduction de Q2

affichage_multiplexage_001_ex_001c
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.

multiplexage_7seg_x4_proto_001c multiplexage_7seg_x4_proto_001dmultiplexage_7seg_x4_proto_001e

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.

multiplexage_7seg_x4_proto_001h multiplexage_7seg_x4_proto_001imultiplexage_7seg_x4_proto_001j multiplexage_7seg_x4_proto_001k

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.

afficheur_leds_7seg_007_proto_001a

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.

vumetre_012a_xxxx

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).

affichage_multiplexage_002_ex_001a

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é).

journal_lumineux_002c_proto_001a

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.

journal_lumineux_lettre_a   journal_lumineux_lettre_e   journal_lumineux_lettre_z

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.

journal_lumineux_texte_hello

journal_lumineux_texte_hello_001a

journal_lumineux_texte_hello_001b

journal_lumineux_texte_hello_001c

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".

journal_lumineux_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.