Display de leds matriz bicolor 8×8 14

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 : MakerHero

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? Deixe seu comentário logo abaixo.

Faça seu comentário

Acesse sua conta e participe

14 Comentários

  1. Saudações Prof. Adilson!
    Gostaria de uma ideia, por gentileza, de como fazer uma placa (PCB) para ligar várias matrizes desta; obrigado

  2. Belo tutorial!
    Uma sugestão, é fazer deslocamento de texto com vários módulos deste; Aguardo e obrigado

  3. 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?

    1. Já entendi, é uma coluna de cada vez que é acionada.

  4. 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!

  5. 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…

  6. Eu gosto muito sobre matriz bicolar 8×8

  7. Boa noite,

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

    Att.,

    1. Até a presente eu não tenho placa impressa para a soldagem dos Cls e montagem

    2. Tem sim, é a matriz de led RGB. Mesmo formato mas com oito pinos a mais, para controlar os leds azuis.

  8. 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ê

    1. Boa noite Daniel,

      Obrigado por visitar o blog MakerHero. Não conheço nenhum módulo para matriz bicolor, apenas para a matriz “comum”.

      É possível ligar vários desses, mas exige atenção na parte de programação.

      Abraço.

      Adilson – Equipe MakerHero

      1. Obrigado pela resposta.
        Como sugestão, por gentileza, desenvolva um circuito com várias matrizes desta (4 ou 5) para rolagem de texto ou um relógio, por exemplo; obrigado