Otimizando pinagem do Arduino - 3 pinos p/ 30 LEDs

Boa noite gente!

Tenho visto bastante gente comentando a respeito de "aumentar" o número de pinos de uma Arduino. Pois bem, vi no EfeitoNerd um projeto para controlar 30 LEDs com 3 pinos do Arduino, usando 4 CIs 595 (74HC595N, para a versão mais comum).

O link do projeto, com esquemas e código: http://www.efeitonerd.com.br/2012/02/ampliar-saidas-do-arduino.html

Apesar de no projeto, o Felipe Couto usar resistores de 220R, usei os de 330 por serem os únicos disponíveis no estoque =D. 

Foto do que eu montei:

Um vídeo:

https://www.youtube.com/watch?v=cK_iL91cfZk

Um CI queimou... Só acendem 24 LEDs!

Não estou querendo levar crédito por um projeto alheio, apenas compartilhando uma ideia boa que é de interesse de pessoas do fórum.

Valeu

Exibições: 6207

Responder esta

Respostas a este tópico

Euclides, esse CI pode oscilar até 100 MHz. O Arduino, a 16MHz. A percepção do olho humano não vai além de uma oscilação de 15, 20Hz.

Esse "quebra-galho" foi usado pela primeira vez no século retrasado pelos irmãos Lumière para inventar o cinema. É usado nas TVs de antanho (de tubo, lembra delas?), monitores etc etc e põe etc nisso.

Boa noite!

Fiz uma biblioteca para, agora sim, controlar cada saída de forma individual. Exatamente como usamos o digitalWrite(), com a biblioteca, controlamos cada saída dos registradores usando o shiftWrite(pin, HIGH/LOW)

Agora sim, dá pra controlar muitas e muitas saídas!

Espero que seja útil!

Link do post: http://www.efeitonerd.com.br/2012/09/ampliar-saidas-do-arduino-libr...

Abraços!

Sergio,

Da forma que fiz, se vc colocar 10 registradores, terá 80 saídas a mais no Arduino.

Para controlar as saídas dos registradores, é só usar a função shiftWrite(), da mesma forma que usa-se a digitalWrite() no Arduino.

Exemplo:

Acionar os LEDs 22 e 50.

shiftWrite(22, HIGH);

shiftWrite(50, HIGH);

Apagar-los:

shiftWrite(22, LOW);

shiftWrite(50, LOW);

É só incluir a biblioteca, e ligar os registradores em 3 saídas do arduino, e agora tem o mesmo controle de portas do arduino nas portas dos registradores.

Fácil assim mesmo! :)

Como eu precisava de muitas e muitas portas de saídas, fiz a biblioteca pensando em poder trabalhar como se eu tivesse usando um arduino mega. Fiz vários testes e até agora, ta funcionando que é uma beleza! hehehe

Abraços!!

Tempos atrás, publiquei no meu blog uma série de posts sobre o uso de 595 para multiplexar portas do Arduino: http://automatobr.blogspot.com.br/2012/07/controlando-infinitos-led...

Num projeto, cheguei a usar 10 595 para controlar 24 LEDs RGB. Dá prá até simular PWM, ou seja, controlar a intensidade do brilho de cada LED. 

Esse CI é barato, fácil de achar e confiável.

Abracadabraço!

Mauro

Ajudo, com uma condição: desde que vc pare de me chamar de senhor... ;)

Isso,vá registrando e faça um blog. Eu tenho blog desde 2006, atualmente tenho dois. 

Quando voltar, passa pra gente os preços dos LEDs, Transistores, e 74x595...e o que mais achar por lá...obrigado.

Vai uma lib pra deixar a coisa mais fácil que programar em Arduino:

http://nootropicdesign.com/ez-expander/

Exemplos:

1) Do site:

#include <EZExpander.h> 
// Create an EZExpander object
EZExpander expander = EZExpander();

void setup() { }

void loop() {
for(int i=20;i<=35;i++) {
expander.digitalWrite(i, HIGH);
}
delay(1000);
for(int i=20;i<=35;i++) {
expander.digitalWrite(i, LOW);
} delay(1000);
}

1) Atualização das saídas a partir de um vetor:

void OutRefresh(){

  for(int i=0;i<=64;i++) {
    int id = 19+i;
    if (PinStatus[i] == 1) {     
      expander.digitalWrite(id, HIGH); // Liga a Porta
    }
    if (PinStatus[i] == 0) {     
      expander.digitalWrite(id, LOW); // Liga a Porta
    }
  }
}

Bom, já que o assunto é o 595, alguém tem alguma solução para não usar um pino do arduino mas fazer o clear das saídas?
Pois com os 3 pinos, na horá que liga o circuito, as vezes os registradores não estão sempre zerados, queria alguma forma sem ter que usar mais um pino para o clear...

Não sei se entendi direito, mas não serve mandar zerar os registradores antes de começarw

É na hora de "energizar" mesmo o circuito, pois ou usa-se o "clear" ou o "ENABLE", pois seria algo do tipo,
Inicia em "LOW" e depois fica em HIGH enquanto estiver operando.
O meu problema é que eu pretendo acionar alguns relês, que estão ligados a aparelhos, controlados pelas saídas do 595, então, não pode "acionar" indevidamente, na hora de energizar...

Saquei. Nesse caso acho que só com o uso do Enable mesmo.

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço