当前位置: 代码迷 >> 驱动开发 >> mini2440 Ad转换时 AIN1置空时输出不稳定,该怎么处理
  详细解决方案

mini2440 Ad转换时 AIN1置空时输出不稳定,该怎么处理

热度:472   发布时间:2016-04-28 09:59:47.0
mini2440 Ad转换时 AIN1置空时输出不稳定
如题   测试AIN0时正常   程序的AIN改为123时便会出现  即使AIN123悬空也会有变化的数据输出。。求解答
#define PRSC_EN 1 //允许预分频
#define PRSCVL 19 //预分频值
#define STDBM 0  //正常工作模式
#define READ_START 0  //读数时不进行A/D转换   2种启动方式之一
#define Adc_Start() {ADCCON|=1;} 
/***********************************************
*函数名称:void ADC_Init(unsigned char channel) 
*参数说明:channel:通道
*返 回 值:无
*全局变量: 无
*功    能:ADC初始化,手动启动ADC,ADC输入时钟为1MHz             
************************************************/
void ADC_Init(unsigned char channel)     
{
ADCCON&=(~((1<<14)|(0xff<<6)|(0x7<<3)|(1<<2)|(1<<1)|(1<<0))); //14-0 bit清零
ADCCON|=(PRSC_EN<<14)|(PRSCVL<<6)|(channel<<3)|(STDBM<<2)|(READ_START<<1);
   // [14:] 1 开启预分频,预分频值19,模拟通道(0),不待机,  手动启动
}

/***********************************************
*函数名称:int ADC_Read(void) 
*参数说明:无
*返 回 值:寄存器ADCDAT0中的ADC转换数据值
*全局变量: 无
*功    能:返回普通ADC转换数据值       
************************************************/
int ADC_Read(void)
{
Adc_Start(); //启动A/D转换
while(ADCCON&(1<<0)); //因为成功启动A/D转换后,该位会
//自动清零,因此在这里检查ADC是否真正启动
while(!(ADCCON&(1<<15)));  //使用查询方式等待ADC转换结束

return ((int)(ADCDAT0&0x3ff)); //ADC转换结束后,从寄存器
//ADCDAT0中读取A/D转换值。注意,低10位才是A/D
//转换值,所以需要将高位屏蔽掉

}
------解决思路----------------------
悬空理论上应该是随机数字,悬空就像天线一样,更容易受到电磁波影响。
------解决思路----------------------
引用:
Quote: 引用:

悬空理论上应该是随机数字,悬空就像天线一样,更容易受到电磁波影响。

说的对。。。你知道mini2440的AD模块怎么通过设置READ_START=1启动自动转换么

要么开启中断,AD转换完成会触发中断,还有就是在loop中循环读取转换完成标志位,然后再读取。请仔细阅读手册,操作对应的寄存器即可。
------解决思路----------------------
AD转换完成会触发中断,还有就是在loop中循环读取转换完成标志位,然后再读取。请仔细阅读手册,操作对应的寄存器即可。