Como controlar três LEDs com dois pinos de uC usando apenas componentes passivos?


8

Eu só tenho 2 pinos (3 estados) disponíveis em um microcontrolador e preciso controlar 3 LEDs vermelhos, o uC está funcionando com 5V. Só posso usar componentes passivos além disso.


Defina "controle". Você precisa de todos os LEDs totalmente iluminados ao mesmo tempo, ou apenas um de cada vez, ou qualquer outra coisa? Por que você diz que só pode usar componentes passivos?
Joe Hass

Google "charlieplexing".
você

1
@ JohnU: Charlieplexing não faz nada útil com menos de três pinos. Dois pinos fornecem apenas dois LEDs.
Dave Tweed

Obviamente, um expansor de porta I2C ou até mesmo alguns registros de deslocamento simples permitiriam controlar um número arbitrário de LEDs. Por que estes são descartados?
Dave Tweed

1
@DaveTweed - O ato de pesquisando, é bastante provável que seja no entanto informativo;)
John L

Respostas:


10

Para controlar quatro LEDs:

esquemático

simular este circuito - esquemático criado usando o CircuitLab

Para acender os dois LEDs de um pino específico, alterne o pino a algumas centenas de Hz.

Observe que essa configuração requer que a voltagem direta dos LEDs seja menor que Vcc / 2.

Observe também que os resistores consomem energia o tempo todo, não apenas quando os LEDs estão acesos.


Ter R1 conectado apenas a D1 e R2 somente a D2, etc. reduzirá bastante o consumo de corrente quiescente quando o LED estiver apagado, desde que a queda de tensão do LED seja combinada com o VDD.
supercat

@ supercat: Sim, mas isso raramente acontece com os LEDs vermelhos especificados pelo OP. Veja o diagrama de Will .
Dave Tweed

Adicione um LED extra entre os nós R1-D1 e D2-D2 e oculte-o em algum lugar.
supercat

@ supercat: Veja a resposta de Spehro .
Dave Tweed

6

Esta solução depende do fato de que 5V não acenderá os três LEDs em série. Se necessário, você pode adicionar um diodo de silício em série com um ou mais dos LEDs para aumentar a queda de tensão direta total.

esquemático

simular este circuito - esquemático criado usando o CircuitLab

  • Se o pino A e o pino B estiverem tristados, todos os LEDs estão apagados.
  • Se o pino A estiver baixo, D1 estará ativado.
  • Se o pino A estiver alto e o pino B baixo, D2 estará ativado.
  • se o pino B estiver alto, D3 estará ativado.

Para ter mais de um LED aceso por vez, é necessário multiplexar: ligue-os um de cada vez, com rapidez suficiente para que pareçam acender continuamente.


Existe alguma vantagem disso sobre o método de Michael Karas?
Will

Este funciona com queda de tensão direta mais baixa nos LEDs. Sua solução são apenas duas cópias da versão de um pino / dois LEDs.
Dave Tweed

Ahh, com isso, se você tiver 2 resistores, você está reduzindo alguma tensão através de 1 e alguns no outro, e tendo que queimar menos nos resistores?
Will

1
@ Will: Hum, não. Com esse esquema, apenas um LED está aceso por vez e apenas um resistor por vez está reduzindo a tensão. Quando os dois pinos são tristados, nenhuma corrente flui, pois ela é bloqueada pela queda direta acumulada dos três LEDs em série.
Dave Tweed

Se você torcer o pino b, poderá conduzir 2 LEDs com o seu esquema, certo?
Will

3

Com dois pinos, você pode realmente controlar quatro LEDs. Para controlar dois LEDs, coloque um resistor no pino do MCU para limitar a corrente e amarre-o a dois LEDs - o cátodo de um LED e o ânodo do outro LED. A extremidade do ânodo livre do primeiro LED é conectada ao VCC da placa MCU através de outro resistor. A extremidade do cátodo livre do segundo LED é conectada ao GND (através de outro resistor). Agora os LEDs acenderão alternadamente quando o pino do MCU estiver alto ou baixo. Conecte o segundo pino do MCU da mesma maneira e agora você tem controle sobre um total de quatro LEDs.

Para dar a aparência de controle independente de cada LED no par de um dos pinos da porta, é necessário um pequeno trabalho de software, conforme a seguir.

Se o LED1 for o ânodo para o pino da porta e o LED2 for o catodo para o pino da porta, faça o seguinte para estabelecer os quatro estados para dois LEDs.

LED2  LED1    Action
OFF   OFF     Set the port pin to tristate level.
OFF   ON      Set the port pin low.
ON    OFF     Set the port pin high.
ON    ON      Toggle the port pin high and low at a frequency over about 120 Hz. 

Repita as mesmas ações para o outro pino da porta e você parecerá ter quatro LEDs independentes desligados nos dois pinos da porta.

Esse esquema funciona bem para LEDs com queda de tensão direta acima da metade do nível do VCC. Os LEDs vermelhos com 2.1 VF não funcionarão tão bem se o VCC for 5V, por exemplo. Por outro lado, um LED verde com um VF de 2,5V funcionará muito bem em um sistema com um VCC de 3,3V.


3
Esse controle total é esse? Como você os ativa ou desativa?
stanri

Um LED está aceso quando a corrente está saindo do pino, o outro LED está aceso quando a corrente está saindo do pino. Portanto, desligue os dois, apenas tri-state o pino da porta, nenhuma corrente entrará ou sairá, portanto, nenhum LED. A corrente não pode entrar e sair ao mesmo tempo, portanto você não pode ter os dois LEDs acesos exatamente no mesmo momento. Mas você pode criar o efeito de ambos estar no por condução a alta pin em seguida, baixa, então alta, então baixa, então alta, em seguida, baixa etc
Will

2

2 leds de um pino, mal desenhado

Assim, nenhuma corrente flui quando estão desligadas, e você pode acionar a quantidade de voltagem direta necessária


É o mesmo que a solução de Michael Karas. Exige que o V_f dos LEDs seja maior que Vcc / 2, caso contrário você não poderá desligá-los completamente.
Dave Tweed

+1 por se esforçar para apresentar a solução de Michael Karas, copiando os esquemas do CircuitLabs de Dave Tweed e desenhando linhas à mão livre com o MS Paint (ou algo semelhante).
Ricardo

E foi na pintura :)
Will

1
Ah, entendo o que você está falando agora, Dave. Corrente vai r1 d1 d2 r2 e nada tem que entrar / o nosso do pino
Will

2

O EDN publicou algumas idéias relacionadas ao design aqui

Aqui está um deles: -

insira a descrição da imagem aqui

Para valores típicos com D1, um LED amarelo (2,2V ativado), D2, um LED vermelho (1,9V ativado) e tensões de 1,2V e 1,1V, respectivamente, e correntes de 8mA cada, Vcc = 5,0V, o ideal valores são

R1 = 300 ohms R2 = 330 ohms R3 = 1,2K ohms

A corrente quieta é 2.7mA. Para que os dois LEDs pareçam estar acesos, alterne o pino de saída a 100Hz ou superior.

Eu usei o solucionador de Excel no artigo original, o código ainda pode estar disponível no EDN.

O grau adicional de liberdade proporcionado pelo resistor R3 pode evitar as limitações dos circuitos de Dave Tweed e Michael Karas, embora no caso específico de 2 LEDs vermelhos operando a partir de uma fonte de 5V, o circuito de Dave Tweed seja provavelmente aceitável, mas verifique o Vf com cuidado, não é bom para alguns LEDs vermelhos e pode ser marginal para outros se o pino da porta não puxar para baixo ou para cima.


Nota: O OP está solicitando um circuito totalmente passivo . Além disso, se o pino do MCU for alto-Z, o inversor será forçado a entrar no modo de operação linear, que geralmente desperdiçará energia.
Dave Tweed

@DaveTweed Sim, minha postagem original especificou um inversor ST, então editei para deixar isso claro. É não tudo passivo, mas é simples e de zero Iq. O segundo circuito é Iq mais alto, mas totalmente passivo. Obrigado pelos comentários.
Spehro Pefhany

Não vejo como uma entrada do Schmitt Trigger ajuda; em vez disso, eu pensaria que isso forçaria o circuito a oscilar. Concedido, os LEDs estarão apagados, mas o próprio inversor consumirá energia significativa.
Dave Tweed

Bem, como ele não atende ao requisito original de nenhuma parte ativa, eu o excluo, mas acredito que funcione bem.
Spehro Pefhany

+1 para R3, pode ser um truque útil. E um barato por isso
será
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.