本文主要是介绍LPC1768菜鸟学习之ADC.doc,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
要使用ADC功能,就要在PCONP选择选PCADC,在PINSEL选择对应管脚为ADC管脚。
LPC1768有8个引脚复用为A/D输入脚。
12位主次逼近式模数转换器;
测量范围:0~VREFP(通常为3V;不超过VDDA);
要使用的寄存器:
A/D控制寄存器 ADCR
A/D全局数据寄存器 ADGDR 用来存储最近一次A/D转换的结果,各个通道都有自己的数据寄存器ADDR0 ~ADDR7
以下面的实例来说明。
LPC1768板子上有个电位器与AD0.5相连接,调节电位器就可以改变AD0.,5的电压。
初始化
void ADC_Init (void) {
LPC_PINCON->PINSEL3 &= ~(3UL<<30); /* P1.31 is GPIO */
LPC_PINCON->PINSEL3 |= (3UL<<30); /* P1.31 is AD0.5 */
LPC_SC->PCONP |= (1<<12); /* Enable power to ADC block */
LPC_ADC->ADCR = (1<< 5) | /* select AD0.5 pin */
(4<< 8) | /* ADC clock is 24MHz/5 */
//CLKDIV=4
(1<<21); /* enable ADC */
}
ADC时钟不能超过13MHz,,ADC CLK=PCLK/(CLKDIV+1).
LPC_ADC->ADCR |= (1<<24); /* start conversion */
或者在之前可以加一个 LPC_ADC->ADCR &= ~(7<<24); /* stop conversion */ 来排除干扰之类的~~~,这个其实就是结束A/D转换的代码。
转换出来的数据可以再两个寄存器里看到,ADGDR和ADDR5,这里我们用的是ADGDR.
对了,还要用(LPC_ADC->ADGDR & (1UL<<31))==1来判定是否转换完成才能得到转换后的数据,
data=( LPC_ADC->ADGDR >> 4) &0xFFF;
因为ADGDR的31位,A/D转换结束置1,当数据被读出就自动清0了。
ADC_Data = (ADC_Data * 3300)/4096;
这句话的意思就是在参考电压3300mv下得到的电压,4960=,12位AD的意思,不过看网上说应该4059好些,理由摘抄如下:
ADC采集出来的数据,是0~4095,不会出现4096这个值,如果你4096等分,那就不能得到3.3V了。
会比3.3V少那么一点点。
按4095等分,那么可以从0~3.3V,线性变化,根据ADC转换结果,测量电压:最低是0V,最高是3.3V
好了,简单的A/D采样就到这。
这篇关于LPC1768菜鸟学习之ADC.doc的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!