30 setembro 2016

Contador com módulo display 4 dígitos 74HC595

O módulo display 4 dígitos 74HC595 é um módulo que usa 4 displays de 7 segmentos, onde podemos mostrar números e letras, e que usa apenas 3 pinos para conexão ao microcontrolador.

Contador com módulo display 4 dígitos 74HC595


Neste post vamos usar o módulo 74HC595 para montar um contador com 2 push-buttons, que você pode usar como base para montar seu próprio projeto.


O módulo display 7 segmentos 74HC595


Na imagem abaixo podemos ver o módulo display 4 dígitos com 74HC595, que tem no lado esquerdo 5 pinos de entrada, sendo 3 de controle e 2 de alimentação. No lado oposto, temos os pinos de saída, que permitem que você interligue módulos idênticos:

Módulo display 4 dígitos 74HC595
O controle dos segmentos dos dígitos do display é feito por dois CI´s 74HC595, que são registradores de deslocamento utilizados para expandir as portas do microcontrolador. 

Módulo display 74HC595 - CI


Com o 74HC595, você usa 3 pinos de controle para enviar dados para as 8 portas de saída do CI, com a vantagem de poder utilizar vários desses módulos ao mesmo tempo.

Circuito display 4 dígitos com 74HC595


Para ligar o módulo display 4 dígitos 74HC595 ao Arduino e montar o nosso contador, vamos usar os pinos digitais 5, 6 e 7, que serão ligados no módulo nos pinos DIO, RCLK, e SCLK, respectivamente. 

Para os botões do contador, vamos usar dois push-buttons ligados ao pino 2 (para aumentar o contador), e ao pino 3 (para diminuir).

Circuito Arduino Módulo display 74HC595


Os resistores tem a função de pull-down, e foram usados resistores de 330 ohms.

Programa contador com 74HC595


O programa abaixo utiliza as bibliotecas TM74HC595Display (download) e TimerOne (download). Descompacte a pasta e coloque as bibliotecas na pasta LIBRARIES da IDE do Arduino.

No setup() foram definidos os endereços para os dígitos de 0 a 9 que serão utilizados no programa, e também um pequeno teste com os 4 dígitos, mostrando os números de 1 a 4 no display.

Na seção loop(), são lidos os valores das portas do botões (2 e 3), que quando acionadas aumentam ou diminuem o valor do contador no display.

 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
91
92
93
94
//Programa: Contador com modulo display 7 digitos 74HC595
//Autor: Arduino e Cia

#include <TM74HC595Display.h>
#include <TimerOne.h>

//Pinos de conexao ao modulo
int PINO_SCLK = 7;
int PINO_RCLK = 6;
int PINO_DIO = 5;

//Pinos de conexao push-button
int PINO_UP = 2;
int PINO_DOWN = 3;

int contador = 0;

TM74HC595Display disp(PINO_SCLK, PINO_RCLK, PINO_DIO);
unsigned char LED_0F[10];

void setup()
{
  //Definicao dos digitos de 0 a 9
  LED_0F[0] = 0xC0; //0
  LED_0F[1] = 0xF9; //1
  LED_0F[2] = 0xA4; //2
  LED_0F[3] = 0xB0; //3
  LED_0F[4] = 0x99; //4
  LED_0F[5] = 0x92; //5
  LED_0F[6] = 0x82; //6
  LED_0F[7] = 0xF8; //7
  LED_0F[8] = 0x80; //8
  LED_0F[9] = 0x90; //9

  Timer1.initialize(1500); // set a timer of length 1500
  Timer1.attachInterrupt(timerIsr); // attach the service routine here

  //Testes iniciais
  //Envia o numero 1 para o primeiro digito
  disp.set(LED_0F[1], 3);
  delay(1000);
  //Apaga o display
  disp.clear();

  //Envia o numero 2 para o primeiro digito
  disp.set(LED_0F[2], 2);
  delay(1000);
  disp.clear();

  //Envia o numero 3 para o primeiro digito
  disp.set(LED_0F[3], 1);
  delay(1000);
  disp.clear();

  //Envia o numero 4 para o primeiro digito
  disp.set(LED_0F[4], 0);
  delay(1000);
  disp.clear();
}

void loop()
{
  //Verifica se o botao aumentar contador foi acionado
  int up = digitalRead(PINO_UP);
  if (up == 1)
  {
    contador++;
    while (digitalRead(PINO_UP) == 1) {
      delay(10);
    }
    //disp.clear();
  }

  //Verifica se o botao diminuir contador foi acionado
  int down = digitalRead(PINO_DOWN);
  if (down == 1)
  {
    contador--;
    while (digitalRead(PINO_DOWN) == 1) {
      delay(10);
    }
    //disp.clear();
  }
  disp.clear();

  //Mostra o valor do contador no display
  disp.digit4(contador);
  delay(10);
}

void timerIsr()
{
  disp.timerIsr();
}

Para mostrar o valor da variável contador no display, utilizamos o comando disp.digit4(), que vai ajustando os dígitos de acordo com o valor da variável (ocupando apenas os dígitos necessários no display).

Você também pode utilizar o comando disp.set() para enviar um valor para um dígito específico, ou o comando disp.digit4showZero() para mostrar o 0 nos dígitos à esquerda. 

Você pode ver como utilizar esses comandos carregando o programa de exemplo da própria biblioteca TM74HC595Display, que mostra inclusive como usar letras nesse display. :)

6 comentários:

  1. Era mesmo o que estava faltando testar, obrigado

    ResponderExcluir
  2. Boa tarde,
    Qual o valor máximo de contagem que consegue-se com esse módulo?
    Candido.

    ResponderExcluir
  3. gostaria de um vídeo mostrando o contador em operação com sensor de passagem.Obrigado, mesmo assim foi muito útil as informações já postas .Nilo

    ResponderExcluir
  4. Parabéns pelo post.
    Você teria um exemplo de como usar esse display com o ESP12 e a IDE do Arduino?

    ResponderExcluir
    Respostas
    1. Oi Vilson,

      Obrigado. Ainda não testei nessa configuração. Não sei por exemplo se as bibliotecas funcionariam com o ESP8266. Mas vou tentar fazer isso.

      Abraço!

      Excluir