Display de leds matriz bicolor 8×8

Display de leds matriz bicolor 8×8

Existem vários tipos de displays LCD, muito úteis quando queremos mostrar alguma mensagem ou acompanhar um estado de um sensor conectado ao Arduino. Esses displays, entretanto, até pelo tamanho geralmente reduzido, não são suficientes quando precisamos montar algum sistema de alarme ou apresentar uma informação que seja facilmente vista de longe.

Para esses casos, o mais indicado é o display LED matricial 8×8 bicolor , um display de anodo comum, tamanho 3cm x 3cm, composto por 64 leds bicolores. Com ele, você pode desenvolver painéis gráficos, indicativos de alarme, letreiros e outras aplicações utilizando efeitos visuais variados.

matriz bicolor 8x8

Para controle deste tipo de display, vamos utilizar o CI 74HC595, um registrador de deslocamento de 8 bits, que recebe os dados de forma serial (1 bit de cada vez), e consegue enviá-los de forma serial ou paralela (8 bits de cada vez). Olhando a figura abaixo, retirada do datasheet, vemos que o display tem 24 pinos, sendo 8 para as linhas, 8 para os leds verdes e 8 para os leds vermelhos :

Datasheet - Pinagem Matriz bicolor

Desta forma, para controlar este display, vamos utilizar 3 CI´s 74HC595 : um para as 8 linhas, um para os 8 leds verdes e um para os 8 leds vermelhos. Além disso, vamos utilizar também o CI driver de corrente, o UDN2981. O uso deste CI evita que o 74HC595 seja danificado em razão do excesso de corrente exigida para o funcionamento do display quando há  a necessidade de ligar vários leds ao mesmo tempo.

A ligação do circuito exige bastante atenção, pela quantidade de fios envolvida e também porque qualquer inversão de fios pode danificar os componentes ou causar mal funcionamento do circuito.

O CI 74HC595 que vai controlar os leds verdes, deve ser ligado aos pinos 24, 21, 18, 15, 1, 4, 7 e 10 do display.O CI controlador dos leds vermelhos será ligado aos pinos 23, 20, 17, 14, 2, 5, 8 e 11 do display.

Já o CI que vai controlar as linhas será ligado ao UDN2981 de forma inversa, ou seja, o Q7 do 74HC595 será ligado ao pino 1 do UDN2981, que por sua vez será ligado ao pino 22 do display (linha 1), o Q6 do 74HC595 será ligado ao pino 2 do UDN2981, que será ligado ao pino 19 do display (linha 2), e assim por diante. O valor dos resistores que utilizamos para ligação aos
catodos é de 220 ohms, mas outros valores podem ser utilizados, observando o fato que isso pode gerar alteração na luminosidade do display :

Circuito Matriz de leds 8x8 bicolor com 74HC595

Preste atenção também à disposição dos CI´s no circuito. Os 74HC595 estão com o pino 1 do lado esquerdo, já o UDN2981 está invertido, com o pino 1 no lado direito. Observe abaixo a pinagem dos dois CI´s :

Pinagem 74HC595 e UDN2981

Por fim, utilizamos o programa abaixo, que gera uma animação no display com os leds vermelhos e verdes “percorrendo” a tela na vertical :

//Programa : Teste Matriz de leds bicolor 8x8
//
//Baseado no programa original de Derek Molloy : derekmolloy.ie
//Alteracao e adaptacao : FILIPEFLOP

const int NUM_ROWS = 8;
const int NUM_COLS = 8;

const int dataPin = 8;
const int clockPin = 9;
const int latchPin = 10;

int gdataset[13][8] = {{1,1,1,1,1,1,1,1}, {2,2,2,2,2,2,2,2}, 
                      {0,0,0,0,0,0,0,0,}, {0,0,0,0,0,0,0,0,},
                      {0,0,0,0,0,0,0,0,}, {0,0,0,0,0,0,0,0,}, 
                      {0,0,0,0,0,0,0,0,}, {0,0,0,0,0,0,0,0,},
                      {0,0,0,0,0,0,0,0,}, {0,0,0,0,0,0,0,0,}, 
                      {0,0,0,0,0,0,0,0,}, {0,0,0,0,0,0,0,0,}, 
                      {0,0,0,0,0,0,0,0,}};

int rdataset[13][8] = {{1,1,1,1,1,1,1,1}, {2,1,2,1,2,1,2,1}, 
                      {0,0,0,0,0,0,0,0,}, {0,0,0,0,0,0,0,0,},
                      {0,0,0,0,0,0,0,0,}, {0,0,0,0,0,0,0,0,}, 
                      {0,0,0,0,0,0,0,0,}, {0,0,0,0,0,0,0,0,},
                      {0,0,0,0,0,0,0,0,}, {0,0,0,0,0,0,0,0,},
                      {0,0,0,0,0,0,0,0,}, {0,0,0,0,0,0,0,0,}, 
                      {0,0,0,0,0,0,0,0,}};

void setup()
{
  pinMode(clockPin, OUTPUT);
  pinMode(dataPin, OUTPUT);
  pinMode(latchPin, OUTPUT);
}

void loop()
{
  int i=0;
  while (true)
  {
    displayPixels(i,20);
    i++;
    if (i==11) (i=0);
  }
}

void displayPixels(int val, int delay)
{
  for (int i=0; i<delay ; i++)
  {
    for (int row=0; row<NUM_ROWS; row++)
    {
      int rcur = rdataset[val][row];
      int gcur = gdataset[val][row];
      shiftOut(dataPin, clockPin, MSBFIRST, 255-rcur);
      shiftOut(dataPin, clockPin, MSBFIRST, 255-gcur);
      shiftOut(dataPin, clockPin, MSBFIRST, B00000001 <<row);
      digitalWrite(latchPin, HIGH);
      digitalWrite(latchPin, LOW);
      delayMicroseconds(100);
      shiftOut(dataPin, clockPin, MSBFIRST, 255);
      shiftOut(dataPin, clockPin, MSBFIRST, 255);
      shiftOut(dataPin, clockPin, MSBFIRST, B00000001 <<row);
      digitalWrite(latchPin, HIGH);
      digitalWrite(latchPin, LOW);
    }
  }
}

Gostou ? Conte-nos sua experiência com este post e visite nossa loja FILIPEFLOP !

4
Display de leds matriz bicolor 8×8
2 votos, 4.50 classificação média (90% pontuação)

Formado em Ciência da Computação pela Universidade de Mogi das Cruzes, atualmente responsável pelo departamento técnico da FILIPEFLOP.

Compartilhe este Post

11 Comentários

  1. Luciano Rosset - 26 de dezembro de 2015

    Gostei bastante do post mas tenho uma dúvida um pouco mais técnica sobre o funcionamento do display.
    Como faço para ligar “na mão” o display da maneira que eu desejar?
    Exemplo: digamos que, em uma certa coluna, quero ligar o LED vermelho da linha 1 e o verde da linha dois. Ambos os pinos do verde e do vermelho estarão “ligados” (níveis lógicos do verde e do vermelho na coluna em LOW e o pino das duas linhas em HIGH). Isso fará com que os LEDs fiquem amarelos, não?

  2. Janislley - 12 de outubro de 2015

    Bom dia,

    Comprei duas matrizes de led, mas não tenho o UDN2981 e tá difícil de comprar. Existe outra alternativa ao uso do UDN2981? Como o ULN2003 ou ULN2803?

    Abraço!

  3. João Danilo - 2 de abril de 2015

    Boa tarde, comprei com você a matriz led 8×8 RGB, minha dificuldade ta sendo achar o datasheet dela, pois não está mais disponível no site que você recomenda, então gostaria de saber se vai mudar muita coisa se eu fizer de acordo com esse bicolor ? usar os meus CI’s, os anodos e catodos, como vou saber quaisa são os vermelhos, verdes e azuis…

  4. Manuel Amaral - 15 de outubro de 2014

    Eu gosto muito sobre matriz bicolar 8×8

  5. Tiago Baroni - 21 de agosto de 2014

    Boa noite,

    Existe alguma matriz de LED tricolor? Vocês tem alguma placa impressa para a soldagem dos CIs e montagem?

    Att.,

  6. Daniel Fernandes - 2 de maio de 2014

    Muito interessante esse projeto e o seu blog é muito eficaz, parabéns!
    Gostaria de saber se existe algum módulo pronto para esse display (bicolor) e, tb como ligar vários destes,
    obrigado

    Obs.: comprei 4 desses com você

Deixe uma resposta