/*************************************************
函数名称:void ad_set(int ch)
输入参数:(int ch)
输出参数:void
功能描述:设置adc 参数
创建日期:2013-02-28
修改日期:2013-02-28
**************************************************/
//AD初始化
void ad_set(int ch)
{
AD1PCFG = ch;
AD1CON1=0x80e0; //开启AD模块,输出整数,自动转换,SAMP置高启动AD
AD1CON2=0x0002; //参考电压为电源电压,连续转换21次,16字节位缓冲器 AD1CON3=0X1F02; //时钟源为系统时钟,自动采样时间位1TAD,转换时钟选择位TCY
AD1PCFG=0xffff-(1<<ch); ////单独使能AN9,其他为I/O口
AD1CON1bits.ADON = 1; // 打开 ADC
}
/*************************************************
函数名称:int ad_read(int ch)
输入参数:(int ch)
输出参数:int adc 值
功能描述:读取adc 数据
创建日期:2013-02-28
修改日期:2013-02-28
**************************************************/
int ad_read(int ch)
{
AD1CHS = ch; // 选择通道
AD1CON1bits.SAMP=1; //启动转换
while(!AD1CON1bits.DONE); //等待转换结束
AD1CON1bits.SAMP = 0;
AD1CON1bits.ADON = 0;
return ADC1BUF0; //发送AD值
}
void adc2_test()
{
unsigned int ADvalue;
mInitCtrlIO();
ad_set(2); // VMEAS
ADvalue=ad_read(2);
}
有做过ADC的大侠说说,我做了个测试
按一次键就读一次AD值,差别挺大的,不是一点点;
3.01 3.03.。。大概这个 级别; |