Contrôle en série de 25 LED à partir d'une seule broche

8

J'ai un microcontrôleur avec une broche numérique disponible.

Comment puis-je contrôler 25 LED?

archgoon
la source
2
Les leds sont-elles adressables séparément ou souhaitez-vous toutes les allumer / éteindre en même temps?
Vincent Van Den Berghe
Les leds sont censées être accessibles séparément. Le microcontrôleur n'est pas censé les alimenter, il suffit de déterminer leur état. En outre, par «port numérique», je veux dire broche.
archgoon

Réponses:

11

I2C IO Expander : - Une surcharge de protocole, mais il devrait être extensible à un très grand nombre (des milliers) de LED.

Registre à décalage simple - Interface Dead Simple, les LED peuvent scintiller lors de la mise à jour si l'horloge du registre à décalage n'est pas assez rapide. L'utilisation d'un registre à décalage à double tampon résoudra ce problème.

Connor Wolf
la source
Merci, c'est exactement ce que je cherchais, mais je ne savais pas comment ils s'appelaient.
archgoon
2
Cela nécessitera au moins une broche, tho. Les registres à décalage ne nécessitent-ils pas au moins deux broches pour l'horloge et les données?
blalor
@blalor - Oui, mais ces deux broches sont conçues pour être partagées entre plusieurs appareils I2C.
Kevin Vermeer
I2C, c'est aussi deux lignes.
XTL
2
Dallas 1-wire n'a besoin que d'une broche, s'étend à N appareils.
Tim Williscroft
16

Le registre à décalage et I2C est bon, mais seulement s'il y a au moins 2 broches libres. Je suggère que l'extension de port 1 fil Dallas DS2408 sera une solution optimale. Le code d'accès à un appareil à 1 fil de Dallas n'est pas si compliqué et il existe de nombreux exemples sur le Web.

Vous pouvez utiliser plusieurs DS2408 connectés à une broche ou implémenter plus de logique après un seul DS2408 selon vos besoins.

x4mer
la source
2
I2C peut être utilisé s'il n'y a pas de broches libres, en supposant que votre bus I2C est utilisé en tant que tel et qu'il n'y a pas de conflits d'adresse.
Kevin Vermeer
5

Avec seulement 1 broche IO, vous pouvez utiliser un extenseur / registre à décalage à 1 fil ou ajouter un autre périphérique à votre bus I2C, comme déjà indiqué. La seule chose qui n'a pas encore été mentionnée est la possibilité d'ajouter un autre esclave à votre port SPI.

SPI est appelé un protocole à 4 fils - Vous avez deux lignes de données, une ligne d'horloge et une ligne de sélection (ainsi qu'une masse commune, mais cela ne compte généralement pas). Cependant, les trois premiers sont partagés entre tous les périphériques sur le bus, donc chaque périphérique après le premier ne prend qu'une seule trace / câble supplémentaire. SPI augmente également votre bus en duplex intégral, mais cela n'aura pas d'importance pour cette application.

Kevin Vermeer
la source
1

Je voudrais simplement enchaîner quelques registres à décalage. (Cela réduit la fréquence à laquelle vous pouvez basculer les LED, bien sûr ..)

Tim
la source
1

Si vous n'avez vraiment qu'une seule broche disponible, le bus 1 fil de Dallas ressemble à la chose la plus évidente. Cependant, comme il s'agit uniquement de sortie, il existe des solutions moins chères. Un bus série PWM qui transporte à la fois des données et une horloge est facile à configurer; voir par exemple la page de Roman Black comme également mentionnée par davidcary. Vous n'avez besoin que de registres à décalage entrée-sortie série comme le 74VHC164 , que vous pouvez mettre en cascade pour autant de sorties que vous le souhaitez (un '164 a 8 sorties).
Dans cette solution, les LED sont pilotées statiquement.

Si vous avez d'autres E / S que vous pouvez partager, comme le SPI d'I2C, vous pouvez opter pour des solutions plus luxueuses, comme le MAX6950 de Maxim . Le MAX6950 dispose d'un contrôle de clignotement et de luminosité et d'une limitation de la vitesse de balayage, pour n'en nommer que quelques-unes. Les LED sont multiplexées, ce qui signifie que vous n'avez besoin que d'un pilote à 16 broches.

Stevenvh
la source
0

La réponse est probablement "une série de registres à décalage", mais pouvez-vous être plus précis dans votre question? Quel microcontrôleur? Qu'entendez-vous par «port numérique»? Une seule broche?

pingswept
la source
Merci, j'ai apporté des éclaircissements et les registres à décalage sont ce que je recherche. Je vous remercie.
archgoon
0

25 LED selon la taille peuvent consommer beaucoup d'énergie pour une seule broche d'E / S numérique sur un microcontrôleur. Plutôt que de les piloter directement, vous devriez probablement utiliser un simple interrupteur FET (donc l'IO est lié à la porte) pour contrôler l'alimentation de la chaîne LED.

Selon votre application, il existe d'autres moyens plus robustes pour y parvenir. Mais jeter un fet vous fera probablement travailler le plus rapidement.

Par exemple, si vous souhaitez transmettre un signal variable, il existe des appareils plus compliqués, parfois appelés relais numériques, qui vous permettent de le commuter numériquement.

Quant au contrôle individuel de 25 LED avec un seul port IO. Comme d'autres l'ont suggéré, vous pouvez utiliser quelques registres à décalage. Il existe des solutions plus compliquées impliquant la communication avec un autre CI à l'aide d'un protocole série (I2C par exemple).

crasic
la source
0

Roman Black décrit le système shift1 qui vous permet de contrôler indépendamment n'importe quel nombre de LED à partir d'une seule broche de microcontrôleur.

@Fake Name, @Tim, @pingswept suggèrent tous de chaîner certains registres à décalage ensemble, la broche de sortie de données DO sur l'une alimentant la broche d'entrée de données DI sur la suivante. Le 74HC595 fonctionnerait bien. (Peut-être qu'une autre puce fonctionnerait un peu mieux ).

(@reemrevnivek, avec ce type de SPI en chaîne, chaque appareil après le premier ne nécessite plus de broches sur le microcontrôleur, contrairement à ce que beaucoup prétendent - pourquoi les écoutez-vous? :-).

Normalement, cela nécessite 4 broches sur le microcontrôleur - MISO, MOSI, SCLK et loquet. Comme vous ne faites que de la sortie, vous n'avez pas besoin d'une broche d'entrée MISO.

Roman Black a compris qu'avec une synchronisation très minutieuse sur une seule sortie de microcontrôleur et avec quelques ajustements minutieux d'un circuit analogique, une seule broche de microcontrôleur peut piloter un circuit analogique simple qui sépare le SCLK commun, le DI broche de la première puce de la chaîne (MOSI) et le signal de verrouillage commun.

Ensuite, ce microcontrôleur peut contrôler 25 LED à partir d'une seule broche.

davidcary
la source
0

Vous pouvez connecter un autre microcontrôleur via cette seule broche et lui parler via 1 fil (ou votre propre protocole si vous avez besoin d'une vitesse élevée). Ensuite, cet autre microcontrôleur s'occupe des LED.

avra
la source