Controle serial de 25 LEDs de um único pino

8

Eu tenho um microcontrolador com um pino digital disponível.

Como posso controlar 25 LEDs?

archgoon
fonte
2
Os leds são endereçáveis ​​separadamente ou você deseja ativar / desativar todos eles ao mesmo tempo?
Vincent Van Den Berghe
Os leds devem ser acessados ​​separadamente. O microcontrolador não deve estar ligado a eles, simplesmente determinando seu estado. Além disso, por "porta digital" quero dizer pino.
Arquivon

Respostas:

11

I2C IO Expander : - Alguma sobrecarga de protocolo, mas deve ser expansível para um número muito grande (milhares) de LEDs.

Registro de turno simples - interface simples morto, os LEDs podem piscar durante a atualização se o relógio do registro de turnos não for razoavelmente rápido. O uso de um registro de turno com buffer duplo corrigirá isso.

Connor Wolf
fonte
Obrigado, era exatamente isso que eu estava procurando, mas não sabia como eles eram chamados.
Arquivon
2
Isso exigirá pelo menos um pino. Os registros de deslocamento não exigem pelo menos dois pinos, para relógio e dados?
blalor
@blalor - Sim, mas esses dois pinos foram projetados para serem compartilhados entre vários dispositivos I2C.
Kevin Vermeer
I2C também é duas linhas.
XTL
2
Um fio de Dallas precisa apenas de um pino, expande para N dispositivos.
precisa
16

O Shift Register e o I2C são bons, mas apenas se houver pelo menos 2 pinos livres. Sugiro que o extensor de porta de 1 fio Dallas DS2408 seja uma solução ideal. O código para acesso a dispositivos de 1 fio em Dallas não é tão complicado e há muitos exames na web.

Você pode usar vários DS2408 conectados a um pino ou implementar mais lógica após um único DS2408, conforme desejar.

x4mer
fonte
2
O I2C pode ser usado se houver zero pinos livres, assumindo que seu barramento I2C esteja sendo usado como tal e que não haja conflitos de endereço.
Kevin Vermeer
5

Com apenas 1 pino de E / S, você pode usar um registrador de expansão / deslocamento de 1 fio ou adicionar outro dispositivo ao seu barramento I2C, como já indicado. A única coisa que ainda não foi mencionada é a possibilidade de adicionar outro escravo à sua porta SPI.

O SPI é chamado de protocolo de 4 fios - você tem duas linhas de dados, uma linha de relógio e uma linha de seleção (além de um terreno comum, mas que geralmente não conta). No entanto, os três primeiros são compartilhados entre todos os dispositivos no barramento, portanto, cada dispositivo após o primeiro recebe apenas mais um rastreio / conexão. O SPI também aumenta seu barramento para full duplex, mas isso não importa para este aplicativo.

Kevin Vermeer
fonte
1

Eu apenas encadernaria alguns registros de turno juntos. (Isso reduz a frequência com a qual você pode alternar os LEDs, é claro ..)

Tim
fonte
1

Se você realmente possui apenas 1 pino disponível, o barramento de 1 fio de Dallas parece a coisa mais óbvia. No entanto, como isso é somente saída, existem soluções mais baratas. Um barramento PWM serial que transporta dados e relógio é fácil de configurar; veja, por exemplo, a página de Roman Black, como também mencionado por davidcary. Você só precisa de registradores de turno de entrada serial em paralelo, como o 74VHC164 , que pode ser conectado em cascata para quantas saídas desejar (um '164 tem 8 saídas).
Nesta solução, os LEDs são acionados estaticamente.

Se você tiver outras E / S que possa compartilhar, como o SPI do I2C, poderá optar por soluções mais luxuosas, como o MAX6950 da Maxim . O MAX6950 possui controle de piscar e brilho e limitação de taxa de rotação, para citar alguns recursos. Os LEDs são multiplexados, o que significa que você só precisa de um driver de 16 pinos.

stevenvh
fonte
0

A resposta é provavelmente "uma série de registros de turno", mas você pode ser mais específico em sua pergunta? Qual microcontrolador? O que você quer dizer com "porta digital"? Um único alfinete?

pingswept
fonte
Obrigado, fiz o esclarecimento e os registros de turno são o que estou procurando. Obrigado.
Arquivon
0

25 LEDs, dependendo do tamanho, podem consumir muita energia para um único pino de E / S digital em um microcontrolador. Em vez de direcioná-los diretamente, você provavelmente deve usar um simples interruptor FET (para que o IO esteja vinculado à porta) para controlar a energia da cadeia de LEDs.

Dependendo do seu aplicativo, existem outras maneiras mais robustas de fazer isso. Mas jogar um feto provavelmente fará você trabalhar mais rápido.

Por exemplo, se você deseja bloquear um sinal variável, existem dispositivos mais complicados, às vezes chamados de relés digitais, que permitem alternar digitalmente.

Quanto ao controle individual de 25 LEDs com uma única porta IO. Como outros sugeriram, você pode usar alguns registros de turno. Existem soluções mais complicadas que envolvem a comunicação com outro IC usando um protocolo serial (I2C, por exemplo).

crasic
fonte
0

Roman Black descreve o sistema shift1 que permite controlar independentemente qualquer número de LEDs de um único pino do microcontrolador.

@Fake Name, @Tim, @pingswept sugerem o encadeamento de alguns registros de turno, o pino de saída de dados DO em um alimentando o pino de entrada de dados DI no próximo. O 74HC595 funcionaria bem. (Talvez algum outro chip funcione ligeiramente melhor ).

(@reemrevnivek, com esse tipo de SPI em cadeia, cada dispositivo após o primeiro não requer mais pinos no microcontrolador, ao contrário do que muitas pessoas afirmam - por que você os ouve? :-).

Normalmente, isso requer 4 pinos no microcontrolador - MISO, MOSI, SCLK e trava. Como você está apenas produzindo saída, não precisa de um pino de entrada MISO.

Roman Black descobriu que, com um tempo muito cuidadoso em uma única saída de microcontrolador e com alguns ajustes cuidadosos de um circuito analógico, um único pino de microcontrolador pode acionar um circuito analógico de aparência simples que separa o SCLK comum, o DI pino do primeiro chip da cadeia (MOSI) e o sinal de trava comum.

Então esse microcontrolador pode controlar 25 LEDs de um único pino.

davidcary
fonte
0

Você pode conectar outro microcontrolador através desse único pino e conversar com ele via 1wire (ou seu próprio protocolo, se precisar de alta velocidade). Então esse outro microcontrolador lida com LEDs.

avra
fonte