terça-feira, 11 de setembro de 2018

Display de Mensagem com MAX7219 Matriz de LEDs 4x8x8 (8x32)




Olá pessoal!!!           
Bora aprender a usar um display de LEDs?
Dá pra montar um montão de coisas legais!        :)



Quer montar um display de mensagens com Matriz de LEDs?

Este post contém algumas informações de como utilizar o display matriz de LEDs 8x8 para os seus projetos com Arduino, PIC e o controlador de display MAX7219.
No final você encontra os vídeos de algumas aplicações interessantes para o display Matriz de LEDs como um display de mensagem rolante, demonstração dos recursos da biblioteca C para MAX7219, o Jogo do Tetris e um Relógio Digital!


O Display Matriz de LEDs 8x8

Como o próprio nome diz este tipo de display é composto por uma matriz de LEDs.
A Figura 1 mostra um display com a matriz 8x8, um dos mais comuns utilizados nos projetos e encontrados no mercado. Na esquerda vemos a parte frontal do display e a direita a parte de trás com os terminais para a ligação à placa de circuito impresso - PCI (PCB).

Figura 1 - Display Matriz de LEDs 8x8: frente e verso.

O diagrama da Figura 2 mostra a interligação interna dos LEDs do display Matriz de LEDs 8x8, modelo 1088AS. Observe que existem 8 colunas, 8 linhas e o display é do tipo "catodo comum" conforme a ligação dos LEDs. O diagrama mostra o pino (pin) correspondente para cada coluna e linha (column/row) do display.

Figura 2 - Diagrama de interligação interno e pinos do Display Matriz de LEDs 8x8.

Como faço para acender os LEDs do display?
 
Bem, para acender 1 LED basta aplicar uma tensão positiva (exemplo 5 Vcc) no pino da coluna correspondente ao LED que se quer acender, com um resistor em série para limitar a corrente do LED, e aterrar o pino da linha do LED que se quer acender. Por exemplo, para o LED11 (primeira coluna e primeira linha) basta aplicar a tensão com o resistor no pino 13 do display e aterrar o pino 9. Exatamente como se faz para acender 1 único LED.

No entanto para acender diversos LEDs do display não podemos aplicar a tensão em todas as colunas e aterrar todas as linhas. O acionamento deve ser feito por etapas, ligando 1 linha por vez. Esse processo é chamado de multiplexação. O chaveamento entre as linhas é feito tão rápido que o olho humano é incapaz de perceber a comutação entre as linhas para uma frequência superior a 20 Hz, devido ao fenômeno da cintilação.

Para o processo de multiplexação das linhas do display podemos utilizar um microcontrolador (uC).

Na Figura 3 é mostrada a forma mais simples de ligar um display matriz de LEDs 8x8, interligando os terminais das 8 linhas e 8 colunas do display diretamente aos terminais do microcontrolador. 
Note que gastamos 16 pinos do microcontrolador para ligar apenas 1 display de matriz 8x8! Portanto se desejamos ligar 2 display utilizaremos 32 pinos de I/O!!
Por este motivo esta configuração é recomendada apenas para circuitos simples.
Você pode utilizar qualquer microcontrolador: PIC, 8051, Arduino, etc... desde que o pino de I/O suporte a corrente dos LEDs.
Ah.. e não se esqueça de ligar os resistores em série para limitar a corrente!


Figura 3 - Diagrama para ligar diretamente o microcontrolador ao Display Matriz de LEDs 8x8.

Para reduzir o número de pinos de I/O do microcontrolador  podemos utilizar o circuito integrado (CI) 74HC164 (CMOS 2 V a 6 V) ou 74HCT164 (TTL 4,5 V a 5,5 V).
O 74HC164 é um 8-bit serial-in/parallel-out shift register. Com ele conseguimos com apenas 3 pinos de I/O do uC, comandar 8 saídas  do shift register e ainda ligar vários 74HC164 em série (cascata) para podermos ligar vários displays de Matriz de LEDs!

A Figura 4 mostra um diagrama para ligar 2 displays Matriz de LEDs 8x8 utilizando o 74HC164 (um para cada display). 

Os terminais para o controle das saídas são:
CP - clock input (LOW-to-HIGH, edge-triggered)
MR - master reset input (active LOW)
DSA/DSB - data input. 
Q0 - Q7: parallel data output

Obs.: o pino  Q7 é utilizado para a ligação em série/cascata de vários 74HC164 para ligar vários displays!

Resumidamente: os dados são enviados para a saída na forma serial, mantendo os dados no pino DSA/DSB e gerandode pulsos no pino CP.
Uma grande desvantagem do 74HC164 é que necessitamos manter as saídas em nível baixo, pelo pino de reset MR, até transmitir todos os dados seriais. Somente após todos os dados serem transferidos é que habilitamos as saídas para mostrar a mensagem no display. Caso contrário iremos ver os LEDs se deslocando no display.
Este período de todos os LEDs desligados até o final da transmissão de todos os dados na forma serial faz com que os LEDs fiquem ligados por pouco tempo, isto representa um brilho menor do display.
Para reduzir a cintilação, ou seja, o olho humano perceber as linhas do display piscando, devido a multiplexação, o seu circuito deve ter um microcontrolador mais rápido (velocidade de processamento maior).
 
O CI ULN2803 foi utilizado como drive de corrente para aterrar as linhas de catodo comum dos displays. Caso o seu uC suporte a corrente drenada pelos LEDs, este CI pode ser retirado. 
Não esqueça dos resistores em série com as 8 colunas de cada display!

Figura 4 - Ligando a Matriz de LEDs com 74HC164.


A Figura 5 mostra uma melhoria para o circuito agora utilizando o CI 74HC595 (ou 74HCT595).
74HC595 é um 8-bit serial-in/serial or parallel-out shift register with output latches 3-state
Parece a mesma função do CI anterior, mas o "latch" das saídas faz toda a diferença neste caso, porque o estado da saída se mantém enquanto enviamos os dados seriais para o registrador interno do 74HC595 e os mesmos são transferidos para a saída com um pulso no pino ST.

Os pinos de controle são: 
SH: shift register clock input
ST: storage register clock input
DS: serial data input
Q0 - Q7: parallel data output
Q7': serial data output
OE: output enable (active LOW)
MR: master reset (active LOW)

Obs.: o pino  Q7' é utilizado para a ligação em série/cascata de vários 74HC795 para ligar vários displays!


Figura 5 - Ligando a Matriz de LEDs com 74HC595.


Você está achando tudo isso muito complicado??

Que tal substituirmos os shift registers, os resistores e o drive de corrente por um único CI?
Sim! Isto é possível! Alguém já teve esta grande ideia ou cansou de tanto circuito externo só pra ligar um display de LEDs... :)


O Controlador de display MAX7219


 Figura 6 - Diagrama de pinos do MAX7219 e circuito com aplicação típica. Fonte: datasheet MAXIM.




  Figura 7 - Diagrama de interligação entre Microcontrolador, MAX7219 e display Matriz de LEDs 8x8.


 Figura 8 - Módulo FC-16 com 4 display 8x8 Matriz de LEDs e 4 MAX7219.



 Figura 9 -Diagrama para interligar 4 módulos MAX7219.



Figura 10 - Módulo FC-16 com 4 display 8x8 Matriz de LEDs e MAX7219: frente.


Figura 11 - Módulo FC-16 com 4 display 8x8 Matriz de LEDs e MAX7219: verso.


Figura 12 - Montagem no Proteus com 4 display 8x8 Matriz de LEDs e MAX7219.



Figura 13 - Montagem no protoboard do módulo FC-16 4x8x8 Matriz de LEDs.



Display de Mensagem com Matriz de LEDs 4x8x8, MAX7219 e Arduino Promini


Quer montar um Display de Mensagem com seu Arduino?


Componentes e recursos:

Arduino Pro Mini
Atmel Microcontroller Atmega328
MAX7219 Library in C ++ Linguage by Marco Colli
Configurable Number of Devices MAX7219
FC-16 display module (4x8x8)
MAX7219 Display Controller
8x8 dot LED Matrix Display
Scrolling Text Speed Variable


Figura 14 -Módulo Arduino Promini.


Figura 15 -Arduino Promini e conversor USB/Serial: frente e verso.



Figura 16 -Arduino Promini montado no protoboard.



Figura 17 - Arduino Promini com o conversor USB/Serial montado no protoboard.


Figura 18 -Arduino Promini, PIC18F4550 e Display matriz de LEDs no protoboard.


Figura 19 - Primeira mensagem com o display Matriz de LEDs 4x8x8 (8x32).



Source Code:
MD_MAX72xx LED Matrix Display Library by Marco Colli.: https://github.com/MajicDesigns/MD_MA...
Example code: MD_MAX72xx_Message

Change the message in MD_MAX72xx_Message.ino
void setup()
strcpy(curMessage, "Hello! ");

Configure number of the MAX7219 devices:
#define MAX_DEVICES            4.

Change config display type in MD_MAX72xx.h for use FC-16 Module:
#define USE_PAROLA_HW       0
#define USE_FC16_HW             1


Video 1 - Arduino MAX7219 Dot LED Matriz 4x8x8 (8x32) FC-16.




Display de Mensagem com Matriz de LEds 4x8x8, MAX7219 e PIC18F4550


Microchip PIC Microcontroller
Microcontroller PIC18F4550
MPLAB IDE and MPLAB C18 Compiler
Configurable Number of Devices MAX7219
FC-16 display module (4x8x8)
MAX7219 Display Controller
8x8 dot LED Matrix
Display Display Brightness Control
Scrolling Text Speed Variable
5x7 Font Table ' ' to '~'
Simulation in Proteus 8



Video 2 - PIC18F MAX7219 Dot LED Matriz 4x8x8 (8x32) FC-16 Module Scrolling Text.



Figura 20 - Mensagem rolante com display Matriz de LEDs 4x8x8 (8x32).


Video 3 -PIC18F MAX7219 C Library Demonstration 4x8x8 LED.

Biblioteca em Linguagem C para MAX7219 com PIC18F4550 e Módulo FC-16 Matriz de LEDs 4x8x8 (8x32).


Recursos da biblioteca:

Microchip PIC Microcontroller
Microcontroller PIC18F4550 with USB Bootloader
MPLAB IDE and MPLAB C18 Compiler
Configurable Number of Devices MAX7219
MAX7219 C Library (not C++)
FC-16 display module (4x8x8)
MAX7219 Display Controller
8x8 dot LED Matrix Display
5x7 fixed characters Font Table ' ' to '~' or
Variable width characters Font Table 0x00 to 0xFF
Strings in program memory
Show drawings in the display 00:05 03:28
Static Text 00:12
Scroling Text (not Circular or Circular) 00:22 00:32 Shift Register Left, Right, Up and Down (not Circular or Circular) 00:52 01:08
Display Brightness Control 01:30
Scrolling Text Speed Variable 02:05
Message 1 02:54
Message 2 03:09

O Jogo do Tetris com display Matriz de LEDs 4x8x8 (8x32)

E agora que você já sabe ligar um display Matriz de LEDs 8x8...que tal montar seu próprio jogo do Tetris???



C Library MAX7219 with PIC18F4550 and FC-16 Module LED Matrix 4x8x8 (8x32).

Resources:
- standard Tetris pieces: O, I, S, Z, L, J and T;
- Tetris board: 20 lines x 8 columns;
- color: monochrome block (red);
- game record storage in internal EEPROM memory;
- Tetris falling iteration delay: 0.5 sec
- 0.15 sec; - standard Tetris score;
- 8 difficulty Levels (LED Bargraph);
- show level, score and record in the LED Matrix Display;.
- randomizes pieces with Timer4 (not used random function of the C Language).



Figura 21 - Jogo do Tetris com display Matriz de LEDs 4x8x8 (8x32).

Hardware:
- PIC18F4550.
- 4 MAX7219 Display Controller.
- 4x8x8 dot LED Matrix Display.

Software:
- MPLAB IDE v8.83.
- MPLAB C18 Compiler.

Firmware:
- MAX7219 Library.


Figura 22 - Imagem do jogo Tetris com display Matriz de LEDs 4x8x8 (8x32).



Video 4 - Jogo do Tetris com display Matriz de LEDs 4x8x8 (8x32).



Alexey Pajitnov created the first electronic version of Tetris in 1985 in Russia.



References:

FAHEY, Colin. Standard Tetris. History of Tetris. Tetris A.I. system. 2003-2012.
Available in: http://colinfahey.com/tetris/tetris.html.


Relógio com display Matriz de LEDs 4x8x8 (8x32) e RTCC DS1302


Um relógio digital com PIC18F e Matriz de LEDs!


Figura 23 - Relógio com display Matriz de LEDs 4x8x8 (8x32) e RTCC DS1302.

Recursos:
- Hora.
- Data.
- Mensagem rolante: Bom Dia/Boa Tarde/Boa Noite.
- Buzzer para Alarme/Despertador.
- 4 Botões para ajuste da data/hora, dia da semana, hora do alarme e brilho do display.
- Display Matriz de LEDs 4x8x8 (8x32).
- Bateria de backup do RTCC (mantém o relógio rodando quando falta energia AC).



Figura 24 - Diagrama no Proteus do Relógio com Matriz de LEDs.

Hardware:
- PIC18F4550.
- 4 MAX7219 Display Controller.
- 4x8x8 dot LED Matrix Display.
- RTCC DS1302.

Software:
- MPLAB IDE v8.83.
- MPLAB C18 Compiler.

Firmware:
- MAX7219 Library.
- DS1302 Library.


Figura 25 - Simulação do Proteus: pulsos digitais do RTCC DS1302.


Figura 26 - Data mostrada pelo relógio de Matriz de LEDs.



Figura 27 - Hora mostrada pelo relógio de Matriz de LEDs.



Video 5 - Relógio com display Matriz de LEDs 4x8x8 (8x32) e RTCC DS1302.





Estes foram os meus projetos.
Agora é a sua vez de criar os seus programas!
Use a sua criatividade!

Até mais pessoal!!!


6 comentários:

  1. ohh goood joob! pls me odria compartir su libreria?
    my email is : jair_libra_16@hotmal.com

    ResponderExcluir
  2. Olá, os links para download das bibliotecas e códigos de exemplos estão disponíveis no próprio texto do post no blog.

    ResponderExcluir
  3. Bom dia
    Onde posso encontrar pograma para arduino uno + matriz de ledes 4×8×8 +ds1302 .agradecia pois ando a meses e nao consigo colocar o relogio a funcionar.

    ResponderExcluir
    Respostas
    1. Olá! A melhor biblioteca com display matriz de LEDs e Arduino que eu encontrei é a "MD_MAX72xx LED Matrix Display Library by Marco Colli". Tem o link pra baixar neste mesmo blog. vem com códigos de exemplo. Você configura quantos displays quer utilizar (os 4).

      Para o relógio encontrei estes 3 artigos na internet:
      Data e hora no Arduino com o RTC DS1302 - Arduino e Cia
      https://www.arduinoecia.com.br/2014/11/arduino-modulo-rtc-ds1302.html

      Como usar com Arduino - Módulo Real Time Clock RTC DS1302 ...
      http://blogmasterwalkershop.com.br/arduino/como-usar-com-arduino-modulo-real-time-clock-rtc-ds1302/

      Data e hora no Arduino com o RTC DS1302 - Arduino e Tecnologia
      www.arduinoetecnologia.com.br/projetos/data-e-hora-no-arduino-com-o-rtc-ds1302/


      Você tem só que juntar o projeto do relógio com o projeto do display.
      Dica: Roda os programas de exemplo separadamente primeiro, para você entender como funciona, depois junta os 2.

      Excluir
  4. Olá colega vc envia o esquema completo do relógio com picos 18f e matriz de led

    ResponderExcluir
  5. Mano cadê os fontes pra gente brincar também???

    ResponderExcluir