Escolar Documentos
Profissional Documentos
Cultura Documentos
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
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