Você está na página 1de 7

COMO UTILIZAR O CONVERSOR AD DO MICROCONTROLADOR PIC

O CONVERSOR ANALGICO DIGITAL (AD) Vivemos em um mundo analgico. Tudo nossa volta analgico. Todas as sensaes que podemos experimentar so analgicas (audio, viso, olfato, paladar, tato, etc). E ainda todas as grandezas fsicas que se fazem por vezes necessrias determinar, tambm so analgicas (tenso, corrente, temperatura, presso, etc). Porm os sistemas informatizados atuais como computadores, microprocessadores, microcontroladores e outros microsistemas no geral so digitais. Para coletar dados do mundo externo com estes sistemas, preciso conhecer e compreender melhor o funcionamento dos conversores analgicos (ADCs). Estes conversores transformam um sinal analgico qualquer em um sinal digital discreto, passivo de ser processado pelos computadores e microsistemas digitais atuais. Para converter um sinal analgico qualquer, o conversor faz algumas amostragens e depois representa a leitura realizada atravs de um valor equivalente binrio (digital), de acordo com a sua preciso. E esta determinada pelo nmero de bits que um ADC pode usar em sua escala de converso. Sendo assim, quanto maior o nmero de bits dentro da escala de converso, maior ser a preciso do conversor. Um conversor ADC com 8 bits pode retornar valores dentro da faixa de 00H a FFH (0 a 255) e um ADC com 10 bits retornar valores de 0000H a 03FFH (0 a 1023). Obs.: O H inserido ao lado dos nmeros refere-se adoo do sistema de numerao hexadecimal, um sistema muito usado em computao e eletrnica e que possui 16 valores nmeros de 0 a 9 e letras A, B, C, D, E, F, respectivamente, os valores de 10 a 15. Assim para um mesmo valor de entrada, poderemos ter resolues diferentes. Quanto menor o valor retornado em nossa resoluo, maior ser a preciso da medida realizada. A resoluo dada pela frmula, resoluo = Vref / 2n onde: Vref = tenso de entrada no conversor n = nmero de bits do conversor (quantidades de bits que compe um degrau) Para exemplificar ainda mais, na tabela abaixo voc tem o comparativo do valor da resoluo para uma converso do valor de 5 Volts com ADCs de 8 e 10 bits. Tabela Resoluo para ADCs de 8 e 10 bits de preciso ADC de 8 bits Valor a ser convertido = 5V Resoluo = Entrada / 28 - 1 = 5V / 256 - 1 = 0,0196 V Resoluo = 19,6 mV ADC de 10 bits Valor a ser convertido = 5V Resoluo = Entrada / 210 - 1 = 5V / 1024 - 1 = 0,00488 V Resoluo = 4,88 mV

Assim, um sinal analgico variante no tempo agora desmontado em pequenos degraus durante uma converso digital. Ou seja, nosso conversor vai de zero at o valor mximo de referncia (valor mais alto admitido pelo conversor ADC em sua entrada), em degraus dados pela resoluo. Nota-se que com um ADC de 8 bits podemos representar um valor de 0 a 5VDC em degraus com 0,0196 V cada, e com um ADC de 10 bitspodemos representar o mesmo valor em degraus com 0,00488 V cada. Obtemos assim, para o ltimo caso, uma preciso muito maior. Note que o valor que obteremos do conversor no ser o valor de 0,0196V ou 0,00488V, por exemplo, para conversores de 8 e 10 bitsrespectivamente. O conversor ADC enviar um valor binrio dentro da sua escala que representa a grandeza analgica em sua entrada. Cabe a ns desenvolvedores operarmos o "milagre da converso do valor binrio para um valor decimal dentro da escala desejada. Isso ser feito internamente no microcontrolador, atravs de equaes matemticas previamente definidas no programa.

Um outro ponto importante a respeito que a informao est dividida em degraus, e se o valor ficar entre um degrau e outro, por exemplo, o ADC poder enviar uma leitura flutuante hora enviando o primeiro degrau dentro da faixa de leitura, hora o segundo. Mas nunca um valor intermedirio entre dois degraus. Os valores dos degraus so sempre fixos! Vamos a um exemplo bem simples. Digamos que durante uma experincia qualquer, com dois conversores ADC diferentes, um com 8 e outro com 10 bits de preciso, medindo uma tenso com 3,41VDC obtivemos os seguintes resultados: ADC 8 bits => 10101101 binrio = 173 decimal ADC 10 bits => 1010111010 binrio = 698 decimal Se voc multiplicar os valores pela resoluo calculada para cada um, obteramos: ADC 8 bits => 173 x 19,3 mV = 3,33 V ADC 10 bits => 698 x 4,88 mV = 3,40 V No exemplo fica claro o fator preciso no exemplo. Variando apenas um nico bit na mesma o valor informado pelo ADC de 8 bits ficou fora da faixa. J para o ADC de 10 bits a diferena no foi to grande assim. Some o valor 1 a ambos os valores demonstrados e refaa os calculos. Para ambos os ADCs o valor retornado ser o mesmo. Agora some 2 aos valores retornados. Teremos ento, 175 para o ADC de 8 bits e 700 para o ADC de 10 bits. O valores agora obtidos sero 3,43VDC para o ADC de 8 bits e 3,416 para o ADC de 10 bits. Portanto, numa possvel flutuao durante a converso, um numero maior de bits na preciso poder ajudar no resultado final obtido.

O CONVERSOR ADC DO MICROCONTROLADOR PIC Alguns microcontroladores PIC possuem conversores ADC internos, outros no. preciso selecionar um que possua conversor ADC interno para poder utiliz-lo. Vamos selecionar o PIC16F877 apenas para fins de exemplo. O conversor ADC deste microcontrolador possui a seguintes caractersticas: - Pode trabalhar com 8 ou 10 bits de preciso; - Possui 8 canais para converso; - Quatro tipos de referncia: VDD ou VSS (interna), VREF+ ou VREF- (externa); - Freqncia de converso baseada no clock interno do microcontrolador ou atravs de cristal externo (pode operar no modo sleep); - Trs divisores para a freqncia (clock interno da mquina); - Dois tipos de justificao do resultado: direita e esquerda; - Uma interrupo para avisar sobre o trmino da converso. Apesar do modelo possuir 8 canais para converso, ele s possui um nico conversor. Os canais so na verdade entradas ligadas atravs de uma chave que pode ser selecionada internamente atravs do programa. Assim, apenas uma nica converso pode ser feita por vez.

CONFIGURANDO O PIC PARA LEITURAS ANALGICAS OS REGISTRADORES ADCON1 E TRIS A primeira coisa a fazer definir o nmero de canais necessrios para o projeto que voc tem em mos. Aps isso necessrio configurar os pinos de I/O onde os canais esto ligados como entradas analgicas (os microcontroladores PIC muitas vezes compartilham vrios recursos atravs de um nico pino de I/O, como feito tambm em muitos outros microcontroladores). Para configurar os canais analgicos necessrio alterar os bits <PCFG3 : PCFG0> no registrador ADCON1. Veja a tabela abaixo. Tabela Seleo dos canais analgicos, VREF+ e VREFPCFG3: PCFG0 0000 AN7 RE2 A AN6 RE1 A AN5 RE0 A AN4 RA5 A AN3 RA3 A AN2 RA2 A AN1 RA1 A AN1 RA0 A VREF+ VREFCanais ADC 8 Ref. Externa 0

VDD

VSS

0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 1111

A D D D D D D A D D D D D D D

A D D D D D D A D D D D D D D

A D D D D D D A A A A D D D D

A A A D D D D A A A A A D D D

VREF+ A VREF+ A VREF+ D D VREF+ A VREF+ VREF+ VREF+ VREF+ D VREF+

A A A D D D D VREFA A VREFVREFVREFD VREF-

A A A A A D D A A A A A A D D

A A A A A D D A A A A A A A A

RA3 VDD RA3 VDD RA3 VDD VDD RA3 VDD RA3 RA3 RA3 RA3 VDD RA3

VSS VSS VSS VSS VSS VSS VSS RA2 VSS VSS RA2 RA2 RA2 VSS RA2

7 5 4 3 2 0 0 6 6 5 4 3 2 1 1

1 0 1 0 1 0 0 2 0 1 2 2 2 0 2

Pinos configurados como I/O digital (D)

Pinos configurados como entrada analgica (A)

Alm do registrador ADCON1, os registradores TRISA e TRISE (para o caso do PIC16F877) devem ser configurados corretamente. Os pinos que sero utilizados como entradas analgicas devem ser configurados como entradas atravs dos referidos registradores (fazendo o bit = 1).

JUSTIFICAO DO RESULTADO CONVERSES PARA 8 E 10 BITS Agora que j temos informaes sobre a seleo dos canais analgicos vamos falar sobre a justificao do resultado obtido. Esta pode ser feito de duas maneiras: direita ou esquerda. Para isso basta configurar o bit <ADFM> no registrador ADCON1 conforme a tabela 3. Tabela Seleo da justificao em ADCON1 ADFM 0 Justificao Justificado a esquerda. O resultado da converso utiliza todos os bits (0 a 7) deADRESH e somente dois bits (7 e 6) de ADRESL Justificado a direita. O resultado da converso utiliza todos os bits (0 a 7) deADRESL e somente dois bits (7 e 6) de ADRESH

A justificao ajuda quando desejamos trabalhar com apenas 8 bits na converso ao invs de 10. Neste caso justificamos a esquerda onde utilizaramos todos os bits em ADRESH e desprezaramos os bits em ADRESL.

TENSO DE REFERNCIA O valor apresentado pelo ADC leva em conta, sempre, a referncia selecionada. Ou seja, quando a referncia VREF+ selecionada for VDD, por exemplo, a converso mxima 5VDC ser representada pelo valor 1024. Porm se voc optar por utilizar os pinos RA3 e/ou RA2 como entrada para diferentes tenses de referncia, a mxima converso retornada como 1024 ter exatamente o valor inserido no pino RA3 ou ainda a diferena entre RA3 e RA2, caso VREF- tenha sido selecionado tambm. De qualquer maneira, necessrio observar os valores mximos e mnimos para trabalhar com tenses de referncia externas no PIC. Veja a tabela abaixo. Tabela Valores mximos e mnimos p/ tenses de ref. externas Referncia VREF+ VREF(VREF+ - VREF-) Valor Mnimo (V) VDD 2,5 VSS 0,3 2,0 Valor Mximo (V) VDD + 0,3 VREF+ + 2,0 VDD + 0,3

VELOCIDADE DE AMOSTRAGEM E SELEO DO TAD Um outro detalhe muito importante sobre o conversor analgico interno do PIC diz respeito a sua velocidade. Toda amostragem feita realizada pelo processo Sample and Hold (amostra e congela). O conversor possui um capacitor interno (120 pF) que ligado ao canal analgico selecionado durante a amostragem do sinal. Assim, ele carregado com a tenso presente na entrada. Quando um processo de converso tem inicio, o capacitor desligado do canal selecionado, mantendo assim a tenso anteriormente presente na entrada. Assim, mesmo que a tenso na entrada sofra pequenas variaes, estas no afetaro a converso que agora est em andamento internamente. Devido a este fato voc deve tomar muito cuidado durante suas medidas analgicas com o PIC. Digamos que entre uma leitura e outra o capacitor se descarregue por completo. Para que uma nova converso possa ser feita de maneira adequada, necessrio esperar pela carga total do capacitor. Assim necessrio que entre uma leitura e outra haja um tempo (tempo de adequao do capacitor). Recomenda-se que na pior das hipteses este no seja inferior a 40 us (40 x 10-6 segundos). A adequao do capacitor interno tambm depender da temperatura e da impedncia inserida na entrada. Valores entre 50k Ohm e 10k Ohm so os indicados. Quanto menor o valor da impedncia inserida na entrada, menor ser o tempo de adequao do capacitor. O tempo de adequao do capacitor tambm est intimamente ligado ao clock selecionado para o conversor ADC. Podemos chamar este tempo (perodo) de TAD e este ser equivalente ao tempo de converso de 1 bit. Como o conversor do PIC tem 10 bits teremos 10 x TAD . preciso acrescentar dois perodos neste total, sendo um para a adequao do capacitor e outro para o inicio da converso. Temos ento 12 x TAD. O valor de TAD depender ento do valor da freqncia do clock selecionada para o conversor. Obs.: recomendvel acrescentar mais 2 TAD no total calculado, pois ao final da converso o flag da interrupo marcado e o capacitor ser religado.

REGISTRADOR ADCON0 SELEO DA FREQUENCIA PARA O CONVERSOR Agora voc tem algumas informaes que o ajudaro a calcular melhor o tempo de adequao do capacitor e assim evitar medidas errneas. Para isso ser necessrio selecionar a freqncia de trabalho para o conversor. Esta ser feita em dois bits <ADCS1:ADCS0> do registradorADCON0. Veja a tabela abaixo.

Tabela Seleo da Freqncia

ADCS1 0 0 1 1

ADCS0 0 1 0 1

Freqncia FOSC / 2 FOSC / 8 FOSC / 32 RC interno

Vamos a um pequeno exemplo. Digamos que o cristal externo no PIC seja de 20 MHz e a opo selecionada seja FOSC / 2, ento temos: TAD = 2 / 20.000.000 = 100 x 109 => 100ns Este tempo bastante pequeno, se considerarmos que cada ciclo de mquina nesta situao ter 200 ns. Assim o mesmo no recomendado. A escolha correta para este caso seria FOSC / 32. Com este valor obteramos um TAD de 1,6 us aproximadamente. Multiplicando o total obtido nosso tempo total seria de aproximadamente 22 us. Se a cada leitura entre um ou mais canais, um tempo de 40 us fosse dado, estaramos mais que dentro dos nossos limites. Obs.: A escolha correta da freqncia de trabalho do conversor representa a diferena entre o sucesso e o fracasso no uso deste perifrico. Outros bits importantes no registrador ADCON0 so: <CH2:CH0>, <ADON> e <GO/DONE>. O bit <ADON> liga o sistema de converso. Os bits<CHS2:CHS0> so utilizados para selecionar o canal que desejamos trabalhar ADCON0. Veja a tabela abaixo. Tabela Seleo do canal CHS2:CHS0 000 001 010 011 100 101 110 111 Canal selecionado Canal 0 (AN0/RA0) Canal 1 (AN0/RA1) Canal 2 (AN0/RA2) Canal 3 (AN0/RA3) Canal 4 (AN0/RA5) Canal 5 (AN0/RE0) Canal 6 (AN0/RE1) Canal 7 (AN0/RE2)

O bit <GO/DONE> determina o estado do ADC: 0 indica que a converso terminou, 1 converso em andamento. Se o bit for forado a zero lgico, a converso finalizada e os valores presentes em ADRESH e ADRESL no so afetados. Observados as configuraes, vamos a um pequeno segmento de cdigo que o ajudara a compreender melhor o que foi dito at aqui. O mesmo foi montado na linguagem assembly Microchip (Assembler compilador!!!). Este demonstrar como utilizar apenas um nico canal analgico (AN0-RA0), com VREF+ igual a VDD (5VDC) e VREF- igual a VSS (GND). Veja o cdigo a seguir: pic_init: bsf STATUS,RP0 movlw b'00001110' movwf ADCON1 movlw 0x01 movwf TRISA bcf STATUS,RP0

; muda para banco 1 ; faz porta A digtal ; exceto RA0 (AN0) ; valor justificado a esquerda ; ajusta os bits em A como sada ; exceto RA0 ; (AN0 - entrada analgica) ; volta para banco 0

movlw b'01000001' movwf ADCON0

; liga ADC canal 0 ; fosc/8

Esta primeira parte do cdigo deve ser inserida no inicio do seu programa, no ponto de configurao do PIC. Veja que o registrador ADCON1 setado de acordo com o indicado na segunda tabela apresentada, para os bits PCFG3:PCFG0. Apenas RA0 utilizado como entrada analgica. O bit ADFM setado de acordo com a terceira tabela (justificao esquerda). O registrador TRISA tambm configurado conforme descrito: apenas RA0 entrada, e o restante dos bits ser utilizado como sada. importante notar que estes registradores encontram-se no banco 1, e assim necessrio fazer a troca de bancos antes de qualquer tentativa de acessar os registradores descritos. No segmento de cdigo demonstrado o registro ADCON0 carregado com o valor binrio 01000001. Isso nos d a seguinte configurao, conforme tabela abaixo: Tabela Configurao no registrador ADCON0 Bit 7 6 5 4 3 2 1 0 Nome do Bit ADCS1 Freqncia do conversor ADCS0 Freqncia do conversor CHS2 Canal selecionado CHS1 Canal selecionado CHS0 Canal selecionado GO/DONE Estado do ADC No utilizado ADON Liga conversor analgico Valor inserido 0 1 0 0 0 0 0 1

A leitura do canal seria feita ento, da seguinte maneira:

loop: bsf ADCON0,2 espera_ad: btfsc ADCON0,2 goto espera_ad movf ADRESH,W call _40us goto loop

; colhe dado do canal analgico ; ; ; ; ; ; testa para ver se dado pronto dado ainda no pronto continua teste carrega valor da converso em "W" temporiza 40 us faz eternamente

Neste segmento de cdigo, quando a converso finalizada, o valor de ADRESH inserido em W. Em seguida realizado uma espera e uma nova leitura realizada. O comando goto loop pode ser retirado e no lugar deste inserido as rotinas de converso do valor obtido. Neste caso a temporizao poder ser retirada tambm, dependendo do perodo que esta converso ocupar (desde que esta no tenha um tempor de execuo menor ao TADtotal calculado). Voc tambm poder ativar a interrupo para leitura/converso realizada. Para isso necessrio seguir os seguintes passos: - Limpar o bit <ADIF> no registrador PIR1; - Ligar a interrupo do ADC atravs do bit <ADIE> no registrador PIE1; - Ligar as interrupes para perifricos atravs do bit <PEIE> no registrador INTCON; - Ligar as interrupes (gerais) atravs do bit <GIE> no registrador INTCON.

CONCLUSO

As informaes passadas neste artigo apenas preparam a utilizao do conversor ADC do microcontrolador PIC Microchip. Um exemplo de uso pode ser encontrado neste site, no projeto Voltmetro PIC. Bom estudo e at a prxima.