Fork me on GitHub

24/03/13

Conversor A/D

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 e negativo. 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)
 ADCON0.ADFM = 1;

 
 
Equivale a função ADC_Read() do MikroC PRO PIC
 habilita conversor
 ADCON0.ADON = 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 
 ADCON0.ADON = 0;
 
habilita conversor
 ADCON0.ADON = 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:
unsigned long adc_rd; 

void main()
{
ADC_Init();
ANSEL = 1;//define somente pino RA0 como analógico
ANSELH = 0;

while(1)
{
adc_rd = ADC_Read(0);
delay_ms(100);
}
}

2 comentários:

  1. como faço para fazer uma saída analógica no pic? quero receber um sinal... tratar ele via software e colocar ele em um pino do microcontrolador...?

    ResponderExcluir
  2. Não é possível a utilização de 2 portas ADC em um mesmo projeto?

    ResponderExcluir

Postagens Relacionadas!!