22 julho 2013

Controlando display 7 segmentos com o Max7219

Continuando o assunto display 7 segmentos, abordado no meu post anterior, hoje vou controlar o display 7 segmentos usando o CI MAX7219, fabricado pela Maxim.

Arduino - CI Max7219 - Display 7 segmentos


O Max7219 é um CI driver display, isto é, um controlador feito especialmente para trabalhar com displays, tanto os de 7 segmentos, como as matrizes de led. Ele trabalha com displays de catodo comum e a comunicação com o Arduino utiliza apenas 3 portas da placa (veja que no exemplo do post anterior, eu usei 8 portas).

Além disso, com um único chip MAX7219 é possível controlar até 8 displays de 7 segmentos utilizando as mesmas 3 portas do Arduino. Outra vantagem é o uso de apenas um resistor para todos os segmentos, entre os pinos 19 e 18, conforme mostra o datasheet do CI :


A montagem do circuito requer atenção para não danificar o CI. Repare que o "chanfro" fica do lado esquerdo, logo o pino 1 fica à esquerda, abaixo do CI. Observe a pinagem do Max7219 :


Ligamos os pinos SEG A, SEG B,etc. , aos pinos do display, segmentos A, B, C, etc. Como neste exemplo temos apenas 1 display, vamos ligar o comum - pino 8 - ao pino DIG 0 do CI. Siga a tabela abaixo :




Para o programa exemplo, vamos utilizar a biblioteca LedControl, que você pode encontrar aqui, ou nesse link :

http://www.wayoda.org/arduino/downloads/LedControl.zip

Instalada a biblioteca, carregue o seguinte programa no Arduino :

 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
// Programa : Contador display 7 segmentos usando CI Max7219
// Alteracoes / comentarios  : Arduino e Cia
// Baseado no programa exemplo da biblioteca LedControl

#include "LedControl.h" //Carrega a biblioteca LedControl

// Pino 4 do Arduino ao pino 1 (DIN) do CI
// Pino 5 do Arduino ao pino 13 (CLK) do CI
// Pino 6 do Arduino ao pino 12 (LOAD) do CI
// Ultimo parametro se refere a qtde de MAX7219 no circuito

LedControl lc=LedControl(4,5,6,1); 

boolean pontodecimal;  //Armazena o estado do ponto decimal (Lig/Desl)

void setup() 
{ 
  // Inicializa o Max7219
  lc.shutdown(0,false); // Habilita o display 
  // Define o nivel de luminosidade (0 minimo, 15  maximo)
  lc.setIntensity(0,10); 
  lc.clearDisplay(0); // Apaga o display
  Serial.begin(9600); // Inicializa a serial
  pontodecimal = true;  //Define o ponto decimal como LIGADO
} 

void loop() 
{ 
  for(int i=0; i < 10 ; i++)  //Loop variando valor de i de 0 a 9
  { 
    lc.setDigit(0,0,i,pontodecimal);  //Mostra o valor de i no display 
    Serial.println(i);
    pontodecimal = !pontodecimal; //Inverte o estado do ponto decimal
    delay(1000);  //Aguarda 1 segundo e mostra o próximo valor
  } 
delay(1000);  //Aguarda 1 segundo e reinicia a contagem
}

Este programa configura as portas a serem utilizadas com os pinos DIN, CLK e LOAD do CI, inicializa o display e mostra os valores de 0 a 9 por meio de um loop. Como costumo fazer, mostro também o valor no monitor serial, para fins de acompanhamento e análise caso ocorra algum problema na ligação do circuito.

No próximo artigo, vamos utilizar este circuito como base, e mostrar como utilizar esse CI para controlar 2 (ou mais) displays.

Atualizado : Controlando 2 displays de 7 segmentos com o Max7219

Até a próxima !



4 comentários:

  1. Boa tarde, leio e releio, mas até agora não consegui fazer com que um loop não intefira noutra porta, ou seja, coloco (programo) a porta 13 para piscar e a porta 8 para gerar um tom em determinado momento, mas quando entra o tom, o led para de piscar....desculpe mas não sou programador, por isso a dúvida.

    ResponderExcluir
  2. Boa tarde Ronaldo !

    Provavelmente o seu programa precise de algum ajuste. Se preferir, use o formulário de contato e eu vejo no que posso te ajudar. Abraço e obrigado pela visita !

    ResponderExcluir
  3. Olá, tudo bom?
    Primeiramente parabéns pelo post.
    Estou com um problema e gostaria de sua ajuda.
    Tenho um Display 7 segmentos Anodo Comum (CMI 2302300), tentei reproduzir seu tutorial com ele, porém não obtive sucesso. Acredito que o tutorial tenha sido feito com um Catodo Comum, correto? Você pode me ajudar?

    Desde já agradeço.

    ResponderExcluir
    Respostas
    1. Boa tarde Vinicius,

      Estou sem display de catodo comum para fazer testes, mas assim que arrumar um vou criar um post sobre ele.

      Abraço.

      Excluir