DISPLAY DE SETE SEGMENTOS COM LEDS
COMUNICAÇÃO SERIAL SÍNCRONA



Este artigo apresentará um provável substituto para os displays de sete segmentos com tamanhos médios ou grandes. Conforme dito, seu diferencial é a forma com que o display é ligado ao circuito principal (controle). O mesmo necessita apenas de 4 pinos para o seu controle (dados, clock, habilitação e transferência), ao invés dos oito pinos comumente utilizados (a, b, c, d, e, f, g e ponto) em um display “comum”. A comunicação entre o circuito de controle e este display é feita de maneira “serial”.


É importante que você compreenda a diferença entre um “padrão” e uma “forma” (ou método) de comunicação. Um padrão define uma série de características, como: modo de comunicação, formato de conectores, tensões e níveis lógicos envolvidos, entre outras. Como exemplo de padrões de comunicação temos: RS-232, I2C, SPI, MICROWIRE, etc. Todos estes padrões tem como modo de transmissão/recepção de dados, o modo serial (os bits dos dados são transmitidos um a um, serialmente). Portanto, quando falo que a comunicação do display é feita de maneira “serial”, não estou me referindo a nenhum “padrão”. Mais à frente, quando detalhar o funcionamento do circuito, você compreenderá melhor sobre o modo de comunicação serial que utilizei para o display (serial síncrono com shift registers).


Um outro detalhe importante sobre o display que proponho neste artigo é que é possível utilizar mais de um em um mesmo projeto, com o compartilhamento de um ou mais pinos (geralmente, dados e clock) entre os displays utilizados no projeto. Com isso é possível diminuir consideravelmente o número de pinos de I/O do microcontrolador a ser utilizado como “agente” controlador. Veja a figura abaixo.





ONDE USAR

Este tipo de display é ideal para a montagem de mostradores numéricos que precisam ser vistos a uma certa distância pelo operador, em ambientes residenciais, comerciais e industriais, como:

- relógios
- cronômetros
- termômetros
- marcadores de senhas para filas
- contadores de eventos
- etc

O uso deste tipo de display não tem limite! Seu custo, bastante acessível, permitirá que cada um encontre “n” aplicações para o mesmo.




O CIRCUITO

Na figura abaixo é dado o circuito elétrico do meu display de sete segmentos com LEDs. Cada “segmento” do mesmo é formado por quatro LEDs ligados em “paralelo”. Desta forma mantive a mesma tensão em cada LED e evitei que, caso um dos LEDs viesse a queimar, os outros pertencentes ao mesmo segmento parem também de funcionar (no caso da ligação em série). Com isso evita-se uma leitura errada por parte do usuário (falha de um dos segmentos) e também facilita-se a identificação de um segmento com problemas (um LED apagado).


A tensão inserida em cada segmento deve ser de 12 VDC máximos. Com está tensão e tomando como base o tipo de ligação sugerida (paralela) para os LEDs, é possível definir a corrente que atravessará cada um dos segmentos (conjunto de quatro LEDs) com a fórmula:


sendo:

VENTRADA = 12VDC
VLED = 2 VDC
R = 560 R


temos:


Se considerarmos que está é a corrente total por segmento, podemos então definir a corrente máxima por LED da seguinte maneira:



então:


Em meu protótipo utilizei LEDs (D1 a D29) do tipo vermelho comum com 5 mm de diâmetro. Os cálculos acima foram feitos considerando uma tensão de trabalho da ordem de 2VDC. A grande maioria dos LEDs do tipo descrito acendem com boa luminosidade com a tensão usada nos cálculos. LEDs diferentes, podem requerer tensões de trabalho também diferentes, e assim exigirão que novos cálculos sejam realizados, para adequar o circuito ao novo LED.


Cada segmento está ligado a uma das sete portas darlington do driver ULN2003 (CI1). Cada “porta de saída” deste drive tem capacidade de operar uma tensão de até 50 VDC sob uma corrente de até 500 mA máximos (600 mA de pico).

O controle do “drive” ULN2003 é feito por um shift register de oito bits, um 74HC595 (CI2). Este shift register opera da seguinte maneira: inserimos um bit qualquer em sua entrada “SER” (DADO). Com um pulso (rampa de subida) em “SRCLK” (CLOCK) inserimos o bit presente na entrada “SER” no flip-flop com saída em “QA”. Mais um pulso em “SRCLK” e o bit é transportado do flip-flop “QA” para o flip-flop "QB” e assim sucessivamente até QH. Se um outro bit estiver presente na entrada “SER” no momento do transporte de QA para QB, este será introduzido em QA.

Desta maneira podemos inserir um byte (8 bits) serialmente através do pino “SER” (bit por bit) disponibilizando-o através de QA a QH. Temos então um CI com entrada “serial” e saída “paralela”.

O pino “RCLK” (TRANFERÊCIA) permite transferir, com um pulso, o conteúdo dos flip-flops para o latch de saída (transferência na rampa de subida do pulso). Temos então o “travamento” do dado (byte) na saída do CI2. O mesmo só será modificado após um novo dado ser inserido nos flip-flops e transportados para o latch de saída.

O pino “SRCLR” do shift register é um pino de reset. Quando ativado (nível lógico “0”) as saídas QA a QH são limpas. No circuito este pino é mantido em nível lógico “1”, através do resistor R10. O pino “G” é o pino de habilitação do CI. A habilitação é negada através do resistor R12 (nível lógico “1”). Neste caso, os pinos QA a QH são mantidos em “alta-impedância”.

Para auxiliar na compreensão do funcionamento do CI 74HC595, a tabela abaixo trás o que foi descrito até o momento.

                            Tabela – Tabela “verdade” do 74HC595

RCLK

SRCLK

SRCLR

G

Função

X

X

X

H

QA – QH em tri-state

X

X

L

L

Limpa registros QA - QH

X

^

H

L

Qn = Qn – 1, QA = SER

^

X

H

L

O conteúdo dos “Flip-Flop’s” são transferidos para os “latches”

X – qualquer estado lógico – “0” ou “1”
H – Estado lógico “1” – high – 5 VDC
L – Estado lógico “0” – low - GND

- Borda de subida do pulso (de “0” para “1”)

Fica fácil então compreender que para ligar um segmento qualquer no display, o pino de entrada de CI1, ligado a CI2 através de QA a QH deve receber o estado lógico “1” (5 VDC) e para desligar um segmento, o estado lógico “0” (GND). O estado lógico “1” em uma das entradas de CI1 é invertido em sua respectiva saída.

O elemento de “controle” (microcontrolador) deverá ter então, internamente em seu programa uma tabela de conversão para cada valor numérico possível (0 a 9), de tal forma que os segmentos necessários para demonstrar o valor desejado sejam ligados e desligados. A tabela abaixo mostra estes valores, considerando os segmentos do display, conforme o esquema elétrico.

                                                    Tabela – Tabela de conversão


Saídas do 74HC595


QA

QB

QC

QD

QE

QF

QG

QH


Segmento equivalente

Valores

f

e

d

g

c

a

b

ponto

0

H

H

H

L

H

H

H

X

1

L

L

L

L

H

L

H

X

2

L

H

H

H

L

H

H

X

3

L

L

H

H

H

H

H

X

4

H

L

L

H

H

L

H

X

5

H

L

H

H

H

H

L

X

6

H

H

H

H

H

H

L

X

7

L

L

L

L

H

H

H

X

8

H

H

H

H

H

H

H

X

9

H

L

L

H

H

H

H

X

X – qualquer estado lógico – “L” ou “1”
H – Estado lógico “1” – high – 5 VDC
L – Estado lógico “L” – low - GND


Os resistores R1 a R7 devem ter uma potência de dissipação da ordem de 0,5 W à 1 W. Como detalhado anteriormente, a corrente por segmento será de 0,01785 A. Assim, a potência dissipada pelo resistor será de:

então:

Observando o valor obtido poderíamos concluir que um resistor com ¼ W (0,250 W) de dissipação seria uma boa escolha. Porém, como o display pode ser utilizado por longos períodos, é prudente aumentar a potência de dissipação dos resistores limitadores de corrente para cada segmento.

O ponto do display foi implementado por um único LED (D29). Este LED tem como resistor limitador R14 (2k2 Ohms). Se você fizer os cálculos, conforme demonstrado, verá que a corrente que circula por este LED é da ordem de 0,00454 A. Corrente muito próxima da demonstrada para cada LED pertencente aos segmentos. A potência dissipada por R14 é muito baixa, da ordem de 0,045 W. Sendo assim um resistor com ¼ W (0,250 W) de dissipação, é mais que suficiente para um correto dimensionamento.

O transistor Q1 trabalha como uma “chave”, para ligar e desligar o LED D29 (ponto). A base de Q1 está ligada ao pino QH de CI2 através de R13. Os resistores R8 a R12 são resistores de pull-up e ajudam a manter o nível lógico “1” nos pinos de controle do CI2. O capacitor C1 age como filtro e desacoplamento da fonte para CI2.

A alimentação do circuito requer duas tensões diferentes: 5 VDC e 12 VDC. A primeira tensão alimentará o CI2 (74LS595) e a segunda os LEDs. A fonte não foi prevista no circuito, pois achei que seria mais fácil retirar a alimentação de uma fonte externa ou mesmo da fonte do circuito de controle dos displays. De qualquer maneira, na figura abaixo apresento uma pequena fonte que poderá ser utilizada como referência nos futuros projetos com o display apresentado neste artigo.





MONTAGEM

Na figura abaixo está o lay-out necessário para a confecção do circuito impresso. Comece por montar os resistores, o capacitor C1 e os jumpers (quatro no total) na placa. Para os CIs é recomendável o uso de suportes. Ao montar os LEDs tenha muito cuidado para não invertê-los, pois estes são polarizados. Tome o mesmo cuidado ao soldar o transistor Q1.

 

Para ligar a alimentação utilizei um conector do tipo “KRE” com três segmentos (conector com parafusos). Já para a ligação para o “controle” do display, usamos uma barra de pinos com 4 segmentos. Caso você não possua estes conectores em seu estoque ou não os encontre em sua região, poderá ligar todos estes pontos com fios, sem problema algum.




TESTE E USO

Após a montagem é prudente fazer uma revisão na mesma. É melhor perder alguns minutos em uma pequena revisão do que perder horas tentando entender o porque da montagem não funcionar.

Na figura abaixo se pode ver um circuito microcontrolado para testar o display. Utilizei o versátil Basic Step 1 e a placa Step LAB da Tato Equipamentos Eletrônicos. A figura na abertura deste artigo trás a imagem da montagem do meu protótipo.


Você também poderá utilizar outras versões do Basic Step 1 para realizar o teste, como a versão Basic Step 1 OEM. Neste caso, será necessário fazer a montagem da fonte sugerida anteriormente ou o uso de uma fonte externa com as duas tensões solicitadas. Esta montagem poderá ser feita em uma matriz de contatos, ou mesmo placa padrão.

O uso de um outro microcontrolador qualquer para os testes exigirá conhecimentos seus no uso do mesmo e também da linguagem mais adequada a este. Deixo isso por conta de cada um. Neste artigo comentarei apenas a alternativa selecionada por mim.

Ligue os pinos de I/O do Basic Step 1 à placa do display - pinos DADO, TRANSFERÊNCIA, CLOCK e HABILITAÇÃO. Ligue a alimentação com bastante cuidado para não inverter a posição das tensões ou mesmo o GND (terra) com qualquer uma delas. Na placa Step LAB, os 5 VDC estão presentes nos pontos ao lado da matriz de contados marcados como “VDD”. Já a tensão de 12 VDC será extraída dos pontos marcados como VIN. O GND para o display pode ser retirado dos pontos marcados como VSS.

É preciso compreender que a placa Step LAB deve ser alimentada com uma fonte de 12 VDC em sua entrada para que se tenha 12 VDC nos pontos VIN. Verifique se sua fonte possui esta tensão na saída.

Grave o Basic Step com o programa TESTE_DISPLAY_BIG.BAS, inserido na seção downloads, e observe o funcionamento do conjunto conforme descrito abaixo:

- O display mostrará a contagem de 0 à 9, em intervalos de 1 segundo. Entre cada valor apresentado, o display será “limpo” (todos os segmentos desligados) por um período de 0,2 segundos. Quando a contagem chegar a “nove”, o ponto piscará três vezes e em seguida um novo ciclo se iniciará.

O programa é bem simples e está bem comentado para facilitar a sua compreensão. Além disso, o help do compilador trás muitas informações, em português, sobre as instruções e seu modo de uso. Estudá-las é mais que recomendável para o aprendizado da linguagem.

Você deve ter em mente que o mais importante não é o entendimento do programa, mas sim a compreensão dos conceitos envolvidos no controle do display (lógica de operação do CI 74HC595). Sem a compreensão destes conceitos, dificilmente você conseguirá utilizar o display com outros microcontroladores, já que cada um possui sua própria linguagem, cada qual com suas diferenças.

Apenas para ilustrar o que foi dito, observe a tabela abaixo. Ela trás dois segmentos de código, em linguagens de programação diferentes, mas que executam a mesma tarefa.

            Tabela - Segmentos de código fontes em diferentes linguagens

Linguagem Basic Linguagem C

'*****************************************
'* Escreve dado no display
'*****************************************

escr_disp:

low clock
for bits = 0 to 7
dados=dado/128
high clock
pause 5
low clock
dado=dado*2
next bits
high transf
pause 5
low transf
return

'*****************************************
'* Escreve dado no display
'*****************************************

void escr_disp(void){

output_low(CLOCK);
for (i=0;i<8;i++){
if (bit_test(saida, i))
output_bit(DATA, 1);
else
output_bit(DATA, 0);
output_high(CLOCK);
delay_ms(5);
output_low(CLOCK);
}
output_high(TRANSF);
delay_ms(5);
output_low(TRANSF);

}






CONCLUSÃO

O display apresentado neste artigo é bem simples de se montar e utilizar. Ele pode substituir um display de sete segmentos de tamanho “médio” com bastante facilidade. No inicio do artigo dei uma série de dicas para seu uso e que podem ser aproveitadas. Uma boa montagem e até a próxima!




DOWNLOADS:


- Circuito do display de sete segmentos com LEDs
- Lay-out para circuito impresso
- Código fonte exemplo para Basic Step 1
- Lista de materiais


Este artigo foi publicado, com minha autorização, na revista Eletrônica Total nr 111 de Novembro/Dezembro de 2005.







Copyright deste conteúdo reservado para Márcio José Soares e protegido pela Lei de Direitos Autorais LEI N° 9.610, de 19 de Fevereiro de 1998. É estritamente proibida a reprodução total ou parcial do conteúdo desta página em outros pontos da internet, livros ou outros tipos de publicações comerciais ou não, sem a prévia autorização por escrito do autor.