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 decodificador CD4511 para fazer esse controle junto com o 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):
Essas 7 saídas são conectadas à um display 7 segmentos, que tem a seguinte estrutura:
Assim, basta ligarmos os pinos do chip 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:
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 decodificador 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.
O display utilizado nesse circuito é do tipo catodo comum, com a pinagem abaixo:
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.
//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 CD4511n"); } 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.