You are on page 1of 13

 

 
 
Escola Secundária Serafim Leite 
 
Disciplina: SDAC 
 
 
 
 
 
 
 
 
 
Conversor 
A/D  2008/2009
 
 
 
 
 
 
 
 
 
 
 
 
  Professora Ana Reis 
Professor Marco Vasconcelos 
Microcontrolador PIC16F877A 
Índice 
1. Introdução Teórica: ........................................................................................................................................ 3 
1.2 Registos ADRESH e ADRESL ...................................................................................................................... 3 
2. Necessidades de Aquisição do módulo A/D .................................................................................................. 4 
2.1 Período de Relógio do ADC ...................................................................................................................... 4 
3. Registo ADCON0............................................................................................................................................. 5 
4. Registo ADCON1............................................................................................................................................. 6 
5. Interrupções no Conversões A/D ................................................................................................................... 8 
6. Conversor A/D no Modo SLEEP ...................................................................................................................... 9 
7. Efeitos de um Reset ....................................................................................................................................... 9 
8. Kit EasyPic4 .................................................................................................................................................. 11 
9. Bibliografia ................................................................................................................................................... 13 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
Página 2 de 13 
 
Microcontrolador PIC16F877A 
1. Introdução Teórica: 
À  parte  de  um  grande  número  de  linhas  de  entradas  I/O  digitais,  o  PIC16F877A  contém  8  entradas 
analógicas. Permite que o Microcontrolador reconhecer, não só se um pino está na lógica 0 ou de 1 (0V ou 
5V respectivamente), mas para medir precisamente a sua voltagem e converter num valor numérico, isto 
é, formato digital. Todo este procedimento acontece no Módulo do Conversor Analógico‐Digital que tem 
as seguintes características: 
• O conversor gera um resultado binário de 10 bits usando um método de aproximações sucessivas e 
guarda os resultados da conversão nos registos do Conversor A/D (ADRESL e ADRESH); 
• O módulo A/D tem a referência de entrada de alta ou baixa voltagem que pode ser seleccionado 
pelo software para umas combinações de VDD, VSS, RA2 e RA3; 
• O  conversor  A/D  tem  uma  única  característica  de  poder  operar  enquanto  o  dispositivo  está  no 
modo Sleep. Para operar no modo Sleep, o relógio do A/D tem de ser derivado através do oscilador 
interno RC do A/D; 
• O  Conversor  A/D  permite  a  conversão  de  um  sinal  de  entrada  analógica  para  uma  representação 
binária de 10 bits desse mesmo sinal; 
• Seleccionando  as  voltagens  de  referência  VREF‐  e  VREF+,  a  mínima  resolução  ou  qualidade  da 
conversão pode ser ajustado para as várias necessidades. 
O módulo A/D tem 4 registos, que são: 
• ADRESH – A/D Result High Register (contém os bits mais significativos do resultado da conversão); 
• ADRESL – A/D Result Low Register (contém os bits menos significativos do resultado da conversão); 
• ADCON0 – A/D Control Register 0 ; 
• ADCON1 – A/D Control Register 1; 
O registo ADCON0, controla a operação do módulo A/D. O registo ADCON1 configura o funcionamento dos 
pinos da porta. Os pinos da porta podem ser configurados com entradas analógicas (RA3 também pode ser 
uma Tensão de referência) ou como I/O digital. 
 

1.2 Registos ADRESH e ADRESL 
Quando se está a converter um valor analógico para um valor digital, o resultado da Conversão A/D de 10 
bits irá ser armazenado nestes dois registos. Para melhor trabalhar com este valor de uma forma mais fácil, 
pode  ser  representado  em  dois  formatos:  justificado  à  esquerda  e  justificado  à  direita.  O  bit  ADFM  do 
registo ADCON1 determina o formato do resultado da conversão. 

 
Figura 1 – Registos ADRESH e ADRESL: Modo de armazenamento 
Página 3 de 13 
 
Microcontrolador PIC16F877A 
A resolução mínima do Conversor A/D é aproximadamente 4,88 mV (5V/1023). 
• ADFM = 1 – Justificado à Direita: 
o Para  se  ter  resultado  dos  8  bits  descartando  os  dois  bits  mais  significativos  do  ADRESH, 
vamos usar o valor da Tensão de Referência, ou seja 5 V / 4 = 1,25V, mantendo o valor da 
resolução do Conversor A/D. Passamos a ter 1024/4 = 256 combinações; 
• ADFM = 0 – Justificado à esquerda: 
o Para  se  ter  resultado  dos  8  bits  descartando  os  dois  bits  menos  significativos  do  ADRESL 
vamos usar o valor da resolução mínima, ou seja 4,88 mV * 4 = 1,952 mV. Passamos a ter 
1024/4 = 256 combinações. 
 

2. Necessidades de Aquisição do módulo A/D 
Para  o  Conversor  A/D  conhecer  sua  precisão,  é  necessário  fornecer  um  certo  tempo  de  atraso  entre  a 
selecção  da  entrada  analógica  e  a  sua  medição.  Este  tempo  é  denominado  por  “Tempo  de  Aquisição”  e 
depende  principalmente  da  impedância  de  entrada.  Existe  uma  equação  que  é  usada  para  calcular  com 
precisão deste tempo, em que no pior dos casos é aproximadamente de 20µs. Depois de seleccionar (ou 
alterar) a entrada analógica e antes de começar a conversão é necessário fornecer no mínimo o tempo de 
atraso de 20µs para permitir que o Conversor A/D tenha máxima precisão de conversão. 
 

2.1 Período de Relógio do ADC 
O período necessário para completar a conversão de um bit é definido como TAD. O necessário TAD tem 
de  ter  pelo  menos  1,6µs.  O  Conversor  A/D  requer  um  mínimo  de  12  TAD  por  cada  conversão  de  10‐bit. 
Porém, desde que a conversão da frequência de relógio e a entrada seja determinada pelo software, um 
dos bits disponíveis de combinação ADCS1 e ADCS0 devem ser seleccionados antes da medição da Tensão 
em algum início da entrada analógica. Estes bits são armazenados no registo ADCON0. 
 
Entrada do Relógio AD (TAD) 
Frequência Máxima do Dispositivo 
Operação  ADCS2:ADCS1:ADCS0 
2 Tosc  000  1,25MHz
4 Tosc  100  2,5 MHz
8 Tosc  001  5 MHz
16 Tosc  101  10 MHz
32 Tosc  010  20 MHz
64 Tosc  110  20 MHz
y A entrada do RC tem um tempo TAD típico de 4µs mas pode estar entre 2‐6µs.
RC  x11  y Quando a frequência do dispositivo é maior que 1 MHz, a entrada RC do Relógio 
do Conversor A/D só é recomendada para a operação Sleep. 
Tabela 1: Período de Relógio do ADC 
 
Qualquer alteração no sistema da frequência do relógio irá ter um efeito na frequência de relógio do ADC, 
o que pode adversamente afectar o resultado da ADC. 
 
 
 
 
 

Página 4 de 13 
 
Microcontrolador PIC16F877A 
3. Registo ADCON0 
 
 
R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 U-0 R/W-0
ADCS1  ADCS0  CHS2  CHS1  CHS0  GO/DONE    ADON 
Bit 7    Bit 6    Bit 5    Bit 4    Bit 3    Bit 2       Bit 1  Bit 0 
R = Bit de Leitura 
W = Bit de Escrita 
0 = bit is clear 
 
 
ADCS1, ADCS0 (Bit 7‐6): Bits de selecção do relógio do Conversor A/D. Selecciona a frequência de relógio 
usada para a sincronização interna do conversor A/D. Também afecta a duração de conversão. 
 
ADCON1  ADCON0  Conversão do 
<ADCS2>  <ADCS1:ADCS2>  Relógio 
0  00  Fosc/2 
0  01  Fosc/8 
0  10  Fosc/32 
0  11  FRC  1
1  00  Fosc/4 
1  01  Fosc/16 
1  10  Fosc/64 
1  11  FRC 
Tabela 2: Bits de Selecção do Conversor A/D 
 
 
CHS2‐CHS0 (Bit5‐3): Bits de selecção do canal analógico. Selecciona um pino ou um canal analógico para 
conversão, ou seja, medição da voltagem. 
 
CHS2  CHS1  CHS0  Canal  Pin0 
0  0  0  0  RA0/AN0 
0  0  1  1  RA1/AN1 
0  1  0  2  RA2/AN2 
0  1  1  3  RA3/AN3 
1  0  0  4  RA5/AN4 
1  0  1  5  RE0/AN5 
1  1  0  6  RE1/AN6 
1  1  1  7  RE2/AN7 
Tabela 3: Bits de estado do Canal Analógico 
 
                                                       
1
 O Relógio é gerado pelo oscilador interno pelo qual está construído no conversor. 
Página 5 de 13 
 
Microcontrolador PIC16F877A 
 
GO/DONE (Bit 2): Bit de estado da Conversão A/D. Determina o estado corrente da conversão: 
• Quando o ADON=1; 
o 1 – Conversão A/D em progresso; 
o 0  –  Conversão  A/D  está  completa  ou  a  Conversão  A/D  não  esta  em  progresso.  Muda 
automaticamente quando a conversão A/D é completa. 
 
 
Unimplemented (Bit 1): lê como ‘0’. 
 
 
ADON (Bit 0): Bit on A/D. Permite conversão A/D. 
• 1 – Conversão A/D é activada; 
• 0 – Conversão A/D é desactivada. 
 
 

4. Registo ADCON1 
 
R/W-0 R/W-0 U-0 U-0 R/W-0 R/W-0 U-0 R/W-0
ADFM  ADCS2      PCFG3  PCFG2  PCFG1  PCFG0 
Bit 7    Bit 6    Bit 5    Bit 4    Bit 3    Bit 2       Bit 1  Bit 0 
R = Bit de Leitura 
W = Bit de Escrita 
0 = bit is clear 
ADFM (Bit 7): formato do bit de selecção do resultado da A/D. 
• 1 – Resultado da Conversão do Justificado à Direita. Os 6 bits mais significativos do ADRESH não são 
usados; 
• 2 – Resultado da Conversão do Justificado à Esquerda. Os 6 bits menos significativos do ADRESL não 
são usados. 
 
 
ADCS2 (Bit 6): bit de selecção do Relógio de Conversão A/D. 
 
ADCON1  ADCON0 
Relógio de Conversão 
<ADCS2>  <ADCS1:ADCS0) 
0  00  Fosc/2 
0  01  Fosc/8 
0  10  Fosc/32 
0  11  Frc (relógio derivado pelo oscilador RC interno do A/D)  
1  00  Fosc/4 
1  01  Fosc/16 
1  10  Fosc/64 
1  11  Frc (relógio derivado pelo oscilador RC interno do A/D)  
Tabela 4: Bits de selecção do Relógio do Conversor A/D 

Página 6 de 13 
 
Microcontrolador PIC16F877A 
 
 
Unimplemented (Bit 5‐4): lê como ‘0’. 
 
 
PCFG3:PCFG0 (Bit 3‐0): Porta de Configuração do Controlo de bits da A/D. 
 

 
Tabela 5: Bits de controlo da configuração da porta A/D. 
 
Os Registos ADRESH:ADRESL contém 10 bits de resolução da Conversão A/D. Quando o Conversor A/D é 
finalizada,  o  resultado  é  armazenado  no  registo  par,  o  bit  GO/DONE  (ADCON0<2>)  é  posto 
automaticamente a zero e a flag de interrupção do conversor A/D do bit ADIF é activo.  
Depois de o módulo A/D ter sido configurado como desejámos, o canal seleccionado tem de ser adquirido 
antes do início da conversão. Os canais da entrada analógica têm de ter o respectivo bit TRIS seleccionado 
como entradas. 
Para efectuar uma Conversão A/D, segue os seguintes passos: 
1. Configurar o módulo A/D: 
a. Configurar os pinos/tensão de referência e I/O Digital (ADCON1); 
b. Seleccionar o canal de entrada do A/D (ADCON0); 
c. Seleccionar o Relógio do Conversor A/D (ADCON0); 
d. Activar o Módulo A/D (ADCON0); 
2. Configuras as rotinas de Interrupção do A/D (se assim desejar): 
a. Desactivar o bit ADIF; 
b. Activa o bit ADIE; 
c. Activa o bit PEIE; 
d. Activa o bit GIE. 

Página 7 de 13 
 
Microcontrolador PIC16F877A 
3. Esperar pelo Tempo de Aquisição. 
4. Início da Conversão: 
a. Activar o bit GO/DONE (ADCON0). 
5. Esperar que o A/D finalize a conversão, ou: 
a. Forçar que o bit GO/DONE esteja desactivado (interrupções), ou; 
b. Esperar pela interrupção do A/D. 
6. Ler o registo par do Resultado do A/D (ADRESH:ADRESL), é necessário desactivar o bit ADIF. 
7. Para  uma  próxima  conversão,  volte  ao  passo  1  ou  passo  2.  O  tempo  de  Conversão  A/D  por  bit  é 
definido como TAD. 
 

 
 
Figura 2: Diagrama de Blocos A/D 
 
 

5. Interrupções no Conversões A/D 
Quando  uma  conversão  A/D  termina,  além  de  o  resultado  da  conversão  ser  armazenado  nos  registos 
ADRESH:ADRESL  e  do  bit  GO/DONE  passar  para  o  zero,  a  flag  de  sinalização  de  fim  da  conversão  A/D  é 
colocado  a  1,  o  bit  ADIF  (PIR1<6>).  Para  que  a  interrupção  do  módulo  conversor  A/D  seja  tratada,  é 
necessário as seguintes configurações: 
a. Desactivar o bit ADIF; 
b. Activa o bit ADIE; 
c. Activa o bit PEIE; 
d. Activa o bit GIE 

Página 8 de 13 
 
Microcontrolador PIC16F877A 

   
Figura 3: Lógica de Interrupção (GIE=1, PEIE=1, ADIE=1 e ADIF=0, assim que finalizar a conversão o bit GO/DONE 
passa a 0 e o ADIF a 1, provocando uma interrupção) 
 
 
 

6. Conversor A/D no Modo SLEEP 
 
O  módulo  SLEEP  do  conversor  A/D  do  PIC16F877A  pode  funcionar  no  modo  sleep,  desde  que  o  relógio 
utilizado na conversão A/D esteja seleccionado no  Frc (ADCS1:ADCS0=11).  
No modo SLEEP, o conversor opera nas funções mínimas o que pode eliminar todo o ruído digital durante a 
conversão. Quando a conversor for finalizada o bit GO/DONE vai ser desactivado e o resultado armazenado 
no  ADRESH:ADRESL,  e  se  as  interrupções  estiverem  activadas  a  flag  ADIF  fica  activa  e  acorda  o 
Microcontrolador. 
Se  durante  a  conversão  o  Microcontrolador  for  colocado  no  modo  SLEEP  com  qualquer  outro  tipo  de 
oscilador  seleccionado  que  não  seja  o  circuito  RC,  a  conversão  corrente  irá  ser  perdida  e  o  módulo  do 
conversor desligado, embora o bit ADON seja mantido activo. 
 
 

7. Efeitos de um Reset 
Quando  ocorre  um  reset,  o  módulo  conversor  A/D é  desligado,  de  maneira  que  se  estiver  em  andamento  alguma 
conversão, esta será cancelada. 
O  valor  dos  registos  ADRESH:ADRESL  não  são  modificados  quando  fazemos  o  Power‐on  do  Reset.  Os  registos 
ADRESH:ADRESL irão conter dados desconhecidos depois de um Power‐on do Reset. 
 

Página 9 de 13 
 
Microcontrolador PIC16F877A 

 
Tabela 6: Registos associados ao Conversor A/D. 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Página 10 de 13 
 
Microcontrolador PIC16F877A 
8. Kit EasyPic4 
O  Kit  tem  dois  potenciómetros  que  trabalham  com  o  Conversor  Analógico  para  Digital  (ADC).  Ambas  as 
saídas dos potenciómetros têm uma gama de 0V a 5V. Dois sinais analógicos podem ser ligados aos dois 
pinos de entradas analógicas diferentes ao mesmo tempo. O grupo de Jumper J15 permite a conexão com 
o potenciómetro P1 e o conjunto de pinos envolvidos são: RA0, RA1, RA2, RA3 e RA4. O grupo de Jumpers 
J16 permite a conexão com o potenciómetro P2 e o conjunto de pinos envolvidos são: RA1, RA2, RA3, RA4 
e RA5. 

 
 Figura 4: Entradas do Conversor ADC 
 
 
Para medir o sinal analógico sem interferências, ponha a posição do interruptor do SW1 para OFF. Isto irá 
desactivar a conexão usada pelo pino PORTA usado para a resistência de pull‐up/down. 
Aplicações da Conversão A‐D são várias. O Microcontrolador pega na forma do sinal analógico do seu pino 
de  entrada  e  converte  para  um  valor  Digital.  Basicamente,  podemos  medir  qualquer  sinal  analógico  que 
esteja na gama aceitável pela PIC. A gama é de 0V a 5V. 

Página 11 de 13 
 
Microcontrolador PIC16F877A 

As  resistências  de  Pull‐


up/down  da  entrada 
analógica  PORTA  têm 
de  ser  desactivadas 
através do SW1

Potenciómetro  P1  está 


ligado  ao  RA2  e  o 
Potenciómetro  p2  está 
ligado ao RA3.

 
Figura 5: Esquemático das entradas do Conversor ADC 
 
NOTA: Os jumpers J15 e J16 não devem seleccionar o mesmo pino, têm de ser diferentes. 
 
 
 
 
 
 
 
 
 
 
 

Página 12 de 13 
 
Microcontrolador PIC16F877A 
9. Bibliografia 
 
[1] Zanco, Wagner da Silva, “Micocontroladores PIC: Técnicas de Software e Hardware para Projectos de 
Circuitos Electrónicos: Com Base no PIC16F877A”, 2006, Editora Érical Ltda. 
 
[2] DATASHEET Microchip PIC16F87XA 
 
[3] www.microchip.com 

Página 13 de 13