Este artigo demonstra como é possível implementar um voltímetro de 0 a 25 Vcc com saída multiplexada para display de 7 segmentos, usando o microcontrolador 68HC9080Y4 da Motorola.
Nota: O artigo é de 2004.
O CIRCUITO
A figura 1 ilustra o diagrama esquemático do voltímetro baseado no microcontrolador MC68HC9080Y4, da Motorola. Este circuito permite medir tensões de 0 a 25 Vcc com uma resolução de 100 milivolts. Para fazer a conversão da medida de tensão para digital, foi usado o ADC do microcontrolador.
O microcontrolador 68HC9080Y4 tem um conversor analógico-digital (ADC) com resolução de 8 bits, ou seja, tem uma escala de conversão de $00 até $FF em hexadecimal, ou de O a 255 em decimal. Esse ADC possui 4 canais analógicos multiplexados, permitindo a um único ADC selecionar um dos 4 canais como entrada de tensão do conversor. Para a medição de tensão, esse circuito usa o pino do canal 3 (AD3), onde está conectado o potenciômetro P1.
A figura 2 mostra um diagrama de blocos do conversor ADC. Para controlar o ADC, são empregados os seguintes registros:
ADSCR: Registro de controle e estado do ADC. Seleciona o canal e habilita a conversão. O bit de Conversão Completa (COCO) é colocado em "1 Lógico" cada vez que uma conversão é completada. O bit de habilitação de interrupção (AIEN) possibilita gerar uma interrupção no final de uma conversão do ADC.
ADR: Registro de conversão de dados do ADC. Quando a conversão for concluída, o ADC põe o resultado nesse registro e coloca em 1 lógico o bit COCO, ou gera uma interrupção.
ADICLK: Registro de clock do ADC. Este registro seleciona a frequência de clock interno para o ADC.
Algumas conexões simples são necessárias para construir este circuito, senão, vejamos: O capacitor C1 deverá estar o mais próximo possível da alimentação de tensão do microcontrolador (Cl1). Para ligar a saída multiplexada, os segmentos individuais de cada display são conectados juntos: a-a-a, b-b-b, c-c-c, etc. O catodo comum para cada display é conectado ao terra (GND) com transistores NPN. Os displays utilizados devem ter bom brilho, visto que cada um deles é acionado por multiplexação.
O fusível protege contra uma eventual inversão de polaridade da tensão aplicada à entrada de medição. Convém atentar para não inverter as pontas de prova.
Antes de usar esse circuito, é necessário fazer uma calibração. Aplique à entrada de tensão a ser medida uma tensão de 5 V, e ajuste o potenciômetro P1 até que este valor seja lido no display. Uma vez calibrado, podem ser realizadas medidas de 0 a 25 V. Entretanto, recomenda-se muito cuidado para não tirar de posição o potenciômetro P1 durante o uso.
O PROGRAMA
O programa começa configurando: o oscilador interno do microcontrolador, os pinos de entrada/saída, o timer, as interrupções. Depois, são inicializadas as localizações da memória RAM e o programa entra no bloco principal.
Quando se entra no bloco principal, o programa testa se o flag fConverAD foi colocado em 1 lógico pelo timer. Se esse flag for zero, o bloco principal se repete a partir deste ponto. Se o flag está no nível lógico 1, então o programa continuará e zerará os registros usados como contadores (Count AD). A seguir, é realizada a leitura da tensão a medir no canal 3 do ADC. Quando a conversão terminar, o valor encontrado no registro de dados do conversor (ADR) será armazenado nas posições RAM MeasureAD. Essa localização de memória funciona como um anel interativo para chamar a rotina R_Increment. Esta rotina é encarregada de fazer a conversão de tensão de formato hexadecimal para BCD. Quando se sai do laço interativo, os valores encontrados nas posições de RAM (CountAD) são atualizados para as posições de memória utilizadas pelo display (Digit).
A rotina R_Increment implementa um contador BCD de 3 dígitos gerado por programa. A contagem é armazenada na variável etiquetada como CounterAD. Observe que, ao ser declarada esta variável, foram usadas 3 posições de memória RAM, uma para cada contador. Quando esta rotina é chamada, o registro X é carregado com o endereço da primeira posição utilizada pelo contador BCD 1 e o acumulador recebe a quantidade de dígitos. Esta posição é incrementada e testada para verificar se o dígito chegou a $0A em hexadecimal (equivalente a 10 em decimal). Se este dígito não tiver alcançado o valor $0A, a rotina retornará. Caso alcance $0A, então este dígito será zerado e o registro apontador X será incrementado para acessar o próximo dígito. Este processo se repetirá sempre que o dígito apontado pelo registro for igual a $0A. Note que o acumulador é salvo na pilha. Este valor é usado para conhecer a quantidade de dígitos que são empregados pelo display. Esta rotina pode ser utilizada com conversores com uma resolução maior.
O programa tem configurada a interrupção do timer, que chama a rotina Multiplex_Display. Esta rotina se encarrega de tirar os valores de tensões medidos e fazer a decodificação dos valores encontrados nas posições de memória RAM utilizadas pelo display (Digit). A variável p_Mux_Display é usada como ponteiro para acessar indiretamente os valores descobertos para o display.
Tais valores são empregados para acessar a tabela Deco_Num e gerar uma decodificação por programa para display de 7 segmentos. O registro Q_Mux_Register é encarregado do controle dos transistores. Observe que o microcontrolador 68HC908QY4 usa o pino PTA2 somente como entrada. Por este motivo, é necessário rotear duas vezes o registro encarregado do controle dos transistores (Q_Mux_Register) quando se passa por PTA 2.O ponto decimal da medida de tensão é energizado quando a multiplexação tem ativo o dígito 2, ou seja, o transistor Q2.
Obs: Este artigo é meramente histórico e o seu código fonte se perdeu
O arquivo incluído no código para os microcontroladores 68HC908QY e 68HC908QT:
$1nclude `qtqy_registers.inc'0 pode ser baixado do site: www.pemicro.com/ics08/index.html