Como usar o módulo Max7219 com 4 matrizes 8×8

Módulo Matriz de Led 8x32 Max7219

Hoje vamos conhecer um módulo Max7219 diferente, composto por 4 matrizes de led 8×8, ideal para formação de painéis e letreiros, que podem ser usados para propaganda, painel de avisos, relógios, contadores e outras aplicações.

módulo display 4 matrizes de led 8×8 com Max7219 que vamos usar aqui segue a mesma ideia de um outro painel que mostrei anteriormente, no post Painel de Leds com Max7219, mas na ocasião usei apenas 2 módulos, que foram interligados manualmente.

O módulo Max7219 com 4 matrizes

Neste módulo com 4 matrizes de led 8×8 temos também 4 CI´s Max7219, cada um controlando uma matriz. Se retirarmos a matriz do soquete, podemos ver logo embaixo dela o CI controlador:

Repare também na inscrição FC-16 gravada na placa. Ela será útil em breve.

As quatro partes do módulo estão interligadas, ou seja, compartilham os pinos Vcc, GND, DIN/DOUT, CS e CLK. Esses três últimos são os pinos de controle, e permitem o controle total das matrizes, que podem funcionar em conjunto ou individualmente.

As setas na parte de baixo, onde podemos ver a inscrição IN/OUT mostram o sentido dos dados do display (entram pelo DIN, saem pelo DOUT). No lado direito da imagem acima temos os pinos sem conexão, que podem ser usados para soldagem de uma barra de pinos e conectados à outro módulo Max7219 com 4 matrizes, formando painéis maiores.

Conexão do módulo Max7219 no Arduino Uno

A conexão do módulo é feita por 3 pinos de controle: DINCS e CLK, conectados aos pinos digitais 4, 5 e 6 respectivamente. O pino Vcc deve ser ligado à uma fonte de alimentação 5V (vamos utilizar o pino 5V do Arduino Uno), assim como o pino GND.

Essa parte de conexão não tem segredos, então vamos partir para a instalação da biblioteca e programação.

Instalação e configuração da biblioteca MD_MAX72XX

Nos programas a seguir, vamos usar a biblioteca MD_MAX72XX, baixando-a pela própria IDE do Arduino. Vá até o menu Sketch -> Instalar Biblioteca -> Gerenciar Bibliotecas e procure por MD_MAX72XX, clicando em seguida em Instalar:

Depois da instalação, temos que fazer uma pequena alteração nesta biblioteca para que ela funcione com o módulo que estamos utilizando, o tal FC-16 que vimos no início deste post.

Procure pelo arquivo MD_MAX72XX.h, que foi instalado (provavelmente) no caminho DocumentosArduinoLibrariesMD_MAX72XXsrc:

Com o editor de textos da sua preferência, abra esse arquivo e encontre a linha com o seguinte código:

#define USE_FC16_HW 0

Substitua o valor 0 por 1, salve o arquivo e a biblioteca estará pronta para ser utilizada. 

Vamos agora testar o funcionamento do módulo Max7219 com Arduino realizando um teste com o bom e velho scroll.

Programa Scroll com módulo Max7219 4 matrizes

O programa abaixo realiza um scroll horizontal no display, ou seja, temos uma mensagem (configurável na linha 83 do programa) que se moverá do lado direito para o lado esquerdo do display.

Na linha 8 configuramos o número de matrizes de led que estamos usando (no caso, 4), e nas linhas de número 11, 12 e 13 indicamos os pinos de conexão que serão usados pelo Arduino para controlar o módulo: pinos digitais 4 (conectado ao DIN), 5 (conectado ao CS) e 6 (conectado ao CLK).

// Programa: Scroll com modulo Max7219 4 digitos
// Autor: Arduino e Cia

// Carrega a biblioteca MD_MAX72xx
#include <MD_MAX72xx.h>

// Numero de modulos utilizados
#define     MAX_DEVICES     4

// Ligacoes ao Arduino
#define     DATA_PIN     4
#define     CS_PIN       5
#define     CLK_PIN      6

MD_MAX72XX mx = MD_MAX72XX(DATA_PIN, CLK_PIN, CS_PIN, MAX_DEVICES);

// Velocidade do scroll
#define SCROLL_DELAY     120
// Colunas entre cada caracter
#define     CHAR_SPACING     1

#define     BUF_SIZE     75
char curMessage[BUF_SIZE];
char newMessage[BUF_SIZE];

uint8_t scrollDataSource(uint8_t dev, MD_MAX72XX::transformType_t t)
{
  static char          *p = curMessage;
  static uint8_t     state = 0;
  static uint8_t     curLen, showLen;
  static uint8_t     cBuf[8];
  uint8_t colData;

  switch (state)
  {
    case 0:
      showLen = mx.getChar(*p++, sizeof(cBuf) / sizeof(cBuf[0]), cBuf);
      curLen = 0;
      state++;
      if (*p == '\0')
      {
        p = curMessage;
      }
    case 1:
      colData = cBuf[curLen++];
      if (curLen == showLen)
      {
        showLen = CHAR_SPACING;
        curLen = 0;
        state = 2;
      }
      break;
    case 2:
      colData = 0;
      curLen++;
      if (curLen == showLen)
        state = 0;
      break;
    default:
      state = 0;
  }
  return (colData);
}

void scrollText(void)
{
  static uint32_t     prevTime = 0;
  if (millis() - prevTime >= SCROLL_DELAY)
  {
    mx.transform(MD_MAX72XX::TSL);

    prevTime = millis();
  }
}

void setup()
{
  mx.begin();
  mx.setShiftDataInCallback(scrollDataSource);
  // Define o nivel de luminosidade
  mx.control(MD_MAX72XX::INTENSITY, 4);
  // Mensagem a ser exibida
  strcpy(curMessage, " Arduino e Cia ");
  newMessage[0] = '\0';
}

void loop()
{
  scrollText();
}

Experimente usar também este módulo Max7219 com placas como Raspberry Pi e módulos ESP8266.

4/5 - (2 votos)

Related posts

Como usar a comunicação RS485 com Arduino

by Arduino e Cia
5 anos ago

Como utilizar um encoder rotativo com Arduino

by Arduino e Cia
9 anos ago

Novo livro na praça: Nas linhas do Arduino!

by Arduino e Cia
5 anos ago
Sair da versão mobile