Driver de LEDs

Este exemplo usa um driver de LEDs para controlar uma quantia quase sem fim de LEDs usando apenas 4 pinos do Arduino. Para isso, emprega-se o chip 4794 da Phillips. Encontre aqui mais informações sobre ele.

Drivers de LED têm um registrador de deslocamento embutido, que toma dados em forma serial e transforma-os em formato paralelo. É possível fazer encadeamentos de chips, e a cada encadeamento aumenta-se em 8 a quantidade de LEDs controláveis.

O código abaixo toma um valor contido na variável dato e o exibe em formato binário. Isto é, se dato valer 1, apenas o primeiro LED acende-se; se valer 255, todos os LEDs acendem-se.

Exemplo de conexão de um 4794

Código

/* Desloque dados
 * --------------
 * 
 * Mostra um byte, contido em "dato", no conjunto de 8 LEDs
 *
 * (copyleft) 2005 K3, Malmo University
 * @author: David Cuartielles, Marcus Hannerstig
 * @hardware: David Cuartielles, Marcos Yarza
 * @project: made for SMEE - Experiential Vehicles
 */

int data = 9;
int strob = 8;
int clock = 10;
int oe = 11;
int count = 0;
int dato = 0;

void setup()
{
  beginSerial(9600);
  pinMode(data, OUTPUT);
  pinMode(clock, OUTPUT);
  pinMode(strob, OUTPUT);
  pinMode(oe, OUTPUT);
}

void PulseClock(void) {
    digitalWrite(clock, LOW);
    delayMicroseconds(20);
    digitalWrite(clock, HIGH);
    delayMicroseconds(50);
    digitalWrite(clock, LOW);
}

void loop()
{
   dato = 5;
   for (count = 0; count < 8; count++) {
    digitalWrite(data, dato & 01);
    //serialWrite((dato & 01) + 48);
    dato>>=1;
    if (count == 7){
       digitalWrite(oe, LOW);
       digitalWrite(strob, HIGH);
    }
    PulseClock();
    digitalWrite(oe, HIGH);
 }
  delayMicroseconds(20);
  digitalWrite(strob, LOW);
  delay(100);

  serialWrite(10);
  serialWrite(13);
 delay(100);                  // waits for a moment
}

Share