Multiplexação de Display de 7 segmentos com Arduino

 

 

A multiplexação de displays de 7 segmentos com Arduino é uma tarefa relativamente simples e de grande utilidade. Neste artigo vamos realizar esta tarefa utilizando uma placa Arduino Uno e um display de LEDs, tipo catodo comum, de 4 dígitos.

 

 Displays de 7 segmentos: quem são, onde vivem, do que se alimentam?

 

Os displays de 7 segmentos são assim chamados porquê cada dígito é formado por  segmentos, que podem ser ligados de forma independente. Assim, é possível construir os caracteres numéricos e alguns alfabéticos. Há displays de diferentes cores e tamanhos, sendo o vermelho e o verde os mais comuns. A Figura 1 mostra o aspecto de um display de 7 segmentos.

 


Figura 1: Aspecto dos displays de 7 segmentos.

 

Para controlar o display, é necessário saber a conexão dos pinos com os segmentos. Logo, para cada segmento há um pino específico, que liga o respectivo LED. 

Os displays maiores possuem mais de um LED por segmento, ligados em série e/ou paralelo. Neste post vamos tratar de displays pequenos,  com apenas um LED para cada segmento.

Displays de 7 segmentos possuem dois tipos de conexão dos LEDs: anodo (positivo) comum e catodo (negativo) comum. Devemos observar este detalhe para acionar os displays corretamente com o Arduino. Esta explicação pode ser melhor entendida visualizando a Figura 2, na qual é mostrado um dígito do tipo Anodo (positivo) Comum.

 

Figura 2: Display de 7 segmentos tipo Anodo comum.

 

Na Figura 3, podemos ver o detalhe de um display que contém 4 dígitos. O fabricante já produz o módulo com os segmentos de cada dígito conectados internamente, reduzindo o número de pinos. Por exemplo, os segmentos ‘A’ de dos 4 dígitos estão ligados e são acessados através do pino 17 do módulo. Os segmentos ‘B’ dos 4 dígitos estão também conectados internamente e são acessíveis através do pino 19, e assim por diante. Este display não pode ser utilizado sem o uso da multiplexação.

 

Figura 3: Em (a) display catodo comum e em (b) display de anodo comum.

 

O aspecto físico pode ser visualizado na Figura 4.

 

Figura 4: Aspecto físico do display de 4 dígitos.

 

Para o acionamento do display de 7 segmentos com o Arduino, o pino comum dos LEDs é conectado ao 0V (GND), caso este seja catodo comum. Se o display de 7 segmentos for do tipo Anodo comum, o pino comum deve ser conectado ao 5V (VCC). 

Note que os segmentos são identificados por letras de “a” a “g” e o ponto decimal como “dp”. Para formar um dígito é necessário ligar os segmentos correspondentes.

 


Figura 5: Segmentos acionados para formar os dígitos.

 

Veja as sequências listadas a seguir para a formação dos números e caracteres mais comuns:

  • 0 (Zero) – a, b, c, d, e, f
  • 1 (Um) – b, c
  • 2 (dois) – a, b, d, e, g
  • 3 (três) – a, b, c, d, g
  • 4 (quatro) – b, c, f, g
  • 5 (cinco) – a, c, d, f, g
  • 6 (seis) – a, c, d, e, f, g
  • 7 (sete) – a, b, c
  • 8 (oito) – a, b, c, d, e, f, g (todos)
  • 9 (nove) – a, b, c, f, g
  • A (maiúsculo) – a, b, c, e, f, g
  • B (minúsculo) – c, d, e, f, g
  • C (maiúsculo) – a, d, e, f
  • D (minúsculo) – b, c, d, e, g
  • E (maiúsculo) – a, d, e, f, g
  • F (maiúsculo) – a, e, f, g

 

 Multiplexação dos dígitos com Arduino

 

Em muitas aplicações, são necessários displays com mais de um dígito. Se cada display possui 8 pinos de controle (7 segmentos + ponto), controlar 4 displays, por exemplo, requereriam 32 pinos. Esta característica pode inviabilizar a utilização do display com o Arduino.

Então, o que fazer? Bem, o olho humano é incapaz de perceber variações rápidas da intensidade luminosa. Explicando melhor, se o display for ligado e desligado a uma taxa de 20 vezes por segundo ou mais rápido, não conseguiremos percebe que o display foi desligado. Utilizando este truque, podemos acionar vários dígitos do display com os mesmos pinos (segmentos “a” a “g”), apenas trocando o pino comum de cada dígito.

Na Figura 6, você pode ver esse funcionamento em uma velocidade baixa.

 


Figura 6: Sequencia de ligação dos displays.

 

Como você pode ver, o numero 1234 foi mostrado no display, um digito por vez, utilizando apenas 11 pinos, ao invés dos 32 que seriam usados em um funcionamento sem utilizar multiplexação. Este procedimento é repetido indefinidamente. O tempo deve ser curto o suficiente para que o a comutação dos dígitos não seja percebida.

 

Expansor de saídas 74HC595 no Arduino

Neste post utilizaremos um display de 7 segmentos do tipo catodo comum para a multiplexação com o Arduino Uno. Portanto, os LEDs são acionados aplicando-se uma uma tensão positiva no anodo de cada segmento. Obviamente, é necessário que se realize a limitação da corrente elétrica que circula por cada um dos LEDs.

O circuito foi projetado utilizando um 74HC595 para acionar os segmentos do display e 4 transistores como drivers de corrente para os pinos comuns de cada dígito. O 74HC595 é um conversor serial-paralelo, com função latch, que armazena os estados das saídas. Isto é, os dados são enviados a ele de forma serial (bit após bit) e ele fará a conversão para paralelo, colocando o estado de cada bit nas saidas Q0 a Q7. Assim, você economizará ainda mais pinos do Arduino.

 

Figura 7: Pinos do 74HC595.

 

O significado de cada pino é:

Vcc: pino de alimentação. Usaremos 5V
GND: é o comum ou 0V
Q0 a Q7: saídas do conversor serial/paralelo
DS: pino de entrada de dados serial
OE: habilita ou desabilita os pinos Q0 a Q7 (desabilitados significa que eles ficam em alta impedância)
ST: é o pino de latch, isso é, transfere os dados do registrador interno, para o registrador de saída (pinos de saída Q0 a Q7)
SH: pino de clock. Como a comunicação é síncrona, cada bit de dado, precisa de um pulso de clock para ser armazenado
MR: é o pino de reset do integrado
Q7′: é o pino de saida de dados. Caso seja necessário ligar mais de um 595 em série, esse é o pino que será ligado a entrada DS do próximo 595

Você pode ver mapa de estados do 74HC595, na figura 7. Nesta figura, mostro como colocar as saídas Q0, Q1, Q6 e Q7 em nivel alto e Q2, Q3, Q4 e Q5 em nível baixo.

 


Figura 7: Mapa de estados do 74HC595

 

Caso você ainda tenha ficado com duvidas, no código de exemplo, explicarei melhor o funcionamento. Não se preocupe.

 


Montando seu projeto de display quadruplo com Arduino

Chegou o momento da montagem prática. Para este circuito você vai precisar dos seguintes itens:

  • 1 x Arduino Uno
  • 1 x Display quadruplo de 7 segmentos Anodo comum
  • Fios Jumper’s
  • 1 x Protoboard
  • 1 x Potenciômetro 5kOhm
  • 1 x Integrado 74HC595 DIP
  • 4 x transistores BC558
  • 4 x resistores de 3300 ohms, 1/4W
  • 8 x resistores para o display. Veja o calculo abaixo

O circuito pode ser alterado, facilmente, para funcionar com 2 ou 3 display. Também pode ser usado vários outros CIs como o 4511,

O circuito  projetado é mostrado na Figura 8.


Figura 8: Esquema elétrico do circuito.

 

Calculado os resistores para o display

Como calcular os resistores de limitação de corrente (R26 a R35) dos LEDs? Bem… Neste arranjo devemos considerar mais dois parâmetros: Frequência de multiplexação e número de displays, o que nos dá uma razão entre o período em que o display está ligado e o período em que ele está desligado. No nosso exemplo, essa razão é de 1/4 (porque são 4 displays) ou 25% (duty cycle). A frequência de multiplexação deverá ser adotada com valor acima de 24 Hz, por exemplo 50 Hz (50Hz * 4 = 200Hz no total, para um ciclo completo), para que os nossos olhos não percebam a cintilação. Outro ponto a considerar, é que a corrente média no display diminui conforme diminui o duty cycle, causando uma diminuição no brilho percebido do display. Assim, para aumentar o brilho, devemos recalcular os resistores de limitação de corrente.

 

Figura 9: Ciclo de multiplexação

 

A corrente nominal desse display é 10mA por segmento. Como o display fica ligado 25% do tempo total, multiplicamos a corrente por 4 (teremos 40mA por segmento), para o display ter o mesmo brilho médio.  Porém a corrente máxima fornecida pelo 74HC595 é de 35mA. Então, pra não trabalhar no limite, consideraremos uma corrente de 30mA. Logo, os resistores deverão assumir o seguinte valor:

R = (Vcc – Vf + VceQ1) / If, se desprezarmos a queda no coletor. Ou seja,

R = (5 – 2,1 – 0,2) /30 mA = 90 Ohms ou então 100 Ohms (valor comercial para resistores)

A percepção do brilho do display é bastante subjetiva. Nos cálculos acima, foi realizada a suposição de que o brilho e os demais parâmetros do display variam de forma linear, o que não é exatamente verdadeiro, mas pode ser aproximado dessa forma. No final das contas, sempre será necessário visualmente realizar pequenos ajustes nos valores calculados.

Os 4 transistores (Q1 a Q4), são utilizados como amplificadores de corrente, pois o pino do Arduino possui capacidade limitada. Portanto, com esta topologia, a corrente elétrica drenada do Arduino é limitada pelos resistores de base de Q1-Q4, cujos valores são de 3,3k Ohms.

 


Figura 10: Transistor PNP como amplificador de corrente

 

A título de curiosidade, qual seria a corrente drenada do Arduino nesta aplicação?Considerando a queda de tensão típica de 0,7 V na junção Base-Emissor do transistor Bipolar, a corrente drenada do pino do Arduino, neste caso, é dada por:

I_{Arduino}= \frac{5 V - 0,7 V} {3300 \Omega}  = 1,3 mA

 

Observe que a corrente de acionamento dos LEDs do display de 7 segmentos, circula pela junção coletor-emissor dos transistores. Esta corrente é bem maior que os 1,3 mA drenados do pino do Arduino!

 

Desenvolvendo o código de funcionamento no Arduino

 

O programa para realizar a tarefa de multiplexação recebe os valores dos 4 dígitos a serem mostrados no display e realiza os acionamentos dos respectivos segmentos. Os segmentos são acionados de forma intermitente, como foi explicado. 

Para realizar a tarefa de acionamento dos segmentos de forma intermitente e independente da rotina principal do programa, foi utilizada a interrupção do Timer 1.

Para melhor demonstrar o funcionamento, primeiramente construí o fluxograma da Figura 9. A partir do fluxograma, fica mais facil desenvolver o código de funcionamento.

 


Figura 11: Ciclo de multiplexação

 

De acordo com a Figura 9, a cada interrupção acontece a troca do dígito que é ligado, permanecendo sempre três dígitos desligados. Porquanto a interrupção aconteça com intervalo de tempo pequeno, a percepção visual será de que os quatro dígitos do módulo de display a LED estejam ligados, cada qual mostrando o seu valor.

Disto isto, abaixo temos o código de funcionamento. Ele está comentando, então você conseguirá entender com maior facilidade.

 

 

Ao final, você terá uma montagem parecida com a abaixo. Ela poderá variar se você usar componentes diferentes.

 


Figura 12: Finalmente funcionando   \o/

 


Conclusão

Neste artigo, nós mostramos um dos métodos de multiplexação, usando a placa Arduino, um expansor de IOs 74HC595.

Você pode montar o circuito com 2 ou 3 dígitos também. Além do 74HC595, existem outros drivers que podem ser usados pra acionar displays de 7 segmentos, como o 4511, 7447, 7446, 4033. Basta pequena modificação no circuito e no software, que você conseguirá usa-los.

Compartilhe seus resultados conosco! Isto certamente vai ajudar muitas pessoas que também estão iniciando a programar Arduino.

Caso você teve alguma dificuldade com este artigo ou queira comentar a sua implementação, por favor deixe um comentário com a sua dúvida. Teremos prazer em ajudá-lo(a)!

E aí, gostou? Opine. Assim poderemos melhorar.

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *