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?
microcontroller
led
multiplexer
JYelton
la source
la source
Réponses:
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)2 n
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 - 1n2−n n n−1
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.
la source
En utilisant Charlieplexing, vous pouvez directement piloter LED à partir de broches.nn×(n−1) n
Exemple:
Six LED sur 3 broches:
la source
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
la source
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.
la source
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.
la source
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.
la source