Você está na página 1de 42

Programação dos conversores analógico-

digital em microcontroladores

Apresentação
O conversor analógico-digital (A/D) é um circuito eletrônico que converte um sinal analógico em
um sinal digital. Ele faz a interface entre dispositivos digitais (p. ex.: microcontroladores, DSPs,
microprocessadores, etc.) e dispositivos analógicos (tais como: sensores analógicos). A maioria dos
sinais de interesse prático é analógico, como, por exemplo, voz, biológicos, radar, sonar,
comunicações. Esses sinais são grandezas físicas difíceis de serem tratadas na forma analógica.
Então, para processá-los é necessário convertê-los primeiramente para a forma digital.

Nesta Unidade de Aprendizagem, você conhecerá os principais conceitos de conversores A/D e


verá as características do conversor A/D nos microcontroladores PIC18. Conhecerá, ainda, algumas
das aplicações de conversores A/D utilizando microcontroladores.

Bons estudos.

Ao final desta Unidade de Aprendizagem, você deve apresentar os seguintes aprendizados:

• Reconhecer parâmetros de conversores A/D.


• Analisar o conversor A/D de microcontroladores.
• Comparar aplicações de conversores A/D de microcontroladores.
Desafio
O conversor A/D é capaz de gerar uma representação digital de um sinal analógico para que esses
dados possam ser interpretados pelo microcontrolador. Uma característica importante do
conversor A/D é a resolução, que é a menor quantidade do sinal analógico que o conversor A/D é
capaz de detectar dentro da faixa de amplitude de operação.

Considere a situação a seguir:

Sendo assim, calcule a resolução e monte uma tabela com a faixa de operação e os valores binários
correspondentes desse conversor A/D.
Infográfico
Diversas aplicações em microcontroladores usam periféricos analógicos para fazer a interface entre
o mundo real e o digital e, assim, adquirir dados de grandezas analógicas do mundo exterior. Por
isso, os microcontroladores (dispositivos digitais) contêm um conversor analógico-digital (A/D) para
converter sinais analógicos em digitais.Normalmente, o sensor mede grandezas analógicas do
mundo real, tais como: temperatura, luminosidade, umidade, entre outras, e as envia para o
conversor A/D do microcontrolador, que as transforma em valores digitais na representação binária
(0 ou 1) para, então, realizar o processamento digital dessas informações.

Após o processamento dessas grandezas, o microcontrolador pode enviá-las para o mundo real por
meio do conversor digital analógico (D/A), que as transforma da representação digital para a
analógica. E, então, comandar um atuador, como: alto-falante, motor, etc.

Neste Infográfico, você verá uma imagem esquemática para elucidar melhor esse conceito de
interfacear o mundo real com o digital.
Aponte a câmera para o código e acesse o link do conteúdo ou clique no código para acessar.
Conteúdo do livro
O conversor analógico-digital é um dos periféricos mais importantes do microcontrolador, pois eles
fazem a interface entre os sinais de interesse prático do mundo real e os dispositivos digitais (como
microcontroladores, computadores, etc.). Esse circuito eletrônico converte um sinal analógico em
uma representação binária para que esta possa ser interpretada pelo microcontrolador.

No capítuloProgramação de microcontroladores V, da obra Microprocessadores, você reconhecerá


os parâmetros de conversores A/D, poderá analisar o conversor A/D de microcontroladores e
conhecerá aplicações de conversores A/D de microcontroladores.

Boa leitura!
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.
Dica do professor
Um sinal digital tem um valor que é especificado entre possibilidades discretas. Por outro lado, um
sinal analógico pode assumir qualquer valor de uma faixa contínua de valores. Os
microcontroladores são dispositivos digitais e conseguem processar valores na representação
digital. O conversor analógico-digital é o circuito responsável por fazer a interface entre as
grandezas analógicas do mundo real e os dispositivos digitais. Ele converte um sinal na forma
analógica em valores digitais para serem interpretados pelo microcontrolador.

Nesta Dica do Professor, você compreenderá melhor o funcionamento do conversor A/D do


PIC18F4550.

Aponte a câmera para o código e acesse o link do conteúdo ou clique no código para acessar.
Exercícios

1) A resolução é a menor variação de tensão percebida pelo conversor A/D de um


microcontrolador. Ela depende dos valores de referência positiva e negativa e do número de
bits do conversor A/D. Um microcontrolador qualquer contém um conversor A/D de 3 bits e
tensões de referência positiva de 4V e negativa de 0V. Sendo assim, marque a alternativa
correta com o valor aproximado da resolução e mV desse microcontrolador:

A) 0,5714 mV.

B) 571,43 mV.

C) 0,5 mV.

D) 9 mV.

E) 0 mV.

2) O processo de conversão A/D tem três etapas para realizar a transformação de um sinal
analógico em uma representação digital. Portanto, baseado no conteúdo do capítulo e no
seu conhecimento, analise as afirmações a seguir sobre as etapas de conversão A/D.
I. A etapa de amostragem é o processode conversão do sinal analógico em uma
representação binária (0 e 1).
II. A etapa de quantização é o processo de discretização dos dados amostrados em níveis de
valores inteiros.
III. A etapa de codificação é o processo de armazenar (amostrar) os valores de um sinal
analógico em alguns instantes de tempo.
Assinale a opção referente às afirmações corretas:

A) Está correta a afirmação I.

B) Está correta a afirmação II.

C) Estão corretas as afirmações II e III.

D) Estão corretas as afirmações I, II e III.

E) Estão corretas as afirmações I e II.


3) Suponha que você trabalha como desenvolvedor defirmware para uma empresa que utiliza o
microcontrolador PIC18F4550 nos seus projetos. O seu supervisor pediu para você desenvolver
um trecho de código que faça a seguinte configuração do conversor A/D:

Sendo assim, marque a alternativa com o trecho de código correto para realizar essas três
configurações solicitadas pelo supervisor:

A) ADCON1bits.VCFG1 = 0;
ADCON1bits.VCFG0 = 0;
ADCON1bits.PCFG3 = 1;
ADCON1bits.PCFG2 = 1;
ADCON1bits.PCFG1 = 1;
ADCON1bits.PCFG0 = 1;

B) ADCON1bits.VCFG1 = 1;
ADCON1bits.VCFG0 = 0;
ADCON1bits.PCFG3 = 1;
ADCON1bits.PCFG2 = 1;
ADCON1bits.PCFG1 = 0;
ADCON1bits.PCFG0 = 1;

C) ADCON1bits.VCFG1 = 1;
ADCON1bits.VCFG0 = 1;
ADCON1bits.PCFG3 = 1;
ADCON1bits.PCFG2 = 1;
ADCON1bits.PCFG1 = 0;
ADCON1bits.PCFG0 = 0;

D) ADCON1bits.VCFG1 = 1;
ADCON1bits.VCFG0 = 1;
ADCON1bits.PCFG3 = 1;
ADCON1bits.PCFG2 = 1;
ADCON1bits.PCFG1 = 1;
ADCON1bits.PCFG0 = 1;

E) ADCON1bits.VCFG1 = 0;
ADCON1bits.VCFG0 = 1;
ADCON1bits.PCFG3 = 1;
ADCON1bits.PCFG2 = 0;
ADCON1bits.PCFG1 = 1;
ADCON1bits.PCFG0 = 0;

4) O microcontrolador PIC18F4550 contém treze entradas analógicas, que são identificadas


por AN0 até AN12, e um conversor A/D de 10 bits. Sobre o conversor A/D do PIC18F4550,
identifique como verdadeiras (V) ou falsas (F) as seguintes afirmativas.
A resolução é de aproximadamente 9mV para tensões de referência positiva, igual a 5V, e
negativa, igual a GND (0V).
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.
O registrador ADCON2 configura a fonte de clock da conversão, o tempo de aquisição e a
justificativa do resultado da conversão.
A frequência de amostragem é de 50Hz, para X = 16 e F_osc=20MHz.

Assinale a alternativa que apresenta a sequência correta de cima para baixo.

A) F - V - V - V - F.

B) V - V - V - V - V.

C) F - F - F - F- F.

D) V - F - F - F - V.

E) F - V - F - V - F.
5) Suponha um conversor A/D de 3 bits com tensão de referência positiva de 7V e tensão de
referência negativa de 0V. Esse conversor tem quatro níveis discretos e uma resolução de
1V/nível. Sendo assim, marque a alternativa correta com o valor em representação binário
para uma tensão de 3,75V.

A) 000.

B) 011.

C) 100.

D) 101.

E) Não é possível determinar.


Na prática
Conversores analógicos-digitais estão presentes em diversas tecnologias populares atualmente. Um
importante exemplo são os sistemas de reconhecimento de voz e fala, como os utilizados em
assistentes virtuais, como a Siri, da Apple e o Google Home. A primeira etapa para esse tipo de
ferramenta é a captura e a conversão de sinais de voz e áudio analógicos para sinais de áudio que
podem ser processados pelos computadores e microcontroladores. Além de assistentes virtuais,
essa tecnologia está presente em diversos outros equipamentos, como televisões, GPS,
videogames, fechaduras eletrônicas, etc.

Neste Na Prática, você vai conhecer um pouco mais sobre o uso da conversão analógica digital para
o tratamento de sinais de áudio em microcontroladores.
Aponte a câmera para o
código e acesse o link do
conteúdo ou clique no
código para acessar.
Saiba +
Para ampliar o seu conhecimento a respeito desse assunto, veja abaixo as sugestões do professor:

Eletrônica aplicada - transformando sinais analógicos em


digitais (conversão A/D)
Assista ao vídeo no canal oficial da UNIVESP e aprenda mais sobre a conversão analógica digital.

Aponte a câmera para o código e acesse o link do conteúdo ou clique no código para acessar.

Eletrônica digital - conversores analógicos-digitais (ADCs)


Assista ao vídeo no canal oficial da UNIVESP e entenda o funcionamento dos circuitos eletrônicos
de conversão analógico-digital.

Aponte a câmera para o código e acesse o link do conteúdo ou clique no código para acessar.

Um fotômetro multi-led microcontrolado, portátil e de baixo


custo
Este artigo mostra uma aplicação e descreve como foi desenvolvido um fotômetro utilizando o
microcontrolador PIC e seu conversor A/D.

Aponte a câmera para o código e acesse o link do conteúdo ou clique no código para acessar.
Um sistema microcontrolado para o monitoramento on-line, in
situ e remoto de pH, condutividade e temperatura de águas
Este artigo mostra uma aplicação e descreve como foi desenvolvido um sistema para monitorar a
condutividade, a temperatura e o pH de um reservatório de água.

Aponte a câmera para o código e acesse o link do conteúdo ou clique no código para acessar.

Você também pode gostar