Conversor A/D
PIC16F887A
O conversor analógico-digital (ADC) permite conversão de um sinal de
entrada analógico para um binário de 10 bits. Este dispositivo
utiliza entradas analógico, que são multiplexados em uma única amostragem. A
saída da amostra está ligada à entrada do conversor. o conversor gera um
resultado binária de 10 bits por meio de sucessivas aproximação e armazena o
resultado da conversão(ADRESL e ADRESH).
A referência de tensão ADC é selecionável por software para ser gerados
internamente ou externamente.
O ADC pode gerar uma interrupção, uma vez concluída uma conversão.
Configuração:
CONFIGURAÇÃO DAS PORTAS
O ADC não distingue entre tensões analógicas e digitais. Para evitar erros de medição
ou estragos no chip, os pinos deve ser configurados como entradas analógicas, antes
de iniciar a conversão. Estes registros são TRIS e ANSEL/ANSELH.
CONFIGURAÇÃO DO CANAL
Os bits CHS do registro ADCON0 determina qual canal estará conectado ao
conversor.
CONFIGURAÇÃO DA TENSÃO DE REFERÊNCIA
Os bits VCFG do registro ADCON0 fornece controle independente da tensão de
referência positivo enegativo. tensão de referência positivo pode ser VDD ou uma
fonte de tensão externa. Da mesma forma, a tensão de referência negativa pode
ser um VSS ou
fonte de tensão externa.
FONTE DE CLOCK DA CONVERSÃO
A fonte e clock do conversor é selecionável através dos bits ADCS do
registo ADCON0. São quatro opções de clock possíveis: Fosc/2, Fosc/8, Fosc/32 e
RC.
ADCON0
ADCS1:ADCS0 - Seleção do clock da conversão
00 - Fosc/2
01 - fosc/8
10 - Fosc/32
11 - RC
CHS3:CHS0 - Seleção do canal
GO/DONE - Status da conversão
0 - Conversão completa ou nao iniciada;
1 - Conversão iniciada. O bit é limpo automaticamante quando completar a conversão.
ADON - Habilita o módulo ADC
0 - Habilitado
1 - Desabilitado
ADCON1
ADFM - Formato do resultado da conversão
0 - Justificado para Esquerda
1 - Justificado para Direita
VCFG1 - Tensão de referência negativo
0 - VSS (interno)
1 - pino VREF- (externo)
VCFG0 - Tensão de referência positivo
0 - VDD (interno)
1 - pino VREF+ (externo)
ANSEL/ ANSELH
Configura os pinos:
1 - Analógico
0 - Digital
Iniciando a conversão:
1 - Configurar o pino como entrada;
2 - Configurar o pino como analógico;
3 - Selecione o clock da conversão ADC
4 - Configurar a tensão de referência
5 - Selecione o canal de entrada ADC
6 - Selecionar o formato do resultado
7 - Ligue o módulo ADC
8 - Configurar a interrupção ADC (opcional):
Limpar flag de interrupção ADC
Habilitar interrupção ADC
Habilitar interrupção periférica
interrupção Ativar global
9 - Esperar o tempo de aquisição pretendido. (20 us)
10 - Iniciar a conversão, definindo o bit GO/DONE.
11 - Aguarde ADC conversão, até que:
GO/DONE for resetado ou
Aguardando a interrupção ADC (caso interrupção esteja ativada)
11 - Leia o resultado ADC
12 - Limpar o flag de interrupção ADC (caso interrupção esteja ativada)
Exemplo:
Equivale a função ADC_Init() do MikroC PRO PIC
pino RA0 como entrada
TRISA = 0b00000001;
define somente pino RA0 como analogico
ANSEL = 0b00000001;
ANSELH = 0;
selecional o canal utilizado: Canal 0
ADCON0.CHS3 = 0;
ADCON0.CHS2 = 0;
ADCON0.CHS1 = 0;
ADCON0.CHS0 = 0;
selecionar o clock (RC)
ADCON0.ADCS1 = 1;
ADCON0.ADCS0 = 1;
Seleciona a tensão de referencia
ADCON1.VCFG1 = 0;
ADCON1.VCFG0 = 0;
Seleciona o formato do resultado(para direita)
[Link] = 1;
Equivale a função ADC_Read() do MikroC PRO PIC
habilita conversor
[Link] = 1;
tempo de aquisição exigida
delay_us(20);
inicia a conversão
ADCON0.GO_NOT_DONE = 1;
espera a conversão terminar
while(ADCON0.GO_NOT_DONE);
desabilita o conversor
[Link] = 0;
habilita conversor
[Link] = 1;
tempo de aquisição exigida
delay_ms(20);
Recupera o valor da conversão
adc_rd = ((ADRESH <<8) + ADRESL);
return adc_rd;
Mais um exemplo:
1. unsigned long adc_rd;
2.
3. void main()
4. {
5. ADC_Init();
6. ANSEL = 1;//define somente pino RA0 como analógico
7. ANSELH = 0;
8.
9. while(1)
10. {
11. adc_rd = ADC_Read(0);
12. delay_ms(100);
13. }
14. }