26 maio 2018

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

Hoje vamos conhecer um módulo Max7219 diferente, composto por 4 matrizes de led 8x8, 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.

Arduino Uno e Módulo Max7219 4 dígitos

O módulo 4 matrizes de led 8x8 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 8x8 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:

Detalhe Max7219

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: DIN, CS 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.

Circuito Arduino Uno e Módulo Max7219


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:

Instalação biblioteca MD_MAX72XX IDE Arduino

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 \\Documentos\Arduino\Libraries\MD_MAX72XX\src:

Biblioteca MD_MAX72XX Arduino

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


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).

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
// 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.

Nenhum comentário:

Postar um comentário