Estou usando um Atmel ATtiny13 que possui uma E / S de 6 pinos. Gostaria de controlar cerca de 15 LEDs, mas não tenho certeza de como conectar tudo. Sem multiplexação de qualquer tipo, parece que eu seria capaz de controlar apenas 6 LEDs por vez. Estou limitado a apenas 6 LEDs devido ao tamanho do microcontrolador?
microcontroller
led
multiplexer
JYelton
fonte
fonte
Respostas:
Existem vários métodos que podem ser usados para direcionar um grande número de LEDs de alguns pinos de E / S.
O mais simples é a multiplexação padrão de exibição de linha / coluna. Com esta técnica, você pode conduzir LEDs com n pinos de E / S. Matematicamente, o ciclo de trabalho é:( n / 2 )2 n
Isso significa que essa técnica tem um ciclo de trabalho de 100% quando todos os LEDs estão acesos (ou todas as linhas ou colunas são idênticas) e um ciclo de trabalho de quando uma linha diagonal precisa ser acesa (ou todas as linhas são diferentes ) Você tem apenas 100% de ciclo de funcionamento garantido ao acender todos os LEDs ou um LED (ou zero LEDs, mas isso não conta muito).1 / n
Um pouco mais complexo é o Charlieplexing . Com esta técnica, você pode acionar LEDs com n pinos de E / S. Somente n - 1 LEDs podem acender simultaneamente com esta técnica. Matematicamente, o ciclo de trabalho é:n2- n n n - 1
onde um conjunto simultâneo é um grupo único de LEDs que possui um ânodo ou cátodo comum. (Isso não foi provado, é exatamente o que eu cheguei depois de refletir sobre o problema por um minuto. Se o ciclo de trabalho é importante para você, você vai querer aprofundar isso.) Esse é um cálculo muito mais complexo, tanto intelectualmente e computacionalmente que o cálculo equivalente para multiplexação padrão. Efetivamente, você obtém um ciclo de trabalho de quando todos os LEDs estão acesos, mas alguns (apenas alguns) padrões de n-1 ou menos LEDs podem ter um ciclo de trabalho de 100%. Você tem apenas 100% de ciclo de funcionamento garantido ao acender 1 LED.1 / n
O último método que mencionarei é usar um registrador de deslocamento ou expansor de E / S. Com dois pinos (interface de dados / relógio brutos, I2C ou SPI unidirecional), você pode controlar um número arbitrariamente grande de LEDs. O ciclo de serviço para qualquer padrão é 100%, mas a taxa de atualização é inversamente proporcional ao número de LEDs. Este é o método mais caro. Para 15 LEDs, provavelmente será mais barato apenas atualizar para um micro com tantos pinos de E / S.
fonte
Exemplo:
Seis LEDs em 3 pinos:
fonte
Sem multiplexação (unidade direta), você está limitado a 6 LEDs.
Com o charlieplexing, você pode direcionar n * (n-1) LEDs de n pinos.
Com expansores de E / S ou registradores de deslocamento, você pode acionar um número praticamente ilimitado de LEDs.
Exemplo: MCP23008 Expansor de E / S I2C de 8 bits
fonte
Como @ mjh2007 sugeriu com um expansor I2C. Mas existem outros especificamente para acionar LEDs que evitarão a necessidade de resistores externos de limitação de corrente.
fonte
Aqui está um exemplo de charlieplexing que eu criei.
É um simulador de feixe de farol e usa uma série de 12 LEDs conectados em charlieplex a 4 GPIOs para varrer um feixe de luz ao redor de um disco. Há um vídeo dele aqui .
O projeto é baseado em PIC, eu uso um PIC12f683 que também é um uP de 8 pinos e pode ser considerado comparável aos AVRs de 8 pinos.
A intensidade do LED é acionada por uma interrupção que fornece um PWM de 32 etapas em torno de 60Hz. Apenas dois LEDs podem acender a qualquer momento, dando uma taxa de 50% para cada LED, pois era tudo o que eu precisava. Ele também oferece uma boa compensação da taxa de atualização do PWM em relação à resolução.
A codificação para o uso do charlieplexing é realmente bastante simples se você seguir o método "clássico" de acender apenas um único LED em qualquer ponto no tempo e com uma taxa de atualização muito rápida. Elaboro primeiro o PORT e o TRIS (registros específicos da foto) necessários no papel e, em seguida, armazeno os resultados em uma matriz estática. Para acender o LED x, o PIC precisa apenas procurar o valor no índice da matriz [x] e gravá-lo diretamente no PORT (com um pouco de máscara para preservar o estado dos outros pinos não utilizados no charliplex)
Meu projeto tem apenas 12 LED e não 15 ou o máximo de 20 a 5 GPIO permitirá, pois eu queria manter um GPIO de reposição para desenvolvimento futuro.
Enfim ... Eu apenas pensei que seria útil ter um exemplo de trabalho semelhante ao seu pedido.
O código-fonte completo e os esquemas estão disponíveis no meu blog.
fonte
Outra opção seria usar os LEDs Neopixel. Eles têm um IC de controle embutido e você só precisa de um pino para controlar quantos LEDs desejar. É claro que você precisará de uma fonte de energia LED separada adequada.
fonte