Você está na página 1de 26

MICROPROCESSADORES

Fernando Esquírio Torres


Programação de
microcontroladores V
Objetivos de aprendizagem
Ao final deste texto, você deve apresentar os seguintes aprendizados:

„„ Reconhecer parâmetros de conversores analógico-digitais (A/D).


„„ Analisar o conversor A/D de microcontroladores.
„„ Comparar aplicações de conversores A/D de microcontroladores.

Introdução
Sinais analógicos possuem valores contínuos de amplitude em função do
tempo, ou seja, a amplitude destes sinais pode assumir valores infinitos
em um instante de tempo, como observamos na Figura 1a. Esses são os
sinais presentes na natureza, como temperatura, pressão, som, umidade,
aceleração da gravidade, entre outros. Já os sinais digitais possuem ní-
veis discretos de valores para sua amplitude, ou seja, eles têm valores
bem definidos para determinados instantes de tempo, como vemos na
Figura 1b. Esses sinais estão presentes em dispositivos digitais, como
computadores, microcontroladores, TV, relógios digitais, celulares etc.
Sinais analógicos devem ser quantizados para se tornarem digitais e,
então, serem processados por dispositivos digitais (WEBER, 2012).
2 Programação de microcontroladores V

(a) Sinal analógico (b) Sinal digital


1
111
0.8
0.6 110

0.4 101

0.2
Amplitude

100

Amplitude
0
011
-0.2
-0.4 010

-0.6 001
-0.8
000
-1
-3 -2 -1 0 1 2 3 0 5 10 15
Tempo
Tempo

Figura 1. (a) Sinal analógico e (b) sinal digital.

Como já mencionado, a maioria dos sinais de interesse prático são


analógicos e provenientes da natureza. Outros exemplos seriam o bati-
mento cardíaco, a atividade cerebral, a quantidade de oxigênio no sangue,
a intensidade luminosa e a posição. Sendo assim, é necessário condicionar
o sinal analógico em um sinal digital representado de forma binária (0 e 1).
Essa tarefa é realizada pelo circuito de conversão A/D (TOKHEIM, 2012).
Neste capítulo, você reconhecerá parâmetros e conceitos relaciona-
dos à conversão A/D e aprenderá a analisar as características do con-
versor A/D do microcontrolador do PIC18F. Por fim, você conhecerá
algumas aplicações para ler grandezas de dispositivos analógicos em
microcontroladores.

Parâmetros e conceitos de conversores A/D


O conversor A/D é um circuito eletrônico capaz de produzir um sinal na
representação digital (discreta) de uma grandeza analógica (contínua) para
que estes sinais possam ser interpretados pelo microcontrolador. O conversor
A/D é responsável por fazer a interface entre dispositivos digitais (microcon-
troladores, DSPs, microprocessadores etc.) e dispositivos analógicos (sensores
analógicos). Nesta seção, você verá as etapas necessárias para a conversão
de um sinal analógico em digital e os parâmetros envolvidos neste contexto.
Programação de microcontroladores V 3

Etapas da conversão A/D


Toda informação do mundo real deve ser primeiramente transformada na
forma digital antes de “entrar” em um microcontrolador. Essa conversão de
um sinal analógico para o digital possui etapas. A Figura 2 mostra as etapas
da conversão A/D para um sinal senoidal.

Sinal senoide Amostragem da senoide Quantização da senoide

(a) (b) (c)

Figura 2. Etapas da conversão A/D.


Fonte: Adaptada de Fouad A. Saad/Shutterstock.com.

No primeiro momento, o conversor A/D realiza uma amostragem periódica


(do inglês, sampling) no sinal analógico. A etapa de amostragem é o processo
de armazenar (amostrar) os valores de um sinal analógico em alguns instantes
de tempo, como mostra a Figura 2b. Esse instante de tempo é definido pela
frequência de amostragem. A próxima etapa é a quantização do sinal, que
é a discretização dos dados amostrados em níveis de valores inteiros, como
vemos na Figura 2c. Por fim, ocorre a codificação, que relaciona os níveis
discretos quantizados com os valores binários, de acordo com a resolução do
conversor A/D (PEREIRA, 2010).

Resolução
Segundo Pereira (2010), a resolução é o menor intervalo (quantidade) do sinal
analógico que o conversor A/D é capaz de detectar dentro da faixa de amplitude
de operação (também conhecida como faixa dinâmica, que é definida pelos
valores de tensão de referência positiva (Vref+) e de referência negativa (Vref– do
conversor A/D). Ou seja, ela representa os níveis discretos que podem ser
representados no conversor. A resolução de um conversor A/D geralmente
4 Programação de microcontroladores V

é dada como o número de bits deste circuito. Por exemplo, um conversor de


4 bits possui 24 = 16 níveis discretos para representar o sinal analógico; um
conversor de 10 bits possui 210 = 1024 níveis discretos, e assim por diante
(SOUZA, 2003). O cálculo da resolução do conversor A/D é realizado pela
Equação (1),

(1)

onde Vref+ corresponde à tensão de referência positiva; Vref– corresponde à tensão


de referência negativa e n ao número de bits do conversor A/D.
Suponha um conversor A/D de 2 bits com tensão de referência positiva de
6 V e tensão de referência negativa de 0 V. Este conversor tem quatro níveis
discretos e uma resolução de 2 V/nível, conforme mostra a Figura 3. Como
esse conversor A/D hipotético possui 2 bits, todo valor convertido do sinal
analógico será representado por dois dígitos binários (SOUZA, 2003).

VBIN Resolução VDEC


VREF + 6V 11 11 2V 6V

10 10 2V 4V

4V

01 01 2V 2V

2V

00 00 2V 0V

VREF - 0V

Figura 3. Resolução de um conversor de 4 bits.

A Figura 3 mostra a faixa dinâmica (sinais analógicos com valores entre 0 V


e 6 V) do conversor e o seu valor correspondente em dígito binário. Valores
maior ou iguais a 0 V e menores que 2 V são representados por 00; maiores ou
iguais a 2 V e menores que 4 V por 01; maiores ou iguais a 4 V e menores que
6 V por 10; e iguais a 6 V por 11. É assim que um conversor A/D representa
um sinal analógico na forma digital.
Programação de microcontroladores V 5

Frequência e período de amostragem


A frequência de amostragem, que é medida em Hz, é a quantidade de amostras
de um sinal analógico coletadas por segundo para a conversão em um sinal
digital. O período de amostragem é o inverso da frequência de amostragem,
ou seja, é o menor intervalo entre as amostras de um sinal (PEREIRA, 2007).
Quanto maior o número de pontos capturados em um sinal analógico, isto
é, quanto maior a frequência de amostragem, mais próximo do sinal original
será o sinal analógico produzido pelo conversor digital/analógico. No entanto,
quanto mais pontos capturados, mais espaço de memória para armazenar os
dados amostrados será necessário.
O período de amostragem é o tempo gasto para a conversão da amostra
do sinal analógico em uma representação digital. Ele é medido em segundos
e calculado pela Equação (2):

(2)

Características do conversor A/D do


microcontrolador do PIC18F
O microcontrolador PIC18F4550 possui 13 entradas analógicas, que são iden-
tificadas por AN0, AN1 até AN12, e um conversor A/D de 10 bits, que utiliza
o método de aproximações sucessivas e permite a conversão de um sinal
analógico em um número correspondente de 10 dígitos binários. A Figura 4
mostra o digrama de blocos do conversor A/D do PIC18F4550. Neste diagrama
é possível identificar as tensões de referência (reference voltage), que você
pode configurar para usar como referência para as tensões de alimentação
(VDD e GND) ou para as tensões aplicadas aos pinos analógicos AN2 e AN3.
A seleção das tensões de referência é controlada pelos bits VCFG1:VCFG0 do
registrador de função especial ADCON1. Além disso, é possível observar o
multiplexador 13 × 1, que é controlado pelos bits CGS3:CHS0 do registrador
de função especial ADCON0 para selecionar a porta analógica de entrada para
a coleta do sinal analógico (MICROCHIP TECHNOLOGY, 2006).
6 Programação de microcontroladores V

Figura 4. Resolução de um conversor de 10 bits.


Fonte: Microchip Technology (2006, p. 262).

O Quadro 1 mostra as combinações possíveis das tensões de referência


positiva e negativa.

Quadro 1. Combinações das tensões de referência positiva e negativa

Bit ADCON1 Configuração

VCFG1 VCFG1 Vref- Vref+

0 0 VSS VDD

0 1 VSS Tensão no pino AN3

1 0 Tensão no pino AN2 VDD

1 1 Tensão no pino AN2 Tensão no pino AN3

Fonte: Adaptado de Microchip Technology (2006).


Programação de microcontroladores V 7

Resolução do PIC18F4550
O conversor A/D do PIC18F4550 tem 10 bits, ou seja, 1024 níveis de repre-
sentação binária e faixa dinâmica de 0000000000 a 1111111111. Sendo assim,
cada valor amostrado do sinal analógico é convertido em um número corres-
pondente de 10 dígitos binários (PEREIRA, 2007). Suponha, por exemplo, que
a tensão de referência negativa do conversor A/D é a tensão de terra do PIC
(Vref– = VSS = 0 V) e a tensão de referência positiva do conversor A/D, a tensão
de alimentação do PIC (Vref+ = VDD = 5 V) e o número de bits do conversor é
10 bits. Portanto, a resolução será:

Isso significa que a menor variação de tensão que o conversor A/D do


PIC18F4550 consegue detectar é de aproximadamente 4,9 mV.

Registradores de função especial do


conversor A/D do PIC18F4550
O periférico de conversão A/D do PIC18F4550 tem cinco registradores de
função especial (PEREIRA, 2007).

„„ ADRESH: registrador que armazena a parte alta do valor convertido


(caso a conversão seja maior que 8 bits).
„„ ADRESL: registrador que armazena a parte baixa do valor convertido.
„„ ADCON0: registrador de configuração e controle 1.
„„ ADCON1: registrador de configuração e controle 2.
„„ ADCON2: registrador de configuração e controle 3.

A seguir, você pode ver os três registradores de controle e configuração do


conversor A/D do PIC18F4550. O registrador ADCON0 controla a operação
do periférico conversor A/D; o registrador ADCON1 configura as funções
das portas/pinos de entrada analógica do conversor; e o registrador ADCON2
configura a fonte de clock da conversão, o tempo de aquisição e a justificativa
do resultado da conversão.
8 Programação de microcontroladores V

ADCON0: A/D Control Register 0

Bit 7-6: não implementados, quando lidos retornam ‘0’ (zero).

Bit 5-3: CHS3:CHS0: conjunto de bits para a seleção do canal analógico.


0000 = canal analógico 0 (AN0) 1000 = canal analógico 8 (AN8)
0001 = canal analógico 1 (AN1) 1001 = canal analógico 9 (AN9)
0010 = canal analógico 2 (AN2) 1010 = canal analógico 10 (AN10)
0011 = canal analógico 3 (AN3) 1011 = canal analógico 11 (AN11)
0100 = canal analógico 4 (AN4) 1100 = canal analógico 12 (AN12)
0101 = canal analógico 5 (AN5) 1101 = não definido
0110 = canal analógico 6 (AN6) 1110 = não definido
0111 = canal analógico 7 (AN7) 1111 = não definido

Bit 1: : inicia a conversão A/D.


1 = GO, inicia A/D em progresso.
0 = DONE, conversão finalizada, periférico ocioso.

Bit 0: ADON: bit de liga/desliga o periférico conversor A/D.


1 = módulo habilitado/ligado.
0 = módulo desabilitado/desligado.
Fonte: Microchip Technology (2006)..

ADCON1: A/D Control Register 1

Bit 7-6: não implementados, quando lidos retornam ‘0’ (zero).

Bit 5: VCFG1: bit de seleção da tensão de referência negativa (Vref–).


1 = Vref– = a tensão aplicada no pino analógico AN2.
Programação de microcontroladores V 9

0 = Vref– = VSS = GND.

Bit 4: VCFG0: bit de seleção da tensão de referência positiva (Vref+).


1 = Vref+ = a tensão aplicada no pino analógico AN3.
0 = Vref+ = VDD.

Bit 3-0: PCFG3:PCFG0: habilitação das entradas analógicas do


conversor.
0000 = habilita treze entradas analógicas AN0 até AN12
0001 = habilita treze entradas analógicas AN0 até AN12
0010 = habilita treze entradas analógicas AN0 até AN12
0011 = habilita doze entradas analógicas AN0 até AN11 e desabilita
a AN12 (pino digital).
0100 = habilita onze entradas analógicas AN0 até AN10 e desabilita
AN11 e AN12 (pino digital).
0101 = habilita dez entradas analógicas AN0 até AN9 e desabilita
AN10 até AN12 (pino digital).
0110 = habilita nove entradas analógicas AN0 até AN8 e desabilita
AN9 até AN12 (pino digital).
0111 = habilita oito entradas analógicas AN0 até AN7 e desabilita
AN8 até AN12 (pino digital).
1000 = habilita sete entradas analógicas AN0 até AN6 e desabilita
AN7 até AN12 (pino digital).
1001 = habilita seis entradas analógicas AN0 até AN5 e desabilita
AN6 até AN12 (pino digital).
1010 = habilita cinco entradas analógicas AN0 até AN4 e desabilita
AN5 até AN12 (pino digital).
1011 = habilita quatro entradas analógicas AN0 até AN3 e desabilita
AN4 até AN12 (pino digital).
1100 = habilita três entradas analógicas AN0 até AN2 e desabilita
AN3 até AN12 (pino digital).
1101 = habilita duas entradas analógicas AN0 até AN1 e desabilita
AN2 até AN12 (pino digital).
1110 = habilita uma entrada analógica AN0 e desabilita AN1 até
AN12 (pino digital).
1111 = desabilita as entradas analógicas e as configura como pinos
digitais.
Fonte: Microchip Technology (2006).
10 Programação de microcontroladores V

ADCON2: A/D Control Register 2

Bit 7: ADFM: bit de seleção da justificativa do resultado da conversão.


1 = justificado à direita.
0 = justificado à esquerda.

Bit 6: não implementado.

Bit 5-3: ACQT2:ACQT0: bits de configuração do tempo de aquisição


da amostra analógica.
111 = 20TAD   100 = 8TAD   001 = 2TAD
110 = 16TAD   011 = 6TAD   000 = 0TAD
101 = 12TAD   010 = 4TAD  

Bit 2-0: ADCS2: ADCS0: bits de configuração do clock do conversor


A/D.
000 = Fosc ⁄2.
001 = Fosc ⁄8.
010 = Fosc ⁄32.
011 = FRC (clock derivado de um oscilador interno RC).
100 = Fosc ⁄4.
101 = Fosc ⁄16.
110 = Fosc ⁄64.
111 = FRC (clock derivado de um oscilador interno RC).
Fonte: Microchip Technology (2006).

O TAD é o tempo de conversão de um bit do microcontrolador e seu valor


mínimo é de 0,8 µs. O clock do conversor depende da frequência do oscilador
do microcontrolador (Fosc) (PEREIRA, 2010). A Figura 5 mostra as frequências
de operação para o PIC18F4550.
Programação de microcontroladores V 11

Figura 5. Frequência de operação do conversor A/D PIC18F4550.


Fonte: Adaptada de Microchip Technology (2006, p. 265).

Frequência e período de amostragem do PIC18F4550


De acordo com Microchip Technology (2006), o período de amostragem
mínimo (TA ) é dado pela equação (3),
MIN

TA = TAQC + TCNV + TR (3)


MIN MIN MIN MIN

onde:

„„ TAQCMIN: corresponde ao tempo de aquisição mínimo. De acordo

com a Equação (21-3) em Microchip Technology (2006, p. 264),


o TAQCMIN = 2,45 μs.

„„ TCNVMIN: corresponde ao tempo de conversão mínima. De acordo com a

tabela 28-29 em Microchip Technology (2006, p. 398), o TCNVMIN = 11 × TAD,


para uma conversão de 10-bit.
„„ TR MIN: corresponde ao tempo de repouso mínimo para iniciar uma

próxima conversão. De acordo com o Microchip Technology (2006),


o TR MIN = 3 × TAD.

O cálculo do TAD para o PIC18F4550 é dado pela Equação (4),

(4)
12 Programação de microcontroladores V

onde:

„„ FAD: é a frequência de aquisição de um bit.


„„ X: é o multiplicador da frequência mostrado na Figura 5.
„„ Fosc: é a frequência de oscilação do microcontrolador.

Suponha o PIC18F4550 com X = 64 e Fosc = 48 MHz, então o valor TAD =


1,33 µs. Sendo assim, o tempo de amostragem mínimo é:

TA = TAQC + TCNV + TR
MIN MIN MIN MIN

TA = 2,45 μs + 11 × 1,33 μs + 3 × 1,33 μs


MIN

TA ≈ 21,12 μs
MIN

Como a frequência é o inverso do período, a frequência de amostragem


máxima do PIC18F4550 é:

Aplicação para ler grandezas de dispositivos


analógicos em microcontroladores PIC18F4550
Em muitas aplicações é necessário adquirir um sinal proveniente da leitura
de um dispositivo analógico e convertê-lo para uma representação digital.
Dessa forma é possível coletar grandezas analógicas e processá-las em um
microcontrolador para tomar decisões e/ou comandar atuadores. Suponha uma
aplicação do conversor A/D para o PIC18F4550 programado na linguagem
C, utilizando o compilador XC8 da Microchip. Detalharemos este exemplo
a seguir.
Programação de microcontroladores V 13

Potenciômetro
O potenciômetro é um componente eletrônico que possui resistência elétrica
ajustável e, tipicamente, três terminais nos quais a conexão central é deslizante
e manipulável. O potenciômetro é um divisor de tensão regulável em que as
tensões de alimentação VDD e GND são ligadas aos pinos da extremidade e a
tensão variável pode ser lida no pino central. A Figura 6 mostra um exemplo
de potenciômetro.

Figura 6. Potenciômetro.
Fonte: Dmitry S. Gordienko/Shutterstock.com.

A Figura 7 mostra o hardware, que deve ser montado para este exemplo
prático.
14 Programação de microcontroladores V

Figura 7. Hardware do PIC18F4550.

A Figura 8 mostra o fluxograma do firmware a ser programado. Firmware


é o nome dado aos programas desenvolvidos para um microcontrolador espe-
cífico. De acordo com o fluxograma, primeiro deve ser feita a configuração da
conversão A/D. Esta configuração pode ser feita uma única vez no início do seu
código. Em seguida, deve-se iniciar uma conversão e exibir seu resultado em
alguma saída de dados (display LCD, comunicação serial, etc.). Por fim, deve-
-se permanecer neste loop de fazer uma nova conversão e exibir o resultado.

Figura 8. Fluxograma do exemplo conversor A/D e potenciômetro.


Programação de microcontroladores V 15

A seguir, você pode ver o código na linguagem C para executar a tarefa


de configurar a entrada analógica AN0, coletar e converter o sinal analógico
dessa entrada e mostrar em um display LCD ( firmware conversão A/D do
potenciômetro).

/** I N C L U D E S ******************************/
#include <pic18F4550.h> //Biblioteca de configurações do MCU
#include <stdlib.h> //Necessário para a função ftoa()

/** D E F I N E S ********************************/
//Resolução do CAD de 10bits = 5V/(2^10-1)
#define RESOLUCAO (5.0/1023.0)
//Tempo do delay
#define TEMPO 3e6

//Defines do CAD
//Inicia a conversão no CAD
#define ConverteADC() ADCON0bits.GO = 1
//Sinaliza conversão em andamento
#define ADC _ Ocupado() ADCON0bits.GO == 1
//Sinaliza fim da conversão no CAD
#define Livre _ ADC() ADCON0bits.GO == 0

//Protótipos das funções da conversão A/D


void InicializaADC();
int LerADC(void);

/** F U N C O E S ********************************/
/*******************************
* Função: void main(void)
*******************************/
void main(void){
int resultadoBin=0; //Valor da conversão AD em Binário.
float resultadoVolts = 0; //Guarda valor conversão em VOLTS.
float resolucao = RESOLUCAO;//Valor da resolução do CAD.
char texto [10] = ""; //Variável para escrever no LCD.
16 Programação de microcontroladores V

//Configura as portas e periféricos do projeto


//Desabilita pinos analógicos
ADCON1 = ADCON1 | 0x0f;

//Inicializa CAD
InicializaADC();

//Laço infinito
while(1){

//Verifica se a conversão acabou


if(Livre _ ADC()){
//Lê o valor em binário do CAD
resultadoBin = LerADC();
ConverteADC(); //Inicia nova conversão
} //Fim do if(Livre _ ADC())

//Converte o valor de binário para volts (decimal)


resultadoVolts = resultadoBin * resolucao;

//Escreve resultado em alguma saída de dados

_ delay (TEMPO); //Atraso entre as conversões


} //Fim while(1)
} //Fim main()

//Funções da conversão A/D


/****************************************
* Função: void InicializaADC(void)
****************************************/
void InicializaADC(void){
/********** CONFIGURA SFR ADCON0 ***********/
//ADON: A/D On bit
//1 = A/D converter module is enabled
//0 = A/D converter module is disabled
ADCON0bits.ADON = 0;
Programação de microcontroladores V 17

//GO: A/D Conversion Status bit


//When ADON = 1:
//1 = A/D conversion in progress
//0 = A/D Idle
ADCON0bits.GO = 0;

//CHS3:CHS0: Seleciona canal 0000 = AN0


ADCON0bits.CHS3 = 0;
ADCON0bits.CHS2 = 0;
ADCON0bits.CHS1 = 0;
ADCON0bits.CHS0 = 0;

/********** CONFIGURA SFR ADCON1 ***********/


//Voltage Reference Configuration
//VCFG1: VCFG0:
//1 = VREF- (AN2) 1 = VREF+ (AN3)
//0 = VSS 0 = VDD
ADCON1bits.VCFG1 = 0;
ADCON1bits.VCFG0 = 0;

//PCFG3:PCFG0: A/D Port Configuration Control bits


//1110 -> AN0
ADCON1bits.PCFG3 = 1;
ADCON1bits.PCFG2 = 1;
ADCON1bits.PCFG1 = 1;
ADCON1bits.PCFG0 = 0;

/********** CONFIGURA SFR ADCON2 ***********/


//A/D Result Format Select bit
//1 = Right justified
//0 = Left justified
ADCON2bits.ADFM = 1 ;

//ACQT2:ACQT0: A/D Acquisition Time Select bits


//001 = 2 TAD
ADCON2bits.ACQT2 = 0;
ADCON2bits.ACQT1 = 0;
ADCON2bits.ACQT0 = 1;
18 Programação de microcontroladores V

//ADCS2:ADCS0: A/D Conversion Clock Select bits


//110 = FOSC/64
ADCON2bits.ADCS0 = 1;
ADCON2bits.ADCS1 = 1;
ADCON2bits.ADCS2 = 0;

//Inicia a conversão no CAD


ADCON0bits.ADON = 1;
} //Fim InicializaADC

/********************************
* Função: int LerADC(void)
********************************/
int LerADC(void){
//Retorna o valor contido nos registradores
//ADRESH = A/D Result Register High Byte
//ADRESL = A/D Result Register Low Byte
return (((unsigned int)ADRESH)<<8)|(ADRESL);
} //Fim ReadADC(void)

Como você pode ver, a função void InicializaADC(void) con-


figura o periférico CAD para funcionar no PIC18F4550. O Quadro 2 mostra
algumas dessas configurações.

Quadro 2. Comandos de configuração do conversor A/D

Comando Descrição

//ADON: A/D On bit Este comando habilita ou desabilita o


//1 = module is enabled módulo/periférico CAD. Por questão
//0 = module is disabled de boa prática de programação: é
recomendado iniciar desabilitado
ADCON0bits.ADON = 0;
para fazer a configuração e, no
final habilitá-lo novamente.

(Continua)
Programação de microcontroladores V 19

(Continuação)

Quadro 2. Comandos de configuração do conversor A/D

Comando Descrição

//GO: A/D Conversion Status Este comando inicia a conversão de


//When ADON = 1: um sinal analógico. É importante
//1=conversion in progress sempre definir seu valor antes
de fazer a leitura do resultado
//0 = A/D Idle
da conversão analógica.
ADCON0bits.GO = 0;

//CHS3:CHS0: Estes comandos selecionam o canal


ADCON0bits.CHS3 = 0; em que será realizada a leitura do sinal
ADCON0bits.CHS2 = 0; analógico; no caso, o valor binário
0000 corresponde ao canal AN0.
ADCON0bits.CHS1 = 0;
ADCON0bits.CHS0 = 0;
// V o lt a g e Refer e nc e Seleciona as referências Vref+ e
Configuration Vref- da conversão analógica digital;
//VCFG1: VCFG0: o valor binário 00 define que as
referências serão internas: Vcc e GND.
//1 = VREF-AN2) 1 = VREF+
(AN3)
//0 = VSS 0 = VDD
ADCON1bits.VCFG1 = 0;
ADCON1bits.VCFG0 = 0;
//PCFG3:PCFG0: Configuração dos pinos que estarão
//1110 -> AN0 habilitados como analógicos,
ADCON1bits.PCFG3 = 1; por exemplo: 1110, apenas o
pino AN0 estará habilitado.
ADCON1bits.PCFG2 = 1;
ADCON1bits.PCFG1 = 1;
ADCON1bits.PCFG0 = 0;
//A/D Result Format Select Alinhamento do resultado
bit da conversão AD nos SFR
//1 = Right justified ADRESH e ADRESL.

//0 = Left justified


ADCON2bits.ADFM = 1 ;
(Continua)
20 Programação de microcontroladores V

(Continuação)

Quadro 2. Comandos de configuração do conversor A/D

Comando Descrição

//ACQT2:ACQT0: Seleção do tempo de aquisição TAD


//001 = 2 TAD da conversão AD. Por exemplo, o
//000 = 0 TAD valor binário 001 seleciona 2 TAD.

ADCON2bits.ACQT2 = 0;
ADCON2bits.ACQT1 = 0;
ADCON2bits.ACQT0 = 1;
//ADCS2:ADCS0: Seleciona o clock da conversão AD.
//110 = FOSC/64 Para o PIC18F4550 com frequência
ADCON2bits.ADCS0 = 1; de 48MHz, o clock deve ser
configurado como FOSC/64, por
ADCON2bits.ADCS1 = 1;
isso foi usado o valor binário 110.
ADCON2bits.ADCS2 = 0;
//Inicia a conversão no CAD Após a configuração, a
ADCON0bits.ADON = 1; conversão é inicializada.

Fonte: Adaptado de Pereira (2010)

Outro ponto relevante do código é o trecho de defines do CAD. O Quadro 3


mostra os comandos utilizados no código.

Quadro 3. Defines da conversão A/D

Comando Descrição

//Defines do CAD O comando ADCON0bits.


//Inicia a conversão no CAD GO = 1 inicia a conversão AD, por
#d efi ne Conver te A D C() isso o define é ConvertADC().

ADCON0bits.GO = 1

(Continua)
Programação de microcontroladores V 21

(Continuação)

Quadro 3. Defines da conversão A/D

Comando Descrição

//Sinaliza conversão em A condição ADCON0bits.GO ==


andamento 1 verifica se a conversão AD ainda
#define ADC _ Ocupado() está acontecendo. Se for verdadeira,
é porque o CAD está ocupado.
ADCON0bits.GO == 1

//Sinaliza fim da conversão A condição ADCON0bits.


no CAD GO == 0 verifica se a conversão
#define Livre _ ADC() ADCON- AD acabou. Se for verdadeira,
é porque o CAD está livre.
0bits.GO == 0

Fonte: Adaptado de Pereira (2010).

Por fim, observe o trecho no loop infinito while(1). O Quadro 4 mostra


a descrição de cada trecho do laço de repetição que executa a tarefa principal
de conversão do sinal analógico e a exibição no display LCD.

Quadro 4. Trechos do laço infinito da tarefa de conversão A/D

Comando Descrição

//Verifica se a conversão Este teste lógico verifica se a


acabou conversão AD já terminou e, se a
if(Livre _ ADC()){ condição for verdadeira, realiza
a leitura do resultado e inicia
//Lê o valor em binário
uma nova conversão AD.
do CAD
resultadoBin = LerADC();
ConverteADC();//Inicia
nova conversão
} //Fim do if(Livre _ ADC())

(Continua)
22 Programação de microcontroladores V

(Continuação)

Quadro 4. Trechos do laço infinito da tarefa de conversão A/D

Comando Descrição

//Converte o valor de bi- Realiza a transformação


nário para volts (decimal) do valor binário (resultado
resultadoVolts = resulta- da conversão) em decimal,
multiplicando-o pela resolução.
doBin * resolucao;

Fonte: Adaptado de Pereira (2010).

MICROCHIP TECHNOLOGY. PIC18F2455/2550/4455/4550 Data Sheet: 28/40/44-Pin, High-


-Performance, Enhanced Flash, USB Microcontrollers with nanoWatt Technology.
Chandler, 2006. 430 p. Disponível em: http://ww1.microchip.com/downloads/en/
DeviceDoc/39632c.pdf. Acesso em: 24 jul. 2019.
PEREIRA, F. Microcontrolador PIC 18 detalhado: hardware e software. São Paulo: Érica,
2010. 304 p.
PEREIRA, F. Microcontroladores PIC: técnicas avançadas. 6. ed. São Paulo: Érica, 2007. 368 p.
SOUZA, D. J. Desbravando o PIC: ampliado e atualizado para PIC16F628A. 6. ed. São
Paulo: Érica, 2003. 268 p.
TOKHEIM, R. Fundamentos de eletrônica digital: sistemas sequenciais. 7. ed. Porto Alegre:
AMGH; Bookman, 2013. v. 2. 274 p. (Série Tekne).
WEBER, R. F. Fundamentos de arquitetura de computadores. 4. ed. Porto Alegre: Bookman,
2012. 424 p. (Série Livros Didáticos Informática UFRGS).

Leituras recomendadas
PEREIRA, F. Leitura de tensões analógicas com o PIC. In: PEREIRA, F. Microcontroladores
PIC: técnicas avançadas. 6. ed. São Paulo: Érica, 2007. cap. 12. seção 8.
PEREIRA, F. Periféricos analógicos. In: PEREIRA, F. Microcontrolador PIC 18 detalhado:
hardware e software. São Paulo: Érica, 2010. cap. 9.
Programação de microcontroladores V 23

PINHEIRO, F. A. C. Elementos de programação em C: em conformidade com o padrão


ISO/IEC 9899. Porto Alegre: Bookman, 2012. 548 p.
USING the MPLABX Code Configurator to setup the ADC and EUSART. [S. l.: S. n.], 2013. 1
vídeo (5 min 5 s). Publicado pelo canal Microchip Technology. Disponível em: https://
www.youtube.com/watch?v=9kzu_eoKQKo. Acesso em: 24 jul. 2019.

Você também pode gostar