Você está na página 1de 10

128

Conectando o PIC

7
Conversor Analgico-Digital Interno
Introduo
Como j dissemos mais de uma vez, vivemos em um mundo analgico. Sendo assim, por mais digital que seja nosso sistema, quase impossvel no trabalharmos com variveis analgicas. Seja o valor de uma tenso, ou de uma temperatura, seja uma posio ou o sinal de um sensor qualquer. Conforme aumenta a complexibilidade do sistema, maior ser o nmero de entradas analgicas que devem ser monitoradas pelo microcontrolador. Mas como isso ser possvel? Uma vez que o PIC s pode processar dados digitais, ser necessrio converter qualquer sinal analgico para valores digitais. Este o assunto que trataremos neste captulo.

Teoria
Para comearmos a entender melhor a teoria da converso dos sinais analgicos em dados digitais, nada melhor que partirmos para um exemplo prtico: os sensores de temperatura normalmente fornecem uma informao analgica (como, por exemplo, uma tenso) proporcional temperatura e, portanto, para que esta possa ser analisada pelo microcontrolador, necessitamos de um conversor analgico digital (CAD ou simplesmente A/D). O menor passo, ou resoluo, de um CAD dado diretamente pelo seu nmero de bits e pode ser expresso por:

-1

Em que: Vref uma tenso de referncia e n o nmero de bits do conversor. Cada um dos n bits que compem a informao digital representa uma parcela do valor da tenso analgica a ser convertida, de forma que a soma de todas as contribuies de cada um dos n bits forma a tenso de entrada do conversor A/D. Assim, a parcela de tenso proporcional ao bit m do conversor A/D dada por:

-1

Conectando o PIC 16F877A - Recursos Avanados

129
Em que: bm o valor do bit m, ou seja, 0 ou 1. Veja, que apenas os bits em 1 representam algum valor em termos de tenso analgica, uma vez que os bits em zero no contribuem para formar a tenso de entrada. Quanto maior a quantidade de bits, maior a resoluo e a preciso do conversor. O PIC 16F877A possui um conversor interno de 10 bits, mas existem outros modelos com 8 ou 12 bits. Vamos supor que o CAD para o nosso exemplo da temperatura seja de quatro bits, a tenso de referncia seja de 5V e o valor da converso em binrio seja 1101. A tenso de entrada, ento, :

4,3333 V -1

Este valor de tenso equivalente a uma dada temperatura, e por isso o valor convertido (1101) equivalente mesma temperatura. Obviamente, para o exemplo da temperatura, assim como para a maioria dos demais casos prticos, no ser necessria somente a converso. Teremos tambm que nos preocupar com uma equao ou tabela para a adequao dos valores convertidos para a unidade desejada. Muitas vezes essa equao ou tabela ser a responsvel tambm pela linearizao. Assim sendo, temos ento duas converses a serem feitas: a primeira de sinal analgico para valor digital, e a segunda de valor digital para a unidade realmente desejada, como por exemplo C.

4,3333 V

Existem diversas maneiras de implementarmos um conversor analgico/digital. Porm, como este livro trata do microcontrolador PIC16F877A, faremos um estudo aprofundado do sistema de converso adotado pelo mesmo, que denominado conversor de aproximao sucessiva. Nesse tipo de conversor, a converso realizada do bit mais significativo para o menos significativo. Uma vez que o bit mais significativo (Msb) representa metade da tenso de referncia, conhecer o estado deste bit (0 ou 1) j significa saber se a tenso de entrada maior ou menor que a metade da referncia. Conhecido o bit mais significativo, passa-se ao prximo bit, que representa a metade da metade da tenso de referncia, ou seja, 1/4 da tenso de referncia. A converso segue assim at o bit menos significativo (Lsb).

Conectando o PIC 16F877A - Recursos Avanados

130
Vamos supor um CAD de quatro bits com tenso de referncia de 5V: Bit 4 (Msb) 3 2 1 (Lsb) Tenso 2,6666 V 1,3333 V 0,6666 V 0,3333 V

Suponha que a tenso de entrada seja de 3,5V. Neste caso, o procedimento de converso seria assim: 1. Testa-se o bit mais significativo, ou seja, a tenso de entrada maior do que 2,6666V? Sim, portanto, este bit vale 1. 2. Testa-se o prximo bit, ou seja, a tenso de entrada maior do que 4,00V (2,666V + 1,3333V)? No, portanto, este bit 0. 3. Testa-se o prximo bit, ou seja, a tenso de entrada maior do que 3.333V (2,6666V + 0.6666V)? Sim, portanto, este bit 1. 4. Finalmente testa-se o bit menos significativo, ou seja, a tenso de entrada maior do que 3,6666V (2,6666V + 0.6666V + 0,3333V)? No, portanto, este bit 0 e o valor final da converso em binrio 1010. Essa forma de converso muito rpida, pois veja que para um conversor de n bits so necessrias " interaes, independente do valor a ser convertido. Em termos de hardware (diagrama de blocos), esse tipo de conversor pode ser representado por:

Recursos do PIC
Vamos agora estudar os modos de operao do conversor interno do PIC 16F877A, conhecendo seus recursos e os registradores de configurao e trabalho. A primeira coisa que precisamos saber so as caractersticas desse conversor: Conversor interno de 10 bits, dando um total de 1024 pontos; At oito canais de converso, com diversas configuraes entre analgicos e digitais; Quatro tipos de referncia: VDD (interna), Vss (interna), VREF+ (externa) e VREF(externa);

Conectando o PIC 16F877A - Recursos Avanados

131
Freqncia de converso baseada no clock da mquina ou em RC dedicado, possibilitando o funcionamento em modo SLEEP; Trs ajustes de freqncia (divisores) para o clock de mquina; Dois tipos de justificao para o resultado da converso: direita e esquerda; Um interrupo para trmino da converso. Bem, agora que j sabemos o resumo dos recursos analgicos do nosso PIC, aprenderemos a utiliz-los. O primeiro conceito que deve ser entendido que apesar do microcontrolador possuir diversos canais analgicos, internamente s existe um sistema de converso. Por isso, somente um canal pode ser utilizado de cada vez. Vamos comear, ento, aprendendo como configurar os canais corretamente. Inicialmente devemos definir, conforme as necessidades do nosso projeto, qual a quantidade de canais analgicos que sero necessrios. Como este PIC possui at oito canais analgicos, podemos utilizar todos ou s parte deles, deixando os demais pinos configurados como l/Os digitais. O problema que, infelizmente, no possvel configurar individualmente cada canal, conforme nosso desejo. Existem valores padres de configurao que devem ser respeitados. Para configurarmos os canais analgicos precisamos alterar o valor dos bits existentes em ADCON1<PCFG3:PCFG0>: PCFG3: PCFG0 0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 1111 AN7 RE2 A A D D D D D D A D D D D D D D AN6 RA1 A A D D D D D D A D D D D D D D AN5 RA0 A A D D D D D D A A A A D D D D AN4 RA5 A A A A D D. D D A A A A A D D D AN3 RA3 A VREF+ A VREF+ A VREF.+ D D VREF+ A VREF+ VREF+ VREF+ VREF+ D VREF+ AN2 RA2 A A A A D D D D VREFA A VREFVREFVREFD VREFAN1 RA1 A A A A A A D D A A A A A A D D AN0 VREF+ RA0 A A A A A A D D A A A A A A A A VDD RA3 VDD RA3 VDD RA3 VDD VDD RA3 VDD RA3 RA3 RA3 RA3 VDD RA3 VSS VSS VSS VSS VSS VSS VSS VSS RA2 VSS VSS RA2 RA2 RA2 VSS RA2 VREFAnal. 8 7 5 4 3 2 0 0 6 6 5 4 3 2 1 1 Ext. 0 1 0 1 0 1 0 0 2 0 1 2 2 2 0 2 Canais Ref.

Conectando o PIC 16F877A - Recursos Avanados

132

Alm da configurao dos pinos analgicos, conforme tabela apresentada, no pode ser esquecido de configurar corretamente os registradores TRISA e TRISE, de forma que os canais utilizados estejam ajustados para entrada (TRIS = 1). Caso um canal analgico esteja como sada, o sistema de converso continuar funcionando, mas os valores convertidos sero equivalentes aos nveis alto (1 = V DD) e baixo (0 = VSS). Outro ponto importante a ser observado nesta tabela diz respeito s tenses de referncia. A converso sempre ser feita comparando-se a tenso no pino em relao as tenses de referncia VREF+ e VREF.. Desta forma, quando a tenso de entrada for igual tenso VREF+, a converso resultar no valor mximo (1024) e quando a tenso de entrada for igual VREF ento o resultado da converso ser zero (0). Como j foi dito anteriormente, podemos ter quatro tipos de referncias, sendo duas internas (VDD e VDD) , e duas externas, ligadas aos pinos RA2 (VREF.) e RA3 (VREF+). Nossa entrada analgica poder operar, por exemplo, com uma tenso varivel de 0 a 5V. Para isso podemos utilizar as referncias internas como VREF+ = VDD(5V) e VREF. = VSS(0V). Em uma outra aplicao, nosso sensor pode variar de 1 a 4V. Para que no percamos resoluo do A/D, podemos trabalhar com tenses de referncia externas: VREF+ (RA3) = 4V e V REF. (RA2) = 1V. O importante respeitarmos os limites eltricos impostos a essas referncias:

Referncia

Mnimo (V)

Mximo (V)

VREF+ VREF(VREF+ -VREF-)

VDD -2,5 VSS -0,3 2,0

VDD + 0,3 VREF+ -2,0 VDD + 0,3

O prximo ponto a ser aprendido diz respeito velocidade e, conseqentemente, aos tempos, de amostragem para a converso A/D. Vamos comear entendendo como o sistema de converso funciona internamente. Para evitarmos problemas de rudo e variaes da entrada analgica durante o processo de inverso (no podemos esquecer que nada absolutamente instantneo), o PIC utiliza internamente -n processo denominado Sample and Hold (S/H). Esse nome poderia ser traduzido como amostra e congela. Mas como isso feito? Muito simples. Internamente o PIC possui um capacitar (120pF) que ligado ao canal analgico em uso. Sendo assim, ele fica carregado com a tenso existente no canal amostra). Quando o processo de converso iniciado, este capacitar desligado, automaticamente, do canal analgico, mantendo a tenso sobre o capacitar constante (congela). Por isso, durante todo o processo de converso, a tenso utilizada a existente no capacitar e no mais a do canal analgico. Mesmo que a tenso externa no canal varie, a converso no ser afetada. Agora que j sabemos como o sistema funciona no mbito do hardware, vamos conhecer quais so os tempos a serem respeitados de forma a no gerarmos erros durante a converso. Para ilustrar o processo, mostraremos um grfico resumido dos tempos de converso:

Conectando o PIC 16F877A - Recursos Avanados

133

Conforme o grfico mostrado, podemos agora analisar cada um dos tempos envolvidos no sistema de converso:

Cdigo A B C D E

Nome
Adequao do capacitor Desligamento do capacitor

Converso
Religamento do capacitor Nova adequao do capacitor

Adequao do capacitor
Internamente o capacitor nunca fica desligado, exceto durante a converso. Ele sempre encontra-se ligado ao sistema de entradas analgicas. Mas imaginemos que no momento o canal ativo esteja ligado ao GND. Desta forma o capacitor estar totalmente descarregado. No momento seguinte desejamos medir uma outra entrada analgica (outro canal) e por isso o sistema ser chaveado internamente (veremos como isso possvel mais frente). Caso o outro canal esteja com uma tenso de 5V, o capacitor interno ter que ser completamente carregado antes que possamos comear a efetuar a converso. Obviamente essa carga no ser instantnea. Para evitar problemas, sugerimos que o tempo padro deixado para garantir a carga do capacitor seja de pelo menos 40s. Obviamente, este um tempo que garante a pior condio. Na verdade, o tempo de adequao pode ser bem menor que isso, chegando no mnimo a 10s. Essa variao depende basicamente da diferena de tenso entre a entrada e o capacitor, da temperatura e da impedncia de entrada. Essa impedncia deve ser de no mnimo 50Q e no mximo 10 k. Quanto menor a impedncia, menor tambm o tempo de adequao. Para o clculo exato desse tempo, consulte o data sheet do PIC.

Desligamento do capacitor
Depois de iniciada a converso, o capacitor ser desligado internamente. Isso feito em aproximadamente 100ns, sendo um valor praticamente desprezvel.

Converso
O tempo de converso j no to desprezvel assim. Para entendermos o tempo de converso precisaremos entender melhor sobre a freqncia de trabalho do A/D. Para que o sistema de converso

Conectando o PIC 16F877A - Recursos Avanados

134
funcione corretamente, um clock deve ser aplicado a ele. Cada perodo deste clock ser chamado de TAD e equivalente ao tempo de converso de 1 bit. Como nosso conversor de 10 bits, o tempo total da converso ser de 10 TAD + 2 TAD. Os dois perodos adicionais so para a adequao e o incio da inverso. O valor de TAD depender da freqncia empregada, e para isso o sistema possui um RC interno ou divisores para o oscilador da prpria mquina, mas veremos isso mais adiante. Assim sendo, o tempo de converso 12 TAD.

Reliqamento do capacitor
Ao final da converso, o valor dos registradores de resultado sero atualizados, o flag da interrupo ser marcado e o capacitor ser religado. O tempo mnimo recomendado para que tudo isso acontea 2 TAD.

Nova adequao do capacitor


Durante o tempo da converso, o valor da tenso no capacitor interno no foi alterado; porm, ao termino da converso ele ser religado entrada analgica, que pode ter sofrido uma variao brusca (como no exemplo), seja por imposio do prprio sistema, seja por uma troca de canal. Por isso, entre uma converso e outra necessrio uma nova adequao da carga do capacitor. Recomendamos novamente um tempo de 40s. As observaes do item "Adequao do capacitor" tambm so vlidas aqui para a diminuio deste tempo. Agora que j entendemos um pouco mais as caractersticas e conceitos do A/D, vejamos como realmente devemos proceder para operar com ele. Depois de termos configurado quais sero os canais utilizados (ADCON1 e TRIS), teremos que configurar tambm a freqncia de trabalho. Para isso devemos ajustar 2 bits em ADCON0<ADCS1:ADCS0>:

ADCS1 ADCS0 0 0 0 1 1 0 1 1

Freqncia Fosc /2 Fosc /8 Fosc /32 RC Interno

Para os trs primeiros ajustes, a freqncia de trabalho do A/D ser a freqncia do oscilador externo do PIC (FOSC) dividida por uma das opes (2, 8 ou 32). Desta forma, obteremos o valor de TAD. 3or exemplo, para um cristal externo de 4MHz e uma opo de FOSC / 8 teremos: TAD = 8/4.000.000 TAD = 0,000002s ou 2s Neste caso, nosso TAD de 2s. O importante na escolha do cristal e da opo de diviso da freqncia respeitar os valores mnimos de T AD aceitos pelo PIC. No caso do PIC 16F877A (Standard) este valor deve ser maior que 1,6s. Valores muito altos para o TAD tambm no so muito aconselhveis, e por isso recomendamos que no seja ultrapassado o limite de 20s.

Conectando o PIC 16F877A - Recursos Avanados

135

Continuando com o exemplo dado, chequemos ento a freqncia mxima de amostragem para a comutao entre canais:

Desconsiderando-se o tempo de desligamento (desprezvel), teramos um tempo total para a converso de 68s (40 + 24 + 4). Sendo assim, nossa freqncia de amostragem mxima seria de 14,7 kHz. A ltima opo de escolha para o clock do A/D refere-se a um RC interno dedicado para essa finalidade. Neste caso o valor nominal para TAD de 4s (pode variar de 2 a 6s). Esta opo pode ser utilizada para que o sistema de converso continue funcionando mesmo em modo SLEEP. Na verdade, este RC pode ser usado a qualquer momento, mas recomendado que para sistemas que operem com freqncias superiores a 4 MHz este oscilador seja usado somente no modo SLEEP. A ltima configurao necessria quanto s caractersticas de funcionamento do A/D diz respeito forma como o resultado ser armazenado nos registradores especficos. Como a converso gera um resultado de 10 bits, sero necessrios dois registradores para armazenar este valor. Para isso existem os registradores ADRESH e ADRESL, equivalentes parte alta e parte baixa do resultado. Acontece que a soma desses dois registradores resultam em 16 bits. Por isso, o resultado pode ser armazenado neles justificando pela esquerda ou direita. O bit de configurao ADCON1<ADFM> ajusta esta orientao: ADFM
1

Freqncia
Justificado pela direita. Utiliza todos os bits de ADRESL<7:0> e somente 2 bits de ADRESH<1:0> Justificado pela esquerdta. Utiliza todos os bits de ADRESL<7:0> e somente 2 bits de ADRESH<1:0>

Essa justificao vlida quando queremos, por exemplo, trabalhar com somente 8 bits do conversor. Neste caso, podemos justificar pela esquerda e acessarmos somente a parte mais significativa atravs de ADRESH. Com isso estaremos criando um filtro, onde jogamos fora os 2 bits menos significativos, que se encontram em ADRESL. Agora que os ajustes da configurao j foram feitos, podemos finalmente efetuar uma converso. Comecemos ligando o sistema de converso. Isso feito atravs de ADCON0<ADON>:
ADON Estado do A/D

0 1

Sistema desligado Sistema ligado

Conectando o PIC 16F877A - Recursos Avanados

136
O sistema pode ser mantido desligado sempre que no estiver sendo utilizado para reduo do consumo. A prxima ao a escolha do canal a ser utilizado, entre os oito disponveis. Essa escolha ser feita atravs de ADCON0<CHS2:CHS0>: CHS2 : CHS0 000 001 010 011 Canal Selecionado Canal 0 (RA0/AN0) Canal 1 (RA1/AN1) Canal 2 (RA2/AN2) Canal 3 (RA3/AN3) CHS2 : CHS0 100 101 110 111 Canal Selecionado Canal 4 (RA5/AN4) Canal 5 (RE0/AN5) Canal 6 (RE1/AN6) Canal 7 (RE2/AN7)

O ltimo passo iniciar a converso por meio do bit ADCONO<GO/DONE>: GO/DONE 1 0 Inicia a converso Indica que a converso terminou. Caso seja forado manualmente, cancela a converso atual. Estado do A/D

Depois de iniciada a converso, todo o processo ser executado. O capacitar interno desconectado. A converso efetuada (12TAD) e logo em seguida (no prximo ciclo de mquina), os registradores ADRESH e ADRESL so atualizados. Neste momento, o bit ADCON0<GO/DONE> volta =.-1omaticamente para 0 (zero) e poder ser monitorado pelo programa para checar o trmino da converso. Alm disso, o flag da interrupo PIR1<ADIF> tambm ativado. Caso a converso seja cortada manualmente atravs de ADCON0<GO/DONE>=0, os registradores ADRESH e ADRESL no so alterados. Para fazer uso da interrupo de A/D, no se esquea de efetuar os seguintes ajustes antes de iniciar a converso: Limpar o flag PIR1<ADIF>=0; Ligar a interrupo de A/D em PIE1 <ADIE>=1; Ligar as interrupes de perifricos em INTCON<PEIE>=1; Ligar a chave geral das interrupes em INTCON<GIE>=1; Resumo dos registradores associados ao A/D
Endereo 0Bh... 0ch 8Ch 1Eh 9Eh 1Fh 9Fh 85h 89h Nome INTCON PIR1 PIE1 ADRESH ADRESL ACON0 ADCON1 TRISA TRISE Bit 7 GIE PSPIF PSPIE Bit 6 PEIE ADIF ADIE Bit 5 T0IE RCIF Bit 4 INTE TXIF Bit 3 RBIE SSPIF Bit 2 T0IF CCP1IF Bit 1 INTF TMR2IF Bit 0 RBIF TMR1IF

RCIE TXIE PSPIE CCPIE TMR2IE TMR1IE Resultado da converso (Parte alta) Resultado da converso (Parte baixa) ADCS1 ADCS0 CHS2 CHS1 CHS0 GO/DONE ADON ADFM PCFG3 PCFG2 PCFG1 PCFG0 Configurao do PORTA como Entrada(1) ou Sada(0) IBF OBF IBOV PSP Configurao do PORTE como Entrada(1) ou Sada(0) MODE No usado para essa finalidade. Para obter mais informaes, consulte apndice A

Conectando o PIC 16F877A - Recursos Avanados

137 Lgica do exemplo


Neste exemplo efetuaremos a leitura da tenso regulada pelo potencimetro P2 da placa proposta (McLab2). A converso feita diretamente no loop principal, sem a utilizao de nenhuma interrupo, nem para checar o trmino da converso, nem para definir uma freqncia de amostragem. Desta forma, a converso ser feita uma aps a outra, na freqncia definida pelo perodo do loop principal. Uma vez terminada a converso, descartamos os 2 bits menos significativos e consideramos somente o resultado armazenado em ADRESH. Com isso j estaremos executando uma espcie de filtragem, evitando assim que o valor final fique oscilando. Aplicaremos ento uma regra de trs bsica para converter o valor do A/D para a unidade desejada Volts. Conseguiremos isso considerando que, quando o A/D resultar em 0 (zero), a entrada possui 0,0V, e quando o A/D resultar em 255 a entrada equivalente a 5,0V. Esta conta tambm diminuir i resoluo, aumentando ainda mais a estabilidade. Por ltimo escreveremos o valor, j em Volts, no LCD.

Esquema eltrico

Conectando o PIC 16F877A - Recursos Avanados

Você também pode gostar