21 agosto 2016

CD4511 com Arduino e display 7 segmentos

Aqui no blog você já viu como controlar um display 7 segmentos com o Max7219 e também como ligar um display 7 segmentos diretamente nas portas do Arduino. Neste post vamos usar o CI decodifficador CD4511 para fazer esse controle junto com o Arduino.

CD4511 com Arduino


O CD4511 usa somente 4 portas do Arduino, tornando o circuito mais simples (principalmente na conexão com o microcontrolador) e deixando as outras portas livres para uso de outros componentes como sensores, atuadores, módulos, etc.

O CI decodificador CD4511

O circuito integrado CD4511 (datasheet) é um decodificador BCD (Binary-Coded Decimal) para 7 segmentos, que possui 4 pinos de entrada (em vermelho, na imagem abaixo), e 7 pinos de saída (em azul):

Pinagem CD4511

Essas 7 saídas são conectadas à um display 7 segmentos, que tem a seguinte estrutura:
Display 7 segmentos
Assim, basta ligarmos os pinos do CD4511 aos pinos correspondentes do display, e enviarmos um valor em binário para as portas de entrada. Conforme o valor da entrada, o display exibirá o valor correspondente em decimal, seguindo a tabela abaixo:

Tabela CD4511 BCD - 7 segmentos

Logo, para formar o número 3 por exemplo, vamos seguir a tabela e enviar para o CD4511 o binário 0011, que vai acender os segmentos A, B, C, D e G do display.

Circuito CD4511 com Arduino


Abaixo temos o esquema de ligação do CD4511 no Arduino, com os pinos digitais 4, 5, 6 e 7 conectados às entradas A0, A1, A2 e A3, respectivamente. Os pinos Lamp Test e Blanking vão ligados no Vcc, e o pino Latch vai ligado no GND. A alimentação do CD4511 é de 5V.

Circuito CD4511 e Arduino
O display utilizado nesse circuito é do tipo catodo comum, com a pinagem abaixo:
Display 7 segmentos catodo comum
Você pode até usar um display 7 segmentos anodo comum, mas para isso você terá que colocar transistores nos pinos de saída do CD4511. Consulte o datasheet do CI para ver o esquema de ligação.

Programa CD4511 e display 7 segmentos


O programa abaixo é um contador que mostra no display 7 segmentos os dígitos de 0 a 9.

Observe que usamos simplesmente o estado (HIGH ou LOW) dos pinos 4, 5, 6 e 7 para enviar os dados em binário para o CD4511.

  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
 95
 96
 97
 98
 99
100
//Programa: CD4511 e Arduino
//Autor: Arduino e Cia

//Definicao dos pinos de entrada
#define PinoA0 4
#define PinoA1 5
#define PinoA2 6
#define PinoA3 7

void setup()
{
  Serial.begin(9600);
  //Define os pinos como saida
  pinMode(PinoA0, OUTPUT);
  pinMode(PinoA1, OUTPUT);
  pinMode(PinoA2, OUTPUT);
  pinMode(PinoA3, OUTPUT);
  //Mensagem inicial serial Monitor
  Serial.println("Teste de CD4511\n");
}

void loop()
{
  Serial.print("Numero: 0 ");
  digitalWrite(PinoA0, LOW);
  digitalWrite(PinoA1, LOW);
  digitalWrite(PinoA2, LOW);
  digitalWrite(PinoA3, LOW);
  delay(1000);

  Serial.print("1 ");
  digitalWrite(PinoA0, HIGH);
  digitalWrite(PinoA1, LOW);
  digitalWrite(PinoA2, LOW);
  digitalWrite(PinoA3, LOW);
  delay(1000);

  Serial.print("2 ");
  digitalWrite(PinoA0, LOW);
  digitalWrite(PinoA1, HIGH);
  digitalWrite(PinoA2, LOW);
  digitalWrite(PinoA3, LOW);
  delay(1000);

  Serial.print("3 ");
  digitalWrite(PinoA0, HIGH);
  digitalWrite(PinoA1, HIGH);
  digitalWrite(PinoA2, LOW);
  digitalWrite(PinoA3, LOW);
  delay(1000);

  Serial.print("4 ");
  digitalWrite(PinoA0, LOW);
  digitalWrite(PinoA1, LOW);
  digitalWrite(PinoA2, HIGH);
  digitalWrite(PinoA3, LOW);
  delay(1000);

  Serial.print("5 ");
  digitalWrite(PinoA0, HIGH);
  digitalWrite(PinoA1, LOW);
  digitalWrite(PinoA2, HIGH);
  digitalWrite(PinoA3, LOW);
  delay(1000);

  Serial.print("6 ");
  digitalWrite(PinoA0, LOW);
  digitalWrite(PinoA1, HIGH);
  digitalWrite(PinoA2, HIGH);
  digitalWrite(PinoA3, LOW);
  delay(1000);

  Serial.print("7 ");
  digitalWrite(PinoA0, HIGH);
  digitalWrite(PinoA1, HIGH);
  digitalWrite(PinoA2, HIGH);
  digitalWrite(PinoA3, LOW);
  delay(1000);

  Serial.print("8 ");
  digitalWrite(PinoA0, LOW);
  digitalWrite(PinoA1, LOW);
  digitalWrite(PinoA2, LOW);
  digitalWrite(PinoA3, HIGH);
  delay(1000);

  Serial.println("9 ");
  digitalWrite(PinoA0, HIGH);
  digitalWrite(PinoA1, LOW);
  digitalWrite(PinoA2, LOW);
  digitalWrite(PinoA3, HIGH);
  delay(1000);

  Serial.println("Limpa o display...");
  digitalWrite(PinoA0, HIGH);
  digitalWrite(PinoA1, HIGH);
  digitalWrite(PinoA2, HIGH);
  digitalWrite(PinoA3, HIGH);
  delay(1000);
}

O loop mostra os dígitos de 0 a 9 no display, e também envia essa informação para o serial monitor, para fins de acompanhamento.

3 comentários:

  1. Hello! Is CD4511 able to control 2 7segment displays as Max7219 can do it? If yes, you could to make a tutoral about it. Thanks.

    ResponderExcluir
    Respostas
    1. Hi!

      You can use two CD4511 to do this job... Each CD4511 can control only one 7 segment display.

      Regards!

      Excluir