Vous êtes sur la page 1sur 39

Prof.

Pedro Pedrosa
h"p://buscatextual.cnpq.br/buscatextual/visualizacv.do?id=K4227622E1    
pedrosarf@ifce.edu.br
Prof. Pedro Pedrosa
Ø  Hardware:

10  entradas  
Analógicas  
pedrosarf@ifce.edu.br Prof. Pedro Pedrosa
Ø  Visão Geral
•  Os pinos com a função especial NA podem assumir duas funções,
entrada/saída digital ou conversor A/D
•  Quando configuradas como E/S digital funcionam como na aula
anterior. Já quando configuradas como conversor A/D estes pinos
convertem uma tensão analógica (0-5V) em um valor digital.
•  O valor digital é armazenado normalmente em uma variável para ser
processada, armazenada, etc.
•  o valor armazenado depende da resolução do conversor, que, por
exemplo, no 18f2550 pode ser de 8 ou 10 bits.

pedrosarf@ifce.edu.br Prof. Pedro Pedrosa


Ø  Visão Geral
•  Os pinos com a função especial NA podem
•   10  assumir
bits   duas funções,
•   8  bits  
entrada/saída digital ou conversor A/D •   0V                  0  
•   0V                  0  
•  Quando•   configuradas •   1V  
1V                  51  como E/S digital funcionam como          na      2aula
04  
anterior. Já quando configuradas como conversor•   A/D 2 V   estes
              pinos
  409  
•   2V                  102  
convertem uma tensão analógica (0-5V) em um valor digital.
•   3V                  153   •   3V                  613  
•  O valor digital é armazenado normalmente em •  uma
 4V  variável
               817   para ser
•   4V                  204  
processada, armazenada, etc. • 5V                  1023  
• 5V                  255  
•  o valor armazenado depende da resolução do conversor, que, por
exemplo, no 18f2550 pode ser de 8 ou 10 bits.
8  bits                        0  até  255  
 
pedrosarf@ifce.edu.br 10  bits                    0  até  1023   Prof.     Pedro Pedrosa
Ø  Funcionamento
•  ...

pedrosarf@ifce.edu.br Prof. Pedro Pedrosa


Prof. Pedro Pedrosa
Ø  Configuração conversor AD
#device adc = X
Definição do número de bits usados na composição
das amostras coletadas pelo conversor A/D.

Exemplos:

#device adc = 10
ou
#device adc = 8 //coloca o pino RB1 em nível baixo

pedrosarf@ifce.edu.br Prof. Pedro Pedrosa


Ø  Configuração conversor AD
SETUP_ADC_PORTS( )
Definição dos pinos que devem ser configurados como
entradas analógicas, bem como das referências de
tensão.
Sintaxe:

setup_adc_ports(configurações);
Exemplos:

setup_adc_ports(AN0_to_AN3);

pedrosarf@ifce.edu.br Prof. Pedro Pedrosa


Ø  Configuração conversor AD
SETUP_ADC_PORTS( ) Parâmetros de Configuração
Parâmetro ADCs selecionados para uso
NO_ANALOGS Nenhum
ALL_ANALOG A0 A1 A2 A3 A5 B2 B3 B1 B4 B0
AN0_TO_AN11 A0 A1 A2 A3 A5 B2 B3 B1 B4
AN0_TO_AN10 A0 A1 A2 A3 A5 B2 B3 B1
AN0_TO_AN9 A0 A1 A2 A3 A5 B2 B3
AN0_TO_AN8 A0 A1 A2 A3 A5 B2
AN0_TO_AN4 A0 A1 A2 A3 A5
AN0_TO_AN3 A0 A1 A2 A3
AN0_TO_AN2 A0 A1 A2
AN0_TO_AN1 A0 A1
AN0
pedrosarf@ifce.edu.br A0 Prof. Pedro Pedrosa
Ø  Configuração conversor AD
SETUP_ADC_PORTS( ) Parâmetros de Configuração
Parâmetro ADCs selecionados para uso
NO_ANALOGS Nenhum
SETUP_ADC_PORTS(NO_ANALOGS)                  Usa  nenhum  
ALL_ANALOG A0 A1 A2 A3  A5
SETUP_ADC_PORTS(ALL_ANALOGS)              B2
Usa  B3 B1 B4
todos   B0
ADCs  
AN0_TO_AN11 A0 A1  A2
SETUP_ADC_PORTS(AN0_TO_AN1)           A3  A5
             B2
Usa  B3 B1 A
ADCs   B4
N0  e  AN1  
AN0_TO_AN10 A0 A1 A2 A3 A5 B2 B3 B1
AN0_TO_AN9 A0 A1 A2 A3 A5 B2 B3
AN0_TO_AN8 A0 A1 A2 A3 A5 B2
AN0_TO_AN4 A0 A1 A2 A3 A5
AN0_TO_AN3 A0 A1 A2 A3
AN0_TO_AN2 A0 A1 A2
AN0_TO_AN1 A0 A1
AN0
pedrosarf@ifce.edu.br A0 Prof. Pedro Pedrosa
Ø  Configuração conversor AD
SETUP_ADC_PORTS( ) Parâmetros de Configuração
Parâmetro Tensão de referência dos ADCs
VSS_VDD Referência 0 - Vdd (pino 20)
VREF_VREF Referência VrefL(AN2) - VrefH (AN3)
VREF_VDD Referência VrefL(AN2) – Vdd (pino 20)
VSS_VREF Referência 0 - VrefH (AN3)

pedrosarf@ifce.edu.br Prof. Pedro Pedrosa


Ø  Configuração conversor AD
SETUP_ADC_PORTS( ) Parâmetros de Configuração
Parâmetro Tensão de referência dos ADCs
VSS_VDD Referência 0 - Vdd (pino 20)
VREF_VREF Referência VrefL(AN2) - VrefH (AN3)
VREF_VDD Referência VrefL(AN2) – Vdd (pino 20)
VSS_VREF Referência 0 - VrefH (AN3)

  SETUP_ADC_PORTS(VSS_VDD)                
•   Usa  como  referência  as  alimentações  do  micro  controlador,  
pinos  19  e  20  (18f2550)    
•   Deste  modo  a  leitura  do  ADC  será  máxima  para  tensão  no  pino  
19  e  0  para  tensão  no  pino  20.  
pedrosarf@ifce.edu.br Prof. Pedro Pedrosa
Ø  Configuração conversor AD
SETUP_ADC_PORTS( ) Parâmetros de Configuração
Parâmetro Tensão de referência dos ADCs
VSS_VDD Referência 0 - Vdd (pino 20)
VREF_VREF Referência VrefL(AN2) - VrefH (AN3)
VREF_VDD Referência VrefL(AN2) – Vdd (pino 20)
VSS_VREF Referência 0 - VrefH (AN3)

  SETUP_ADC_PORTS(VREF_VREF)                
•   Usa  como  referência  os  pinos  4  (AN2)  e  5  (AN3)  para  18f2550    
•   Deste  modo  a  leitura  do  ADC  será  máxima  para  tensão  do  pino  
5  e  0  para  tensão  no  pino  4.  
pedrosarf@ifce.edu.br Prof. Pedro Pedrosa
Ø  Configuração conversor AD
SETUP_ADC_PORTS( ) Parâmetros de Configuração
Parâmetro Tensão de referência dos ADCs
VSS_VDD Referência 0 - Vdd (pino 20)
VREF_VREF Referência VrefL(AN2) - VrefH (AN3)
VREF_VDD Referência VrefL(AN2) – Vdd (pino 20)
VSS_VREF Referência 0 - VrefH (AN3)

  SETUP_ADC_PORTS(VREF_VDD)                
•   Usa  como  referência  os  pinos  4  (AN2)  e  20  (Alimentação)  
•   Deste  modo  a  leitura  do  ADC  será  máxima  para  tensão  do  pino  
20  e  0  para  tensão  no  pino  4.  
pedrosarf@ifce.edu.br Prof. Pedro Pedrosa
Ø  Configuração conversor AD
SETUP_ADC_PORTS( ) Parâmetros de Configuração
Parâmetro Tensão de referência dos ADCs
VSS_VDD Referência 0 - Vdd (pino 20)
VREF_VREF Referência VrefL(AN2) - VrefH (AN3)
VREF_VDD Referência VrefL(AN2) – Vdd (pino 20)
VSS_VREF Referência 0 - VrefH (AN3)

 SETUP_ADC_PORTS(VSS_VREF)                
•   Usa  como  referência  os  pinos  19  (GND  alimentação)  e  5  (AN3)  
•   Deste  modo  a  leitura  do  ADC  será  máxima  para  tensão  do  pino  
5  e  0  para  tensão  do  pino  19  (GND).  
pedrosarf@ifce.edu.br Prof. Pedro Pedrosa
Ø  Configuração conversor AD
SETUP_ADC_PORTS( ) Parâmetros de Configuração

Resumindo:  
 
Tensão  do  ADC  =  Ref.  Mínima                                      valor  ADC  =  0  
 
Tensão  do  ADC  =  Ref.  Máxima                                      valor  ADC  =  valor  
máximo  
  SETUP_ADC_PORTS(VREF_VDD)                
 
•   Usa  como  referência  os  pinos  4  (AN2)  e  20  (Alimentação)  
Obs:  valor  máximo  depende  da  resolução:  
•   Deste  modo  a  leitura  do  ADC  será  máxima  para  tensão  do  pino  
     255  para  8  bits  
20  e  0  para  tensão  no  pino  4.  
     1023  para  10  bits  
       pedrosarf@ifce.edu.br
      Prof. Pedro Pedrosa
Ø  Configuração conversor AD
SETUP_ADC_PORTS( ) Parâmetros de Configuração

•   Valor  de  cada  bit:  


 
 Exemplo:
  Supondo que os valores de tensão de referência mínima e máxima
  são respectivamente 0V e 5V, e utilizando o conversor com
  resolução de 10bits:
 
 
 
pedrosarf@ifce.edu.br Prof. Pedro Pedrosa
Ø  Configuração conversor AD
SETUP_ADC_PORTS( ) Parâmetros de Configuração
Parâmetro
•   Cálculo  da  conversão  Tensãode  uma  tde referência
ensão   dos
de  entrada  VinADCs
:  
VSS_VDD   Referência 0 - Vdd (pino 20)
VREF_VREF •   Valor  de  cada  bReferência
it:   VrefL(AN2) - VrefH (AN3)
 
VREF_VDD Referência VrefL(AN2) – Vdd (pino 20)
Exemplo:  
 Exemplo
VSS_VREF Referência 0 - VrefH (AN3)
 
 Supondo
 Supondo que que os os valores
valores de de tensão
tensão dede referência
referência mínima
mínima ee máxima
máxima
 são
são respectivamente
respectivamente 0V 0V ee 5V, 5V, ee utilizando
utilizando oo conversor
conversor com com
 
 resolução
resolução de de 10bits,
10bits: e possuindo uma entrada de 2,5V:
 
 
 
 
 
 
  pedrosarf@ifce.edu.br Prof. Pedro Pedrosa
Ø  Configuração conversor AD
SETUP_ADC_PORTS( ) Parâmetros de Configuração
Parâmetro
•   Cálculo  da  conversão  Tensãode  uma  tde referência
ensão   dos
de  entrada  VinADCs
:  
VSS_VDD   Referência 0 - Vdd (pino 20)
VREF_VREF •   Valor  de  cada  bReferência
it:   VrefL(AN2) - VrefH (AN3)
 
VREF_VDD Referência VrefL(AN2) – Vdd (pino 20)
Exemplo:  
 Exemplo
VSS_VREF Referência 0 - VrefH (AN3)
 
 Supondo
 Supondo que que os os valores
valores de de tensão
tensão dede referência
referência mínima
mínima ee máxima
máxima
 são
são respectivamente
respectivamente 0V 0V ee 5V, 5V, ee utilizando
utilizando oo conversor
conversor com com
 
 resolução
resolução de de 10bits,
10bits: e possuindo uma entrada de 2,5V:
 
 
 
  Vin  sempre  deve  estar  entre  os  valores  
 
  mínimo  e  máximo  das  referências  
  pedrosarf@ifce.edu.br Prof. Pedro Pedrosa
Ø  Configuração conversor AD
SETUP_ADC_PORTS( ) Outros exemplos
SETUP_ADC_PORTS(  NO_ANALOGS    |    VSS_VDD  )            
 
 
 
SETUP_ADC_PORTS(  AN0  |  VREF_VDD    )    
 
 
 
SETUP_ADC_PORTS(  AN0_TO_AN11    |    VREF_VREF    )  
 
 
  pedrosarf@ifce.edu.br Prof. Pedro Pedrosa
Ø  Configuração conversor AD
SETUP_ADC_PORTS( ) Outros exemplos
SETUP_ADC_PORTS(  NO_ANALOGS    |    VSS_VDD  )            
 
 
  NO_ANALOGS                    Nenhuma  porta  ADC  
         VSS_VDD A  N0  |  VREF_VDD  
SETUP_ADC_PORTS(                  As  referências  
 )     do  ADC  são  o  terra  
                 VCC  de  alimentação  
 
 
SETUP_ADC_PORTS(  AN0_TO_AN11    |    VREF_VREF    )  
 
 
  pedrosarf@ifce.edu.br Prof. Pedro Pedrosa
Ø  Configuração conversor AD
SETUP_ADC_PORTS( ) Outros exemplos
SETUP_ADC_PORTS(  NO_ANALOGS    |    VSS_VDD  )            
 
 
 
SETUP_ADC_PORTS(  AN0  |  VREF_VDD    )    
 
 
 
 NO_ANALOGS  
               AN0
SETUP_ADC_PORTS(        AN0_TO_AN11  
                               A
Npenas  
 |    VAREF_VREF  
enhuma   N0   será  AuDC  
porta    sada  
)   como  ADC  
                     V
VREF_VDD  
SS_VDD                                  A
As  
s  rreferências  
eferências  d do  
o  A ADC  
DC  ssão  
ão  Ao  N2   e    
terra  
                                 V
VCC   CC  d de  
e  aalimentação  
limentação  
  pedrosarf@ifce.edu.br Prof. Pedro Pedrosa
Ø  Configuração conversor AD
SETUP_ADC_PORTS( ) Outros exemplos
SETUP_ADC_PORTS(  NO_ANALOGS    |    VSS_VDD  )            
 
 
 
AN0_TO_AN11     A  N0  
SETUP_ADC_PORTS(            S|  eleciona  
VREF_VDD   os    A
)    DC  de  0  a  11  
       VREF_VREF              As  referências  do  ADC  são  as  referências  
         externas,  mínima  (AN2)  e  máxima  (AN3)  
 
SETUP_ADC_PORTS(  AN0_TO_AN11    |    VREF_VREF    )  
 
 
  pedrosarf@ifce.edu.br Prof. Pedro Pedrosa
Ø  Configuração conversor AD
SETUP_ADC ( )

Definição do tipo de clock para a conversão A/D,


estabelece o TAD (Tempo de conversão Analógico-Digital)

Sintaxe:

setup_adc(opções);

Exemplos:

setup_ADC(adc_off); //desliga o conversor A/D

pedrosarf@ifce.edu.br Prof. Pedro Pedrosa


Ø  Configuração conversor AD
SETUP_ADC ( ) Opções de configurações do clock

Parâmetro Clock do ADC selecionado


ADC_OFF Desliga  clock  do  ADC  
ADC_CLOCK_DIV_2          Clock  do  ADC  =  Fosc/2  
ADC_CLOCK_DIV_4        Clock  do  ADC  =  Fosc/4  
ADC_CLOCK_DIV_8        Clock  do  ADC  =  Fosc/8  
ADC_CLOCK_DIV_16          Clock  do  ADC  =  Fosc/16                                        
ADC_CLOCK_DIV_32          Clock  do  ADC  =  Fosc/32  
ADC_CLOCK_DIV_64          Clock  do  ADC  =  Fosc/64  
ADC_CLOCK_INTERNAL   Clock  do  ADC  =  clock  Interno

pedrosarf@ifce.edu.br Prof. Pedro Pedrosa


Ø  Configuração conversor AD
 SETUP_ADC( ADC_CLOCK_DIV_16 )                
SETUP_ADC ( ) Opções de configurações do clock
•   Usa  como  clock  do  ADC  uma  frequência  16  vezes  menor  que  a  
frequência  de  entrada  do  Clock
Parâmetro MCU.   do ADC selecionado
•   O  tempo  de  conversão  TDesliga  
ADC_OFF AD  de  ccada  
lock  bdit  o  éA  1DC  
/f  
ADC_CLOCK_DIV_2          Clock  do  ADC  =  Fosc/2  
ADC_CLOCK_DIV_4        Clock  do  ADC  =  Fosc/4  
ADC_CLOCK_DIV_8        Clock  do  ADC  =  Fosc/8  
ADC_CLOCK_DIV_16          Clock  do  ADC  =  Fosc/16                                        
ADC_CLOCK_DIV_32          Clock  do  ADC  =  Fosc/32  
ADC_CLOCK_DIV_64          Clock  do  ADC  =  Fosc/64  
ADC_CLOCK_INTERNAL   Clock  do  ADC  =  clock  Interno

pedrosarf@ifce.edu.br Prof. Pedro Pedrosa


Ø  Configuração conversor AD
SETUP_ADC ( ) Opções de configurações do clock

Parâmetro Clock do ADC selecionado


ADC_OFF Desliga  clock  do  ADC  
ADC_CLOCK_DIV_2          Clock  do  ADC  =  Fosc/2  
ADC_CLOCK_DIV_4        Clock  do  ADC  =  Fosc/4  
ADC_CLOCK_DIV_8        Clock  do  ADC  =  Fosc/8  
ADC_CLOCK_DIV_16          Clock  do  ADC  =  Fosc/16                                        
ADC_CLOCK_DIV_32  
 SETUP_ADC(     ADC_CLOCK_DIV_4
   Clock  do  ADC  =)  Fosc/32  
               
ADC_CLOCK_DIV_64  
•   Usa  como  clock  d    o  ADC    uma  frequência  
 Clock  do  A
4DC   =  Fosc/64  
 vezes   menor  que  a  
ADC_CLOCK_INTERNAL  
frequência  de  entrada  do  Clock   MCU.  do  ADC  =  clock  Interno
•   O  tempo  de  conversão  TAD  de  cada  bit  é  1/f  
pedrosarf@ifce.edu.br Prof. Pedro Pedrosa
Ø  Configuração conversor AD
 
SETUP_ADC () Opções de configurações do clock
•   Cálculo  do  tempo  de  conversão  de  cada  bit  (  TAD  )  
Parâmetro
uhlizando  a  configuração  Clock ADC_CLOCK_DIV_16
do ADC selecionado  e  o  clock  
ADC_OFF
do  MCU  de  20  MHz   Desliga  clock  do  ADC  
ADC_CLOCK_DIV_2          Clock  do  ADC  =  Fosc/2  
ADC_CLOCK_DIV_4        Clock  do  ADC  =  Fosc/4  
ADC_CLOCK_DIV_8        Clock  do  ADC  =  Fosc/8  
 
ADC_CLOCK_DIV_16          Clock  do  ADC  =  Fosc/16                                        
 
ADC_CLOCK_DIV_32          Clock  do  ADC  =  Fosc/32  
ADC_CLOCK_DIV_64          Clock  do  ADC  =  Fosc/64  
ADC_CLOCK_INTERNAL   Clock  do  ADC  =  clock  Interno

pedrosarf@ifce.edu.br Prof. Pedro Pedrosa


Ø  Configuração conversor AD
SET_ADC_CHANNEL ( canal )

Definição do pino (ou canal) em que a conversão


está ocorrendo momentaneamente.

Sintaxe:

set_adc_channel(pino);

Exemplos:

set_adc_channel(0);

pedrosarf@ifce.edu.br Prof. Pedro Pedrosa


Ø  Leitura conversor A/D
READ_ADC( )
Leitura do pino (ou canal) em que a conversão
está ocorrendo momentaneamente.
Sintaxe:

read_adc( sem entrada );


Exemplos:

long int valor;


set_adc_channel(1);
delay_us(10);
valor = read_adc( );
pedrosarf@ifce.edu.br Prof. Pedro Pedrosa
Prof. Pedro Pedrosa
Passo-a-passo
1.  Configurar resolução do ADC
2.  Configurar clock utilizado pelo MCU
3.  Configurar as portas que serão usadas como ADC
4.  Configurar as tensões de referência do ADC
5.  Configurar a origem e o valor do clock do ADC
6.  Selecionar o canal do ADC para leitura
7.  Leitura do conversor A/D
8.  Esperar intervalo para o ADC reiniciar o processo
pedrosarf@ifce.edu.br Prof. Pedro Pedrosa
Prof. Pedro Pedrosa
Exemplo  1:  

#include <18f2550.h>
#device ADC=10 //Configura os ADC com 10 bits
#use delay(clock=80000000) //Configura as portas usadas como ADC
long int ad0; //Variável que suporte armazenar um dado de 10 bits
void main( )
{
SETUP_ADC_PORTS(AN0_TO_AN3); //Configura as portas usadas como ADC
SETUP_ADC(ADC_CLOCK_INTERNAL); //Seta a origem do clock
SET_ADC_CHANNEL(0); //Escolhe a entrada lida pela funcao READ_ADC
while(1) //Loop infinito
 {  
     ad0 = READ_ADC(); //Le o pino ADC selecionado
delay_ms(10); //Espera 10ms, intervalo minimo entre leituras ADC
}
}
pedrosarf@ifce.edu.br Prof. Pedro Pedrosa
Exemplo  2:  
#include <18f2550.h>
#device ADC=8 //Configura ADC com 8 bits
#use delay(clock=2000000)
unsigned int ad0, ad1; //Variaveis capazes de armazenar 8 bits (reparar no unsigned)
void main( )
{
SETUP_ADC_PORTS(AN0_TO_AN3); //Configura as portas usadas como ADC
SETUP_ADC(ADC_CLOCK_INTERNAL); //Seta a origem do clock
while(1) //Loop infinito
   {  
SET_ADC_CHANNEL(0); //Escolhe a entrada 0 para ler com READ_ADC  
         ad0 = READ_ADC(); //Le o pino ADC selecionado
delay_ms(10); //Espera 10ms, intervalo minimo entre leituras ADC
SET_ADC_CHANNEL(1); //Escolhe a entrada 1 para ler com READ_ADC  
         ad1 = READ_ADC(); //Le o pino ADC selecionado
delay_ms(10); //Espera 10ms, intervalo minimo entre leituras ADC
}
}
pedrosarf@ifce.edu.br Prof. Pedro Pedrosa
Prof. Pedro Pedrosa
Ø  Prática 01: Projete um hardware e um software utilizando MCU 18f2550 que
realize a leitura do ADC AN0 com 10 bits e que, acenda um led vermelho quando o
valor lido for menor que 2,5V e acenda o led amarelo quando for maior.
+5V  
B7  
A A0   B6  
A1   B5  
A2   B4  
A3   B3  
0V   A4   B2  
A5   B1  
+5V  
3V   B0  

A6  
C0   C7  
C1   C6  
C2   C5  
C4  
pedrosarf@ifce.edu.br Prof. Pedro Pedrosa
Ø  Prática 02: Projete um hardware e um software utilizando MCU
18f2550 que realize a leitura do ADC AN0 com 8 Vbits
Impressão   e demonstre o
isual  
resultado em 3 displays de 7 segmentos.
+5V  
B7   Sa   Sa   Sa  
A A0   B6  
A1   B5  
Sg   Sg   Sg  
Ex:   A2   B4  
A3   B3  
0V   A4   B2   Sd   Sd   Sd  
A5   B1  
+5V  
2V   B0  

3V   A6  
C0   C7  
C1   C6  
C2   C5  
C4  
pedrosarf@ifce.edu.br Prof. Pedro Pedrosa