# Charlieplexing

Charlieplexing est un mode de multiplexage utilisé avec des matrices de LED ou de commutateurs permettant de réduire le nombre de ports d'entrées/sorties (I/O). Ce mode de multiplexage tire parti des avantages de la logique trois-états et du fait que les LEDs ne conduisent que dans un seul sens.

## Origine

Le terme Charlieplexing vient de Charles Allen, un ingénieur chez Maxim. Cette technique a été utilisée la première fois dan le circuit intégré MAX6951 sorti en 2001. Le nom Charlieplexing, lui, est apparu pour la première fois dans une note d'application de l'entreprise en 2003.

## Fonctionnement

Dans le cas d'un matriçage classique, le nombre de LEDs adressables est égal au nombre de lignes multipliées par le nombre de colonnes. Le nombre maximum de LEDs adressables en fonction d'un nombre $n$ de ligne d'entrées/sorties est égal à ${\frac {n^{2}}{4}}$. Par exemple avec 6 lignes d'entrées/sorties, 9 LEDs peuvent être commandées.
En utilisant la technique du Charlieplexing, le nombre de LEDs adressables passe à $n^{2}-n$, $n$ étant le nombre de lignes d'entrées/sorties utilisées. Par exemple, si $n$ est égal à 6, on peut adresser 30 LEDs. A comparer avec les 9 LEDs du multiplexage classique multiplexage classique.
Le cas de Charlieplexing le plus simple est l'utilisation de 2 LEDs tête-bêche commandées par deux lignes de port. Si les deux ports sont configurés en sortie et que le port 1 est à 1 et le port 2 à 0, la LED D2 s'allume tandis que D1 reste éteinte. Si on inverse la polarité des deux ports, cette fois, c'est D1 qui s'allume et D2 qui reste éteinte.
Dans le cas des microcontrôleurs, les lignes d'entrée-sortie, en mode entrée sont dites à haute impédance. C'est cette caractéristique qui est utilisée dans la technique du Charlieplexing. Si on ajoute un troisième port au montage, des LEDs tête-bêche peuvent être ajoutées non seulement entre les ports 1 et 2 mais aussi entre les ports 2 et 3 et les ports 1 et 3. Le principe consiste comme dans le cas avec deux ports à mettre des états différents sur deux ports et à mettre le troisième port en entrée de façon à le placer en haute impédance. Par exemple si on veut allumer D3, on va devoir mettre le port 2 à 1 et le port 1 à 0 de façon à ce qu'un courant circule de port 2 à port 1 à travers D3. Le port 3 sera mis en haute impédance de façon à ce qu'aucun courant ne circule entre port 2 et port 3 ce qui allumerait la LED D6. Ce serait le cas si port 3 était mis à 0. Si on l'avait mis à 1, c'est D7 qui se serait allumé en même temps que D3.
Si on veut allumer D8, on met le port 1 à 1 et le port 3 à 0. Port 2 sera mis à haute impédance mais même dans cette configuration, pourquoi D4 et D6 ne s'allument-elles pas ? En fait, c'est dû à une caractéristique des LEDs qui ont besoin d'une certaine tension à leurs bornes pour s'allumer. Cette tension appelée Forward Voltage est typiquement de 2,5 à 3,5 volts. La tension délivrée par un microprocesseur en sortie si elle est de 3,3 volts ne permettra pas l'allumage de deux LEDs en série. Dans le cas de microcontrôleurs fonctionnant en 5V, les deux tensions aux bornes des LEDs s'additionnant, le courant sera tellement faible qu'elles ne s'allumeront pas non plus.
Le principe décrit ci-dessus peut être étendu à n'importe quel nombre de ports.

## Inconvénients
### Vitesse de rafraîchissement

Le multiplexage utilise la persistance rétinienne pour donner l'impression que plusieurs LEDs sont allumées en même temps. Ceci implique que la vitesse de rafraîchissement soit suffisamment élevée. Ce dernier point implique que comme la LED n'est allumée que pendant un bref instant, le courant qui traverse la LED doit être suffisamment élevé pour que son intensité lumineuse soit correcte.

### LED en panne

Une LED en panne et présentant soit un court-circuit soit un circuit ouvert peut être difficile à repérer à cause des autres LEDs qui pourraient s'allumer ou pas à cause de la défectuosité de celle-ci.

### Mélange de LED ayant des tensions de fonctionnement différentes

Le fonctionnement du circuit repose en partie sur la tension directe aux bornes d'une LED. Si des LEDs de caractéristiques différentes sont utilisées, le circuit peut avoir un fonctionnement erratique. De plus, les résistances fixant le courant des LEDs seront difficile à calculer puisque chaque port peut être amené à piloter différentes LEDs avec des caractéristiques différentes.