打印
[ZLG-ARM]

AD采样时出现怪现象。。。

[复制链接]
1716|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
jstu023123|  楼主 | 2008-1-12 16:26 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
     AD采样电池电压(8V),电压经滤波电路和电阻分压(2.5V)接到AIN1输入,但对ADCR操作时出现怪现象:ADC_Sample()调用ADC_Selchan()和ADC_Enable(),外部电阻分压值不对,与电阻值不成比,而注释掉ADC_Selchan() 或 ADC_Enable(),则电压就对了。不知道是怎么回事?程序如下:

#define  ADC_Enable( )     { ADCR |= (1<<24);  }    // 立即启动转换
#define  ADC_IsFinished( )  {  while( (ADDR&0x80000000) == 0 );  }   // 等待
void  ADC_Selchan( UINT8 channum )   { ADCR = (ADCR&(~0xFF))|(channum); }   // 选择通道

void ADC_Init( void )
{    
   ADCR = 0                           // SEL = 0 ,选择通道0
              | ((Fpclk / 1000000 - 1) << 8)          // 时钟为1MHz
              | (0 << 16)                            // BURST = 0 ,软件控制转换操作
              | (0 << 17)                             // CLKS = 0 ,使用11clock转换
              | (1 << 21)                            // PDN = 1 , 正常工作模式
              | (0 << 22)                            // TEST1:0 = 00 ,正常工作模式
              | (0 << 24)                            // START = 1 ,直接启动ADC转换
              | (0 << 27);                // EDGE = 0 
 }

UINT32 ADC_Sample( UINT8 num )
{
    UINT32 dat=0;
    
    ADC_Selchan( num );          *
    ADC_Enable( );               *
    ADC_IsFinished( );
    dat = ADDR;

    return ((dat>>6)&0x3ff);
 }   


int main (void)
{
    UINT32 dat=0;
    char str[20];
   
    LCD_Init( );
    LCD_Cls( ); 
   
    ADC_Init( );
       
    while(1)
    {
     dat = ADC_Sample( AIN1_SEL );     
     sprintf( str, "%4d", dat );
     LCD_DispStr( 8, 2, str, NORMAL_VIEW ); 

     Delay(15);
    }
    return 0;
}

相关帖子

沙发
blueskyjwf| | 2008-1-12 17:14 | 只看该作者

可能有两个原因。

发生这种现象可能有两个原因:
1、数字口开启;
2、ADC输入阻抗不够大。

使用特权

评论回复
板凳
jstu023123|  楼主 | 2008-1-14 15:16 | 只看该作者

回blueskyjwf

   数字口开启?PINESL1复位时那几个引脚都为AD转换功能啊
   我单独提供3.3V,分压、输入到AIN1,此时引脚电压高于3.3V的,是什么原因啊,属性设置不对?

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

40

主题

93

帖子

0

粉丝