Comment puis-je contrôler de nombreuses LED avec seulement quelques broches sur mon micro?

10

J'utilise un Atmel ATtiny13 qui a une E / S à 6 broches. Je voudrais contrôler environ 15 LED, mais je ne sais pas comment tout connecter. Sans multiplexage d'aucune sorte, il semble que je ne pourrais contrôler que 6 LED à la fois. Suis-je limité à seulement 6 LED en raison de la taille du microcontrôleur?

JYelton
la source
Je n'avais pas vu. Peut-être dupliqué: electronics.stackexchange.com/questions/9860/…
Daniel Grillo
3
N'oubliez pas de comparer vos options avec le coût d'achat d'un microcontrôleur légèrement plus épineux. Faites également attention aux limites par port et au courant total.
joeforker
Quand j'ai commencé à travailler avec les micros il y a quelque temps, c'est une question que j'aurais souhaité avoir été facile à trouver avec des réponses claires. J'ai réussi à en apprendre davantage sur le charlieplexing et à le mettre en œuvre avec succès, mais je voulais recréer la question ici avec l'excellente qualité des réponses de la communauté SE.
JYelton
1
@joeforker Vous avez raison, le coût d'un micro avec plus de broches était assez minime, étant donné que mon projet était unique. J'ai pensé à un moment donné à utiliser un micro avec environ 20 broches d'E / S pour accomplir le travail, mais l'un de mes objectifs était une très petite empreinte de circuit imprimé. Aussi, génial adjectif pinnier !
JYelton

Réponses:

18

Il existe plusieurs méthodes qui peuvent être utilisées pour piloter un grand nombre de LED à partir de quelques broches IO.

Le plus simple est le multiplexage d'affichage ligne / colonne standard. Avec cette technique, vous pouvez piloter LED avec broches IO. Mathématiquement, le rapport cyclique est: n(n/2)2n

1minimum(unique row patterns, unique column patterns)

Cela signifie que cette technique a un rapport cyclique de 100% lorsque toutes les LED sont allumées (ou toutes les lignes ou toutes les colonnes sont identiques) et un rapport cyclique de lorsqu'une ligne diagonale doit être allumée (ou toutes les lignes sont différentes ). Vous n'êtes garanti que 100% du cycle d'utilisation lorsque vous allumez chaque LED ou une LED (ou zéro LED, mais cela ne compte pas vraiment pour beaucoup).1/n

Charlieplexing est un peu plus complexe . Avec cette technique, vous pouvez piloter LED avec broches IO. Seules LED peuvent être allumées simultanément avec cette technique. Mathématiquement, le rapport cyclique est:n n - 1n2nnn1

1minimum simultaneous sets

où un ensemble simultané est un groupe unique de LED qui a une anode commune ou une cathode commune. (Cela n'a pas été prouvé, c'est juste ce à quoi je suis arrivé après avoir réfléchi au problème pendant une minute. Si le rapport cyclique est important pour vous, vous voudrez approfondir cela.) Il s'agit d'un calcul beaucoup plus complexe à la fois intellectuellement. et par calcul que le calcul équivalent pour le multiplexage standard. En effet, vous obtenez un rapport cyclique de lorsque toutes les LED sont allumées, mais certains (seulement certains) modèles de n-1 ou moins de LED peuvent avoir un rapport cyclique de 100%. Vous n'êtes garanti que 100% du cycle d'utilisation lorsque vous allumez 1 LED.1/n

La dernière méthode que je mentionnerai consiste à utiliser un registre à décalage ou un extenseur IO. Avec deux broches (soit l'interface de données brutes / horloge, I2C ou SPI unidirectionnel), vous pouvez contrôler un nombre arbitrairement élevé de LED. Le rapport cyclique pour n'importe quel modèle est de 100%, mais le taux de mise à jour est inversement proportionnel au nombre de LED. C'est la méthode la plus coûteuse. Pour 15 LED, il sera probablement moins cher de simplement passer à un micro avec autant de broches IO.

Kevin Vermeer
la source
+1 pour avoir expliqué un peu l'aspect du rapport cyclique. Dans la deuxième phrase sur Charlieplexing, vouliez-vous dire "piloter n ^ 2-n LED avec n broches IO?
JYelton
Le Charlieplexing peut être fait de manière très similaire au multiplexage, si l'on omet simplement une lumière de chaque ligne. En fait, il peut être possible de "retrouver" cette lumière en ajoutant une diode, bien qu'à moins que les pilotes de colonne soient des sorties à courant constant, il peut être difficile de l'adapter à la luminosité des autres.
supercat
11

En utilisant Charlieplexing, vous pouvez directement piloter LED à partir de broches.nn×(n1)n

Exemple:

Six LED sur 3 broches:

PINS        LEDS
0 1 2   1 2 3 4 5 6
0 0 0   0 0 0 0 0 0
0 1 Z   1 0 0 0 0 0
1 0 Z   0 1 0 0 0 0
Z 0 1   0 0 1 0 0 0
Z 1 0   0 0 0 1 0 0
0 Z 1   0 0 0 0 1 0
1 Z 0   0 0 0 0 0 1
0 0 1   0 0 1 0 1 0
0 1 0   1 0 0 1 0 0
0 1 1   1 0 0 0 1 0
1 0 0   0 1 0 0 0 1
1 0 1   0 1 1 0 0 0
1 1 0   0 0 0 1 0 1
1 1 1   0 0 0 0 0 0

Schéma de Charlieplexing avec 3 broches de sortie

Daniel Grillo
la source
Merci pour le jeu de données de broches de sortie ainsi que pour un schéma utile.
JYelton
1
Une autre façon de dessiner le schéma est comme une grille NxN, mais en pilotant uniquement les colonnes et en remplaçant la diagonale principale par des shorts de ligne-colonne.
supercat
signifie que je ne peux pas tous les allumer en même temps? Est-ce à dire que si je veux tous les allumer en même temps, je dois faire assez de plexion temporelle pour tromper les yeux?
MaNyYaCk
@MaNyYaCk Oui. Vous avez raison.
Daniel Grillo
8

Sans multiplexage (entraînement direct), vous êtes limité à 6 LED.

Avec charlieplexing, vous pouvez piloter n * (n-1) LED à partir de n broches.

Avec les extenseurs d'E / S ou les registres à décalage, vous pouvez piloter un nombre pratiquement illimité de LED.
Exemple: Module d' extension d'E / S I2C 8 bits MCP23008

mjh2007
la source
Pouvez-vous expliquer ce que seraient les extenseurs d'E / S?
JYelton
3
Un extenseur d'E / S est une puce externe qui contient des broches et des registres d'E / S. Vous pouvez utiliser un bus de communication standard comme I2C ou SPI pour communiquer avec eux.
mjh2007
+1 Vous pouvez piloter de nombreuses LED avec le TLC594 de TI ( focus.ti.com/lit/ds/symlink/tlc5940.pdf ), mais il peut être exagéré pour de nombreux travaux. search.digikey.com/scripts/DkSearch/…
kenny
Merci - je devrais concevoir un projet qui utilise des extenseurs d'E / S pour forcer mon apprentissage de leur utilisation.
JYelton
4

Comme @ mjh2007 l'a suggéré avec un extenseur I2C. Mais il y en a spécifiquement pour piloter les LED qui éviteront le besoin de résistances externes de limitation de courant.

Brian Carlton
la source
2

Voici un exemple de charlieplexing que j'ai construit.

C'est un simulateur de faisceau de phare et utilise une série de 12 LED charlieplexed à 4 GPIO pour balayer un faisceau de lumière autour d'un disque. Il y en a une vidéo ici .

Le projet est basé sur PIC, j'utilise un PIC12f683 qui est également un uP 8 broches et pourrait être considéré comme comparable aux AVR 8 broches.

L'intensité de la LED est entraînée par une interruption qui fournit un PWM à 32 pas à environ 60 Hz. Seules deux LED sont autorisées à être allumées à la fois, ce qui donne un droit de 50% pour chaque LED car c'était tout ce dont j'avais besoin. Il offre également un bon compromis entre le taux de rafraîchissement PWM et la résolution.

Le codage pour l'utilisation du charlieplexing est en fait assez simple si vous vous en tenez à la méthode "classique" consistant à n'allumer qu'une seule LED à un moment donné à une fréquence de rafraîchissement très rapide. Je travaille d'abord le PORT et le TRIS (registres spécifiques aux images) requis sur papier, puis je stocke les résultats dans un tableau statique. Pour allumer la LED x, le PIC doit simplement rechercher la valeur à l'index du tableau [x] et les écrire directement sur le PORT (avec un peu de masquage pour préserver l'état des autres broches non utilisées dans le charliplex)

Mon projet n'a que 12 LED pas 15 ou le maximum 20 que les 5 GPIO permettront car je voulais garder une GPIO de rechange pour un développement futur.

Quoi qu'il en soit ... J'ai juste pensé qu'il pourrait être utile d'avoir un exemple de travail similaire à votre demande.

Le code source complet et les schémas sont disponibles sur mon blog.

Matt Casey
la source
0

Une autre option serait d'utiliser les LED Neopixel. Ils ont un circuit intégré de contrôle et vous n'avez besoin que d'une broche pour contrôler autant de LED que vous le souhaitez. Bien sûr, vous aurez alors besoin d'une source d'alimentation LED séparée adéquate.

nécessaire
la source