Conversor AD Do PIC
-
Upload
francisco-josivan -
Category
Documents
-
view
230 -
download
0
Transcript of Conversor AD Do PIC
-
8/19/2019 Conversor AD Do PIC
1/13
Centro de Tecnologia Microgenios - Todos os direitos reservados
Clique aqui para Imprimir o doc umento
Conversor A/D do PIC 1.0 Introdução
Introdução
O PIC18F452 possui internamente 8 canais de A/D com resolução de 10 bits cada.Comu m conversor A/D com resolução de 10 bits e tensão de referência de 5V,
podemos obter um valor de 4,8876.. mV, pois 5V/ (2E10 - 1) = 4,8876... mV.
Os conversores A/D dos PICs utilizam uma técnica de aproximação sucessivas,normalmente com resolução de 10 bits, com clock selecionável pelo usuário e múltiplasentradas multiplexadas.
-
8/19/2019 Conversor AD Do PIC
2/13
-
8/19/2019 Conversor AD Do PIC
3/13
ADCS1 , ADCS2: Bits de seleção de velocidade de conversão A/D
tabela 1.0
CHS2, CHS0: Bit de seleção de canal A/D
GO/DONE: Bit de status da conversão A/D0 - Conversão A/D não está sendo realizada 1 - Conversão A/D está sendo realizada
ADON: Liga ou desliga o A/D0 - Conversor A/D desligado 1 - Conversor A/D ligado
Antes de configurarmos os registradores ADCS2, ADCS1 e ADCS0,devemos levar em consideração a frequência do cristal que estamos utilizando, poisnosso conversor necessita de 1,6us para fazer a conversão.
A tabela seguinte apresenta os valores de configuração dos registradoresADCS2, ADCS1 e ADCS0 para as faixas de frêquencia do cristal utilizado.
Registrador ADCON1:
-
8/19/2019 Conversor AD Do PIC
4/13
vejamos o funcionamento de cada bit desse registrador:
ADCON1:
ADFM
ADCS2 ------ ----- PCFG3 PCFG2 PCFG1 PCFG0 Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0
ADFM : Ajusta o formato do resultado da conversão A/D 0 - Justifica a direita 1 - Justifica a esquerda
ADCS2 : Bit de seleção da velocidade de conversão *consulte a tabela 1.0
PCFG3, PCFG2, PCFG1, PCFG0: bits configuração do A/D
tabela 2.0
O bit de ADFM tem a função de organizar o resultado da conversão A/D, de forma queo os valores convertidos sejam justificados a direita ou a esquerda nos registradoresADRESH e ADRESL. Caso venhamos configurar ADFM = 1, organizamos o valor daconversão a direita, ou seja, os oitos bits menos significativo será armazendo em
ADRESL, e os 2 bits mais significativo serão armazenados em ADRESH.
-
8/19/2019 Conversor AD Do PIC
5/13
Caso ADFM = 0, justificaremos a esquerda os valores de conversão, desta forma osoitos bits mais significativos ficarão em ADRESH e os 2 menos significativo ficará emADRESL.
Através dos bits PCFG3, PCFG2, PCFG1, PCFG0 informamos quais os pinos que
serão A/D ou I/O digital.
Exemplo (consulte tabela 2.0):
ADCON1 = 0 ; //programamos todos os pinos RA0, RA1 , RA2 , RA3, RA5, RE0, RE1,RE2 como A/DADCON1 = 6 ; //programamos todos os pinos RA0, RA1 , RA2 , RA3, RA5, RE0, RE1,RE2 como I/O de uso geralADCON1 = 14 ; //programamos os pinos RA1 , RA2 , RA3, RA5, RE0, RE1, RE2como I/O de uso geral e somente RA0 como AD (referência VDD).ADCON1 = 4 ; //programamos os pinos RA2 , RA5, RE0, RE1, RE2 como I/O de uso
geral e RA0, RA1 e RA3 como AD (referência VDD).
Nosso módulo possui um conversor com resolução máxima de 10 bits, ou seja, 1024divisões (0 a 1023 divisões). Podemos configurar e determinar tensões de referênciaexterna para nosso conversor A/D através dos pinos AN3 e AN2, ou selecionar a tensãointerna do chip (vcc e gnd) como referência.
Fórmula de conversão analógico para digital:
Rad = ( Vin - Vref-) * 1023 / (Vref+ - Vref-)
onde:
Rad = Resultado da conversão
Vref+ e Vref- = valor de tensão de referência máxima e mínima
Vin = Tensão de entrada no pino A/D
obs: 1023 é o valor máximo de conversão do A/D, lembrando que o valor é de 0 a 1023.Analize o esquema elétrônico seguinte:
-
8/19/2019 Conversor AD Do PIC
6/13
figura 01
Analizando o esquema eletrônico apresentado, vamos encontrar o valor analógicoconvertido para digital:
Digamos que o valor da tensão Vin no momento de leitura do AN0 seja de 2V.
Nossa Fórmula:Rad = ( Vin - Vref-) * 1023 / (Vref+ - Vref-) logo:Rad = (2 - 1) *1023 / (3 - 1)Rad = 1 * 1023 / 2Rad = 511
OBS: A TENSÃO DE VREF EXTERNA NUNCA PODERÁ ULTRAPASSAR ATENSÃO DE ALIMENTAÇÃO DO MICROCONTROLADOR.
Trabalhando com o MikroC
No mikroC utilizamos os seguinte função para leitura do conversor A/D do PIC:
-
8/19/2019 Conversor AD Do PIC
7/13
sintaxe:
Adc_Read(canal_ AD);
onde:
Canal_AD: canal do conversor AD do PIC que desejamos ler. O número do canal ADdepende do tipo de PIC usado.
Exemplo:
int leitura_ad; leitura_ad = Adc_Read(0); //le canal ad0 do PIC e salva valor navariável temp_res
A função adc_read salva o valor da conversão AD (canal 0 - pino RA0) na variável
leitura_ad.
Lembre-se que o valor da resolução do AD do PIC18F452 é de 10 bits, e por essemotivo devemos utilizar uma variável do tipo inteiro para armazenar o valor do A/D.
Estudo do registrador ADCON1:
O registrador ADCON1 é responsável por configurar o modo de trabalho dos pinos comA/D. Através dos bits PCFG3, PCFG2, PCFG1, PCFG0 configuramos o pino comoA/D ou como I/O de uso geral.
Exemplo de programa:
Acompanhe o exemplo simples onde utilizamos um potenciometro a entrada RA0 e umdisplay LCD 16x2 para visualizarmos o valor da conversão do AD.
-
8/19/2019 Conversor AD Do PIC
8/13
Exemplo de programa:
/****************************************************************************Centro de Tecnologia MicrogeniosPrograma: Diplay_7_seg_01Placa: KIT PICGENIOSObjetivo: este programa tem por função ler o canal AD0 e escrever nolcdo valor de conversão**********************************************************************
**********/
char texto[16];int temp_res = 0;
void main() {trisd = 0; //define portd como saida trise = 0; //define porte como saida trisa.f0 = 1; //define pinos RA0 como entradaADCON1 = 0B00001110; //configura pino RA0 como entrada analógica
e os demais com I/O digital
Lcd8_Config(&PORTE,&PORTD,2,1,4,7,6,5,4,3,2,1,0); //inicializa lcdLcd8_Cmd(Lcd_Clear); //apaga lcdLcd8_Cmd(LCD_CURSOR_OFF); //desliga cursor do lcd
-
8/19/2019 Conversor AD Do PIC
9/13
Lcd8_Out(1, 1, "Canal AN0: "); //escreve mansagem na linha 1,coluna 1 do lcd
Delay_ms (10); //delay 10 milisegundos
do
{temp_res = Adc_Read(0); //le canal ad0 do PIC e salva valor na
variável temp_resDelay_10us; //delay de 10 microsegundoswordToStr(temp_res, texto); //converte valor da conversão do
ad0 para stringlcd8_out(1,11,texto); //escreve no lcd o valor da conversão do
ad0} while (1);
}
Detalhes do programa:
Primeiramente definimos as variáveis globais do programa
char texto[16];int temp_res = 0;
Depois iniciamos a função main() e definimos o sentido dos ports que participam docontrole do LCD: Repare que programamos o registrador ADCON1 com o valor 2, poiso porte do PIC é utilizado como I/O para controlar o LCD.
trisd = 0; //define portd como saida trise = 0; //define porte como saida trisa.f0 = 1; //define pinos RA0 como entradaADCON1 = 0B00001110; //configura pino RA0 como entrada analógica
e os demais com I/O digital
Os comandos seguintes são utilizados para controle e escrita do display LCD.
Lcd8_Config(&PORTE,&PORTD,2,1,4,7,6,5,4,3,2,1,0); //inicializa lcdLcd8_Cmd(Lcd_Clear); //apaga lcdLcd8_Cmd(LCD_CURSOR_OFF); //desliga cursor do lcdLcd8_Out(1, 1, "Canal AN0: "); //escreve mansagem na linha 1,
coluna 1 do lcdDelay_ms (10); //delay 10 milisegundos
O comando seguinte lê o canal AN0 do PIC e salva o valor na variável temp_res.
-
8/19/2019 Conversor AD Do PIC
10/13
temp_res = Adc_Read(0); //le canal ad0 do PIC e salva valor navariável temp_res
A função abaixo tem pertence ao compilador mikroC e tem por objetivo converter ovalor de uma variável numérica do tipo word em string. Esta conversão é necessária pois iremos escrever o valor numérico da variável temp_res, resultado da conversãoAN0, e escrever no LCD. A variável que assimilará o valor convertido em string échamada de "texto".
wordToStr(temp_res, texto); //converte valor da conversão do ad0 para string
Em seguida enviamos para o LCD o valor da variável texto.
lcd8_out(1,11,texto); //escreve no lcd o valor da conversão do ad0
Projeto: Leitura do sensor de Temperatura LM35
Para solidificarmos a teoria de leitura do A/D do PIC, vamos efetuar a leitura de sensorde temperatura LM35 conectado ao canal AN1 e de um trimpot conectado ao canal AN0do PIC. O valor da conversão deverá ser escrito no LCD:
Esquema elétrico:
-
8/19/2019 Conversor AD Do PIC
11/13
Programa:
/****************************************************************************Centro de Tecnologia MicrogeniosPrograma: Diplay_7_seg_01Placa: KIT PICGENIOSObjetivo: este programa tem por função ler o canal AD0 e AD1 eescrever no lcdo valor de conversão********************************************************************************/
char texto[16];int leitura_an0 = 0;int leitura_an1 = 0;
void main() {trise = 0; //define portb como saidatrisd = 0; //define portd como saidaADCON1 = 0b00000100; //habilita canal A/D 0 e A/D1 do
PICtrisa = 0b00001111; //define pinos como entrada
Lcd_custom_Config(&PORTD,7,6,5,4,&PORTE,2,0,1); //inicializa lcdLcd8_Cmd(Lcd_Clear); //apaga lcdLcd8_Cmd(LCD_CURSOR_OFF); //desliga cursor do lcd
-
8/19/2019 Conversor AD Do PIC
12/13
Lcd8_Out(1, 1, "Canal AN0: "); //escreve mansagem na linha 1,coluna 1 do lcd
delay_ms (10); //delay de 10msLcd8_Out(2, 1, "Canal AN1: "); //escreve mensagem na linha 2,
coluna 1 do lcddelay_ms (10); //delay 10 milisegundos
do
{leitura_an0 = Adc_Read(0); //le canal ad0 do PIC e salva
valor na variável leitura_an0wordToStr(leitura_an0, texto); //converte valor da conversão do
ad0 para stringlcd8_out(1,11,texto); //escreve no lcd o valor da
conversão do ad0
leitura_an1 = Adc_read(1); //lê canal ad1 do PIC e salvavalor na variável leitura_an1
leitura_an1 = leitura_an1 / 2.048; //ajusta a escala de conversão
do sensor de temperaturawordToStr(leitura_an1, texto); //converte valor da conversão doad1 para string
lcd8_out(2,11,texto); //escreve no lcd o valor daconversão do ad1
} while (1);
}
O o sensor de temperatura utilizado em nosso projeto é o LM35 fabricado pela empresa National Semicondutores. Este circuito integrado é um sensor de temperatura linear cujovalor de saida de tensão é diretamente proporcional à temperatura. Sua escala já écalibrada em graus celsius com saida de 10mV / ºC no ranger minimá de - 55 ºC a +150ºC.
A resolução do A/D de nosso microcontrolador é de 10 bits e em nosso programautilizamos a tensão de referencia interna do A/D (5V).
Calculo para leitura correta do sensor de temperatura:
Resolução do PIC:
Tensão de referencia (resolução do AD - 1) = resolução
5V (1024 - 1) = 4,8876 mV
A resolução do A/D do PIC para tensão de referencia de 5V é de 4,8876mV
Resolução do sensor LM35:
10mV/ºC (dado fornecido pelo fabricante)
-
8/19/2019 Conversor AD Do PIC
13/13
Logo teremos
10 / 4,8876 = 2,048
Em nosso programa arrendondamos o valor 2.046 para 2 para que nosso programa não
ultrapasse o valor limite demo do compilador (2Kbyte).
leitura_an1 = adc_read(1); //lê canal ad1 do PIC e salva valorna variável leitura_an1 leitura_an1 = leitura_an1 / 2.048; //ajusta a escala de leitura dosensor lm35.
voltar para o topo da pagina
Centro de Tecnologia Microgenios - Curso de Microcontroladores PIC - Programaçãoem CMicrogenios © 1998 - 2007. Todos os direitos reservados. É proibido cópia parcial ouintegral desse material sem prévio aviso. Maiores informações:[email protected]