Você precisa especificar se deseja controlar um ou vários leds. Além disso, eu acrescentaria "evitando o controle serial e ICs adicionais". A resposta tende a ser infinita se a taxa de atualização ou as peças de hardware não forem restrições.
ppvi
Respostas:
26
Acredito que o uso de linhas N charmosas controla os LEDs N * (N-1). Há um bom artigo na Wikipedia.
Um amigo meu, Jimmie P. Rodgers, colocou 126 LEDs em um Arduino Shield. Ele usa charlie-plexing para controlar os LEDs. Algumas informações em seu quadro estão em -
jimmieprodgers.com/2009/12/my-development-process/ (archive.org copy)
Na última reunião do Grupo de Usuários do Arduino de Boston, Jimmie P. Rodgers desenhou um diagrama plexo de Charlie como uma matriz com redes rotuladas. Esquemas desenhados dessa maneira pareciam fazer um bom trabalho de comunicação do conceito. Criei alguns esquemas semelhantes - Consulte http://wiblocks.luciani.org/FAQ/faq-charlie-plex.html
Você precisará se preocupar com suas restrições de poder. Na verdade, eu nunca usei um Arduino, mas estou assumindo que ele tem um limite de corrente, assim como os PICs. Além disso, os registros de turnos também terão um limite de corrente. Se você se deparar com isso, precisará usar algo como um MOSFET para permitir que você controle os LEDs sem precisar extrair muita energia diretamente do seu micro controlador.
É permitido que qualquer pino do microcontrolador AVR possa fornecer até 40 mA, e a fonte de alimentação total originada ou afundada pelo chip (ou seja, no solo e nos pinos Vcc) precisa estar abaixo de 200 mA.
O Charlieplexing é uma ótima solução para situações em que você precisa de muitos LEDs, mas pode sobreviver com apenas um LED aceso por vez. Uma placa Arduino padrão (como uma Duemilanove) fornece 17 pinos de E / S "gratuitos", sem contar TX, RX, Reset ou pino 13. Portanto, você pode conectar 17 * 16 = 272 LEDs. Isso pode funcionar bem, especialmente se você estiver mantendo um LED aceso ou digitalizando rapidamente entre apenas alguns. Mas se você estiver tentando iluminar toda a matriz com um padrão, verá que cada uma delas está ligada (um pouco menos que) 1/272 do tempo, portanto, se a corrente de sua unidade fosse de 30 mA em um dado momento, cada LED a corrente média seria de cerca de 0,1 mA - bastante fraca.
Se você não precisa de muitos LEDs, mas precisa de mais brilho, a multiplexação tradicional pode ser uma opção melhor. Nesse caso, você usa algumas de suas linhas como linhas e outras como colunas em uma matriz. Se você usar uma corrente de LED de 10 mA, poderá definir uma matriz de 4 colunas e 13 linhas, onde todos os 4 LEDs em uma linha podem estar acesos por vez, e você varrerá as linhas. Em seguida, cada linha fica em 1/13 do tempo na corrente de 10 mA, de modo que a corrente média do LED pode chegar a 0,76 mA, mas você obtém apenas 4 * 13 = 104 LEDs. (Definitivamente mais brilhante por LED do que com charlieplexing.)
O limite no último exemplo é de 40 mA por pino no AVR, uma vez que cada pino de acionamento gera 4x10 = 40 mA. Se você permitir que transistores externos (que podem ser baratos e pequenos) sejam adicionados às saídas de linha, poderá evitar esse limite específico e ficar mais claro. Por exemplo, você pode criar uma matriz 8x9, com 8 linhas e 9 colunas, 72 LEDs no total. Uma das 8 linhas está ligada por vez, selecionada através do transistor. Até todos os 9 LEDs em uma determinada linha podem estar acesos por vez, acionados a 20 mA, de modo que 180 mA vem do transistor e você permanece abaixo dos limites de corrente do AVR. A corrente média por LED agora é de 20 mA / 8 = 2,5 mA - geralmente razoavelmente brilhante.
Há um tutorial detalhado e muito bom aqui, que inclui uma seção sobre o uso de um Arduino para executar um cubo de LED 8x8x8. (Não perca o filme do YouTube que eles exibem)
Parece algo que vi na exibição de OVNIs em Minneapolis por volta de 1979 ou por aí, mas me lembro disso como algo em torno de 4096 lâmpadas em miniatura. Alguém mais se lembra de ter visto algo assim?
supercat
4
Existem muitos expansores de E / S por aí que usam barramentos SPI ou I2C. Com um único módulo MSSP, você pode controlar quase uma quantidade infinita de saídas digitais, como LEDs.
Consulte as folhas de dados do Microchip ou as notas de aplicação para as seguintes partes:
SPI - MCP23S08
I2C - MCP23008
Com 17 pinos de E / S, dezessete transistores NPN (seguidores de emissor para aumentar a corrente) não deve haver nenhum problema em particular mostrando 272 LEDs em combinações arbitrárias no ciclo de trabalho 1/17, com corrente média ou 0,7mA (200mA / 272), limitada por a capacidade do chip de diminuir 200mA por vez. A adição de um diodo para obter uma queda de 0,7 volts permitirá a adição de outros 17 LEDs (reduzindo o ciclo de trabalho para 1/18), embora o brilho não corresponda exatamente aos outros.
Você pode esclarecer sobre que tipo de circuito está sugerindo aqui? O seguidor de emissor é uma topologia de BJT.
Kevin Vermeer
@reemrevnivek: Veja a edição acima. Eu estava mentalmente mexendo em algumas variações, e elas ficaram confusas. Se alguém estiver adicionando transistores para aumentar a unidade do lado superior, mas não a unidade do lado inferior, eles precisam ser BJTs. Se alguém estivesse usando transistores para ambos, os mosfets poderiam ser melhores.
Supercat
0
Enquanto Windell Oskay argumenta que 104 LEDs é o máximo sem adicionar mais transistores,
Tom Igoe
postou fotos de uma matriz de 128 LEDs controlados diretamente por um único Arduino Mega - sem transistores extras, discretos ou integrados.
Tom Igoe está "trapaceando" ao exceder brevemente a "corrente máxima absoluta por pino" listada na folha de dados?
Não, ele está trapaceando usando um mega de arduino. :) O mega possui muito mais pinos IO do que um arduino normal.
Christopher Biggs
@unixbigot - triste, eu tinha a esperança de ver um truque legal envolvendo a reutilização do pino de reset por LED condução ou utilização queda de diodo ..
Kevin Vermeer
1
Seu link está inoperante e você provavelmente deve estar vinculado à resposta de Windell Oskay . Pode não parecer importante quando você publica, mas, à medida que mais respostas aparecem, sua publicação fica distante da outra.
Kevin Vermeer
@KevinVermeer: link corrigido apontando para a cópia archive.org da página original.
Respostas:
Acredito que o uso de linhas N charmosas controla os LEDs N * (N-1). Há um bom artigo na Wikipedia.
Um amigo meu, Jimmie P. Rodgers, colocou 126 LEDs em um Arduino Shield. Ele usa charlie-plexing para controlar os LEDs. Algumas informações em seu quadro estão em - jimmieprodgers.com/2009/12/my-development-process/ (archive.org copy)
Na última reunião do Grupo de Usuários do Arduino de Boston, Jimmie P. Rodgers desenhou um diagrama plexo de Charlie como uma matriz com redes rotuladas. Esquemas desenhados dessa maneira pareciam fazer um bom trabalho de comunicação do conceito. Criei alguns esquemas semelhantes - Consulte http://wiblocks.luciani.org/FAQ/faq-charlie-plex.html
fonte
jimmieprodgers.com
link nesta resposta está carregado com vírus.Você pode usar Shift Registers ( http://en.wikipedia.org/wiki/Shift_register ) para obter quantas saídas paralelas de um único fluxo serial você desejar.
Você precisará se preocupar com suas restrições de poder. Na verdade, eu nunca usei um Arduino, mas estou assumindo que ele tem um limite de corrente, assim como os PICs. Além disso, os registros de turnos também terão um limite de corrente. Se você se deparar com isso, precisará usar algo como um MOSFET para permitir que você controle os LEDs sem precisar extrair muita energia diretamente do seu micro controlador.
fonte
É permitido que qualquer pino do microcontrolador AVR possa fornecer até 40 mA, e a fonte de alimentação total originada ou afundada pelo chip (ou seja, no solo e nos pinos Vcc) precisa estar abaixo de 200 mA.
O Charlieplexing é uma ótima solução para situações em que você precisa de muitos LEDs, mas pode sobreviver com apenas um LED aceso por vez. Uma placa Arduino padrão (como uma Duemilanove) fornece 17 pinos de E / S "gratuitos", sem contar TX, RX, Reset ou pino 13. Portanto, você pode conectar 17 * 16 = 272 LEDs. Isso pode funcionar bem, especialmente se você estiver mantendo um LED aceso ou digitalizando rapidamente entre apenas alguns. Mas se você estiver tentando iluminar toda a matriz com um padrão, verá que cada uma delas está ligada (um pouco menos que) 1/272 do tempo, portanto, se a corrente de sua unidade fosse de 30 mA em um dado momento, cada LED a corrente média seria de cerca de 0,1 mA - bastante fraca.
Se você não precisa de muitos LEDs, mas precisa de mais brilho, a multiplexação tradicional pode ser uma opção melhor. Nesse caso, você usa algumas de suas linhas como linhas e outras como colunas em uma matriz. Se você usar uma corrente de LED de 10 mA, poderá definir uma matriz de 4 colunas e 13 linhas, onde todos os 4 LEDs em uma linha podem estar acesos por vez, e você varrerá as linhas. Em seguida, cada linha fica em 1/13 do tempo na corrente de 10 mA, de modo que a corrente média do LED pode chegar a 0,76 mA, mas você obtém apenas 4 * 13 = 104 LEDs. (Definitivamente mais brilhante por LED do que com charlieplexing.)
O limite no último exemplo é de 40 mA por pino no AVR, uma vez que cada pino de acionamento gera 4x10 = 40 mA. Se você permitir que transistores externos (que podem ser baratos e pequenos) sejam adicionados às saídas de linha, poderá evitar esse limite específico e ficar mais claro. Por exemplo, você pode criar uma matriz 8x9, com 8 linhas e 9 colunas, 72 LEDs no total. Uma das 8 linhas está ligada por vez, selecionada através do transistor. Até todos os 9 LEDs em uma determinada linha podem estar acesos por vez, acionados a 20 mA, de modo que 180 mA vem do transistor e você permanece abaixo dos limites de corrente do AVR. A corrente média por LED agora é de 20 mA / 8 = 2,5 mA - geralmente razoavelmente brilhante.
fonte
Há um tutorial detalhado e muito bom aqui, que inclui uma seção sobre o uso de um Arduino para executar um cubo de LED 8x8x8. (Não perca o filme do YouTube que eles exibem)
fonte
Existem muitos expansores de E / S por aí que usam barramentos SPI ou I2C. Com um único módulo MSSP, você pode controlar quase uma quantidade infinita de saídas digitais, como LEDs.
Consulte as folhas de dados do Microchip ou as notas de aplicação para as seguintes partes:
SPI - MCP23S08
I2C - MCP23008
fonte
Com 17 pinos de E / S, dezessete transistores NPN (seguidores de emissor para aumentar a corrente) não deve haver nenhum problema em particular mostrando 272 LEDs em combinações arbitrárias no ciclo de trabalho 1/17, com corrente média ou 0,7mA (200mA / 272), limitada por a capacidade do chip de diminuir 200mA por vez. A adição de um diodo para obter uma queda de 0,7 volts permitirá a adição de outros 17 LEDs (reduzindo o ciclo de trabalho para 1/18), embora o brilho não corresponda exatamente aos outros.
fonte
Enquanto Windell Oskay argumenta que 104 LEDs é o máximo sem adicionar mais transistores, Tom Igoe postou fotos de uma matriz de 128 LEDs controlados diretamente por um único Arduino Mega - sem transistores extras, discretos ou integrados.
Tom Igoe está "trapaceando" ao exceder brevemente a "corrente máxima absoluta por pino" listada na folha de dados?
fonte