terça-feira, maio 20, 2014

Examinando um Display de 7 Segmentos de 10cm de Altura

Eu já tinha visto de relance um destes displays na Santa Efigênia. Recentemente o meu amigo Luciano Ramalho comprou alguns para montar um painel para o seu Dojo Arduino e encontrou algumas dificuldades ao interfaceá-lo ao Arduino. Neste post documento as minhas experiências e apresento alguns circuitos para controle tanto da versão anodo comum como da versão catodo comum.


Analisando o Datasheet

Os datasheets dos displays podem ser vistos aqui.

As "Características Absolutas Máximas" nos trás uma informação importante: a máxima corrente direta (contínua) suportada pelos LEDs é de 30mA.

Nas "Características  Opto-elétricas" observamos que a tensão típica conduzindo (Vf) do LED vermelho é de 1.8V.

Um detalhe importante que pode passar desapercebido é o "Diagrama Elétrico Interno", ao lado das dimensões mecânicas. Neste diagrama é indicado que os segmentos possuem 5 LEDs em série e o ponto decimal um único LED. Isto é crucial. Com o segmento aceso, a tensão sobre os 5 LEDs será da ordem de 5*1.8 = 9.0V. Portanto não será possível acender um segmento diretamente a partir de uma saída digital de um microcontrolador operando a 5V (como o Arduino).

Primeiros Testes

O objetivo destes primeiros testes é confirmar que lemos corretamente o datasheet. Vamos tentar acender um segmento e o ponto decimal diretamente usando uma fonte. Para evitar danificar o display, vamos colocar um resistor de valor relativamente alto em série com o display. No meu caso usei uma fonte de 12V e um resistor de 1K (o que limita a corrente a um máximo de 12 mA mesmo com o display em curto).

Com um multímetro, conferi a tensão da fonte e medi a tensão sobre o display. O resultado confirmou que o segmento possui 5 LEDs, o ponto decimal apenas um; a tensão medida no LED foi exatamente os 1.8V ditos como típicos no datasheet.

Controlando pelo Catodo

Vamos começar pelo circuito mais simples, em que o anodo comum dos LEDs é ligado ao positivo da fonte e o catodo de cada segmento e ponto decimal é ligado a um resistor. Acendemos os LEDs ligando a outra extremidade o resistor ao negativo da fonte ("terra").

Supondo que queremos uma corrente de 20mA, o resistor de cada segmento deverá ser de (12-9)*1000/20 = 150 ohms. Já o resistor do ponto decimal deverá ser de (12-1.8)*1000/20 = 510 ohms.

Como fazer para ligar ao terra o resistor com um Arduino? Uma primeira ideia seria ligar o resistor diretamente a um pino do microcontrolador. O ATmega328 do Arduino suporta até 40mA por pino e 200mA no total. Com todos os LEDs acesos (pinos em nível baixo), teremos um corrente total de 160mA, o que está dentro das especificações (mas vai exigir uma boa dissipação de calor no microcontrolador). Entretanto, ao colocar a tensão de saída em nível alto (5V), não vamos conseguir apagar o ponto decimal; ele acenderá com uma corrente de (9-5-1.8)/510 = 4,3mA. O ideal é usarmos um transistor NPN, como o 2N2222:

Neste circuito, um nível alto no resistor de 1K fará o transistor conduzir, acendendo os LEDs. Um nível baixo  (ou se ficar em alta impedância) abrirá o circuito, apagando os LEDs.

Controlando pelo Anodo

O controle pelo anodo é um pouco mais complexo. Em primeiro lugar, ao invés de um transistor NPN precisamos usar um PNP. O controle deste transistor é o contrário do NPN: um nível baixo faz o transistor conduzir e um nível alto abrirá o circuito. Para complicar, neste contexto um nível alto é próximo à tensão da fonte do display (12V). Portanto não dá para ligar diretamente a base do transistor a uma saída do Arduino. A solução é colocar um transistor NPN na base do PNP, chegando ao nosso circuito final:



2 comentários:

O Coisa disse...

O ULN2003 faz bem esse tipo de trabalho. Parabens pelo blog.

Daniel Quadros disse...

Sim, o ULN2003 pode ser usado, mas somente para o controle por catodo.