Social Icons

Controlando Display de 7 Segmentos com CD4511 e Arduino

Controlando Display de 7 Segmentos com CD4511 e Arduino

Depois de alguns dias  sem postar estou de volta com um projeto "cool". Hoje faremos um contador utilizando um display de 7 segmentos.
 
O display de 7 segmentos é normalmente utilizado para indicar números e podem ser vistos normalmente em elevadores, alguns rádio relógios.
Aqui está um exemplo de um display de elevador.



Material necessário:
Para este experimento precisaremos de alguns materiais:

- 1 Placa Arduino e seu respectivo cabo
- 1 Fonte de alimentação de 5V
- 1 Protoboard
- 7 resistores de 150Ω ($0,02 cada)
- 1 CI CD4511- Decodificador BCD - 7 Segmentos ($1,50)
- 1 Display de 7 Segmentos Catodo Comum ($0,50 cada)
- Alguns fios para conectar os componentes

O que faremos?

Criaremos um código para a placa Arduino, este enviará para um decodificador BCD-7-Segmetnos 4 bits, esses serão decodificados e então serão convertidos em 7 bits então usados para controlar um display de 7 segmentos.
Para saber mais sobre códigos BCD visite o link para a Wikipedia.

Como ligar os acessórios?

Neste post testaremos uma nova forma de mostrar como os acessórios foram ligados, apresentarei o circuito na forma de um desenho feito com com o software Fritzing que pode ser baixado gratuitamente do seu site. Veja na imagem a seguir como ficou o circuito ou clique aqui para ver em tamanho real.



Montagem:

Image do CI CD4511BE.


Conexão do CI, resistores e display de 7 segmentos. Ficou uma aranha. :)


Placa Arduino, responsável por enviar 4 bits em formato BCD.


Visão geral do projeto, protoboard, fonte, Arduino e componentes.


Programação:

A programação para este projeto é bem simples, defino 4 variáveis e atribuo a elas o endereço das portas de IO do Arduino. Em seguida na função Setup faço mais algumas configurações e então defino a função number que recebe um número como parâmetro. Baseado neste número as portas de saída são configuradas para enviar um valor BDC adequado.
Dentro da função loop crio 2 laços para fazer a contagem de forma crescente e depois decrescente. Bem simples, veja abaixo o código.

/*
7 Segments
This project uses the CD4511 BCD to 7segments Latch Decoder Driver
to count the numbers from 0 - 9 and after 1 second from 9 - 0.
*/
// Atribui a cada variável um endereço.
int pinA = 6, pinD = 7, pinC = 8, pinB = 9;
void setup()
{
// Configura a velocidade da porta serial
Serial.begin(9600);
// Diz ao controlador que os pinos são de saída
pinMode(pinA, OUTPUT);
pinMode(pinB, OUTPUT);
pinMode(pinC, OUTPUT);
pinMode(pinD, OUTPUT);
}
// Recebe um inteiro como parâmetro
// Baseado no número configura os pinos de saída conforme da tabela BCD
// do CI CD4511
void number(int num)
{
switch (num) {
case 0:
digitalWrite(pinA, LOW);
digitalWrite(pinB, LOW);
digitalWrite(pinC, LOW);
digitalWrite(pinD, LOW);
break;
case 1:
digitalWrite(pinA, HIGH);
digitalWrite(pinB, LOW);
digitalWrite(pinC, LOW);
digitalWrite(pinD, LOW);
break;
case 2:
digitalWrite(pinA, LOW);
digitalWrite(pinB, HIGH);
digitalWrite(pinC, LOW);
digitalWrite(pinD, LOW);
break;
case 3:
digitalWrite(pinA, HIGH);
digitalWrite(pinB, HIGH);
digitalWrite(pinC, LOW);
digitalWrite(pinD, LOW);
break;
case 4:
digitalWrite(pinA, LOW);
digitalWrite(pinB, LOW);
digitalWrite(pinC, HIGH);
digitalWrite(pinD, LOW);
break;
case 5:
digitalWrite(pinA, HIGH);
digitalWrite(pinB, LOW);
digitalWrite(pinC, HIGH);
digitalWrite(pinD, LOW);
break;
case 6:
digitalWrite(pinA, LOW);
digitalWrite(pinB, HIGH);
digitalWrite(pinC, HIGH);
digitalWrite(pinD, LOW);
break;
case 7:
digitalWrite(pinA, HIGH);
digitalWrite(pinB, HIGH);
digitalWrite(pinC, HIGH);
digitalWrite(pinD, LOW);
break;
case 8:
digitalWrite(pinA, LOW);
digitalWrite(pinB, LOW);
digitalWrite(pinC, LOW);
digitalWrite(pinD, HIGH);
break;
case 9:
digitalWrite(pinA, HIGH);
digitalWrite(pinB, LOW);
digitalWrite(pinC, LOW);
digitalWrite(pinD, HIGH);
break;
default:
digitalWrite(pinA, HIGH);
digitalWrite(pinB, HIGH);
digitalWrite(pinC, HIGH);
digitalWrite(pinD, HIGH);
}
}
void loop()
{
// Faz um loop de 0 a 9
for (int i = 0; i < 10; i++) {
// Imprime o valor desejado
number(i);
// Aguarda meio segundo
delay(500);
}
// Apaga o número, perceba que quando chamo a função number
// com um valor <0 ou >9 a função simplesmente apaga todos
// os leds do contador. Por isso, se chamo a função com o
// valor 10 simplesmente o display se apagará.
number(10);
// Aguarda 1 segundo
delay(1000);
// Faz um loop de 9 a 0
for (int i = 10; i >= 0; i--) {
// Imprime o valor desejado
number(i);
// Aguarda meio segundo
delay(500);
}
}

Nenhum comentário:

Postar um comentário