Programação do ADC LPC1768: Guia Completo
Programação do ADC LPC1768: Guia Completo
Índice
Pino Description
AD0.0 para Pinos de entrada analógica.
AD0.7(P0.23/24/25/26, Nota da Ficha Técnica: “Se o ADC for utilizado, os níveis de sinal no analógico
P1.30/31, P0.3/2) os pinos de entrada não devem estar acima do nível de VDDAa qualquer momento.
Caso contrário, as leituras do conversor A/D serão inválidas. Se o A/D
o conversor não é usado em uma aplicação, então os pinos associados
com entradas A/D podem ser usadas como pinos de IO digitais tolerantes a 5V.
VREFP, VREFN Esses pinos de tensão de referência são usados para ADC e DAC.
VDDA, VSSA VDDAé o pino de Potência Analógica e VSSAo pino de aterramento é usado para alimentar o
ADC module.
estar adequadamente isolado/desacoplado de VCC, no mínimo usando um
Pino de Potência Analógica ou seja VDDAdeve
bico de ferrite e um capacitor de desacoplamento, para suprimir o ruído presente em VCCferro e também para suprimir
O ruído de comutação do MCU que pode ser induzido no VCCtrilho.
RegistrosADCLPC176x
Vamos ver os registradores que são usados para programação de ADC.
1)ADCR– Registro de Controle A/D: Este é o registro de controle principal para AD0.
[Link][7:0] – SEL:Bit 'x' (neste grupo) é usado para selecionar o pino A0.x no caso de AD0.
2. Bits[15:8] – CLKDIV: O clock do periférico ADC, ou seja, PCLK_ADC0 é dividido por CLKDIV+1 para obter
o clock do ADC. Note que a velocidade do clock do ADC deve ser <= 13Mhz! Conforme o manual do usuário deve
programar o menor valor neste campo que resulta em uma velocidade de clock de 4,5 MHz ou um pouco menos.
[Link][16] – BURST: Definido como 1 para realizar conversões repetidas, caso contrário 0 para controle de software
conversões. Nota: os bits START devem ser definidos como 000 quando BURST=1 ou as conversões não ocorrerão.
começar. Consulte o manual do usuário para informações detalhadas.
[Link][21] – PDN : Defina como 1 para energizar o ADC e torná-lo operacional. Defina como 0 para
colocando no modo de desligamento.
[Link][26:24] – INÍCIO: Esses bits são usados para controlar o início da conversão ADC quando
BURST (bit 16) está definido como 0. 000 = Nenhum início, 001 = Iniciar a conversão agora, para outros valores
consulte o Manual do Usuário LPC17xx.
[Link][27] – EDGE:Set this bit to 1 to start the conversion on falling edge of the selected
Sinal CAP/MAT e defina este bit como 0 para iniciar a conversão na borda de subida do selecionado
sinal. (Nota: Este bit é usado apenas no caso em que o INÍCIO contém um valor entre
010 a 111 como mostrado acima.)
7. Outras partes estão reservadas.
2)ADGDR– Registro Global de Dados A/D: Contém os flags do ADC e o resultado do mais recente
Conversão A/D.
[Link][15:4] – RESULT: Quando o bit DONE = 1, esses bits fornecem uma fração binária que
representa a tensão no pino AD0.x, na faixa VREFP & VREFNO valor de 0x0 indica que
a tensão no pino dado era menor, igual ou maior que VREFN. E um valor de 0xFFF
significa que a tensão de entrada estava próxima, igual ou superior ao VREFP.
[Link][26:24] – CHN: Representa o canal do qual os bits RESULT foram convertidos. 000=
canal 0, 001 = canal 1 e assim por diante.
[Link][30] – EXCESSO: No modo de burst, este bit é 1 em caso de um excesso, ou seja, o resultado de
a conversão anterior sendo perdida (sobrescrita). Esta parte será limpa após a leitura do ADGDR.
[Link][31] – CONCLUÍDO: Quando a conversão ADC é concluída, este bit é 1. Quando este registrador (ADGDR)
é lido e ADCR é escrito, este bit é limpo, ou seja, definido como 0. Se ADCR for escrito enquanto um
a conversão está em andamento, então este bit é definido e uma nova conversão é iniciada.
5. Outras partes estão reservadas.
4)ADDR0 a ADDR7 – Registros de dados A/D: Este registro contém o resultado do mais recente
a conversão foi concluída no canal correspondente [0 a 7]. Sua estrutura é a mesma do ADGDR, exceto
Os bits[26:24] não são utilizados/reservados.
5) ADSTAT - Registro de Status A/D: Este registro contém as bandeiras DONE e OVERRUN para todos os
Canais A/D junto com a bandeira de interrupção A/D.
[Link][7:0] – DONE[7 a 0]: Aqui o bit x reflete a bandeira de status DONEx do registro de resultado para
Canal A/D x.
[Link][15:8] – OVERRUN[7 a 0]: Mesmo aqui o bit x espelha o flag de status OVERRUNx de
o registro de resultado para o canal A/D x
[Link] 16 – ADINT: Este bit representa a flag de interrupção A/D. Está em 1 quando qualquer um dos individuais
Os sinais de conclusão do canal A/D estão afirmados e habilitados para contribuir para a interrupção A/D via o
Registro ADINTEN (dado abaixo).
4. Outras partes estão reservadas.
ModosdeADCLPC1768,ConfiguraçãoeProgramação
Modos de ADC no LPC1768 e LPC1769:
1. Modo controlado por software: No modo software, apenas uma conversão será realizada por vez.
Para realizar outra conversão, você precisará reiniciar o processo. No modo de software,
apenas 1 bit no campo SEL do ADCR pode ser 1, ou seja, apenas 1 Canal (ou seja, Pino) pode ser selecionado para
conversão de cada vez. Portanto, as conversões podem ser feitas apenas em qualquer canal, mas uma de cada vez.
2. Modo de Hardware ou Modo de Explosão: No modo de Hardware ou Modo de Explosão, as conversões são realizadas
continuamente nos canais selecionados de forma round-robin. Como as conversões não podem
ser controlado por software, O excesso pode ocorrer neste modo. O excesso é o caso quando um
o resultado da conversão anterior é substituído pelo novo resultado da conversão sem que o resultado anterior seja
leia, ou seja, a conversão é perdida. Normalmente, uma interrupção é usada no modo Burst para obter o mais recente
resultados da conversão. Esta interrupção é acionada quando a conversão em um dos canais selecionados
termina.
1A. Configurando e configurando o Módulo ADC para modo controlado por software
Primeiro, vamos definir alguns valores que nos ajudarão a configurar e inicializar o registro ADCR.
Bloco ADC.
#define ADC_DONE (1U<<31) //defina como um valor sem sinal ou o compilador irá gerar erro
#61-D aviso
//==OU==
LPC_SC->PCONP |= ADC_CLK_EN; //Habilitar o clock do ADC
LPC_ADC->ADCR = ADCR_SETUP | SEL_AD0_0 | START_CNV;
#include<lpc17xx.h>
#include<stdio.h>
#include"ocf_lpc176x_lib.h" //contém uart, timer e fputc para redirecionar printf
#define VREF 3.3 //Tensão de Referência no pino VREFP, dado que VREFN = 0V(GND)
#define ADC_CLK_EN (1<<12)
#define SEL_AD0_0 (1<<0) //Selecionar Canal AD0.0
#define CLKDIV 1 //Divisor do relógio ADC (ADC_CLOCK=PCLK/CLKDIV+1) = 12.5Mhz @
PCLK de 25MHz
#define PWRUP (1<<21) //configurá-lo para 0 irá desligá-lo
#define START_CNV (1<<24) //001 para iniciar a conversão imediatamente
#define ADC_DONE (1U<<31) //defina como um valor unsigned ou o compilador irá gerar um erro
#61-D aviso
#define ADCR_SETUP_SCM ((CLKDIV<<8) | PWRUP)
int principal(void)
{
//SystemInit(); //Chamado pelo código de inicialização, configura CCLK=100Mhz,
PCLK=25Mhz
initUART0();//Inicializa UART0 para uart_printf() - ambos definidos em
tmr_uart_printf.cpp
initTimer0();//Para delayMS() - ambos definidos em tmr_uart_printf.cpp
enquanto(1)
{
LPC_ADC->ADCR |= START_CNV;//Iniciar nova Conversão
Saída Serial :
ocf_lpc176x_lib.ho cabeçalho usado na fonte também contém código para retargeting printf().
redirecionar printf() usando tutorial UARTpara mais.
Verifiquecomo
LPC1768: Programação de ADC
Neste tutorial, vamos discutir como usar o ADC embutido LPC1768.
Aqui discutiremos o registro associado ao ADC e, principalmente, nos concentraremos no básico.
registros necessários para ADC.
Os outros recursos, como Conversão em Burstable, acesso a diferentes registradores para cada canal, ADC
A conversão dependendo de temporizadores, interrupções ADC etc. estará fora do escopo deste tutorial.
Mais tarde, veremos como interagir com um POT, LDR e Sensor de Temperatura (LM35).
Finalmente, veremos como usar as bibliotecas ExploreEmbedded para ADC.
Registros ADC
A tabela abaixo mostra os registradores associados ao ADC LPC1768.
Nós vamos nos concentrar apenas no ADCR e no ADGDR, pois estes são suficientes para um simples A/D.
conversão.
No entanto, uma vez que você esteja familiarizado com o ADC LPC1768, pode explorar os outros recursos e o
registros associados.
Registrar Descripton
ADGDR Registrador de Dados Global A/D: Este registrador contém o bit DONE do ADC e o resultado da A mais recente
ADDR0 - ADDR7 Registro de Dados do Canal A/D: Contém o valor recente do ADC para o respectivo canal
ADSTAT Registro de Status A/D: Contém a bandeira DONE e OVERRUN para todos os canais do ADC
Bit 16 – BURST
Este bit é usado para conversão BURST. Se este bit estiver definido, o módulo ADC realizará a conversão.
para todos os canais que estão selecionados (SET) nos bits SEL.
Limpar esta parte desativará a conversão BURST.
Os casos restantes (010 a 111) tratam de iniciar a conversão na ocorrência de uma borda em um
pino CAP ou MAT particular.
Bit 27 - BORDA
Este bit é significativo apenas quando o campo START contém 010-111. Ele inicia a conversão em
entrada CAP ou MAT selecionada.
0 - Na Borda de Queda
1 - Na Borda de Subida
ADGDR ( Registrador Global de Dados ADC )
ADGDR
Bit 27 - TRANSCURSO
Este trecho é definido durante o modo BURST, onde os dados de conversão anteriores são sobrescritos por
novo valor de conversão A/D.
Bit 31 - DONE
Este bit é definido como 1 quando uma conversão A/D é concluída. Ele é limpo quando este registrador é lido e
quando o ADCR é escrito. Se o ADCR é escrito enquanto uma conversão ainda está em andamento, esse bit
está definido e uma nova conversão é iniciada.
Pode-se usar o Registro de Dados Global A/D para ler todos os dados do ADC ou usar o A/D
Registros de Dados do Canal. É importante usar um método de forma consistente porque o FEITO e
OVERRUN flags can otherwise get out of synch between the AD0GDR and the A/D Channel
Registros de Dados, potencialmente causando interrupções ou atividades de DMA errôneas.