打印

C8051F350 ad采样通道切换遇到的问题

[复制链接]
6006|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
dsoyy|  楼主 | 2011-10-30 09:52 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我用C8051F350,利用其自带的差分AD采样外部压力传感器传递过来的差分信号。
其中AD0-AD1,对应传感器A,其中AD2-AD3,对应传感器B.

要求是实时采样A\B两个传感器的信号,所以我采样一次A传感器,便切换到B传感器采样一次,再切换到A传感器采样一次,周而复始。

遇到的问题如下:
单独采样A或者B传感器均正确。
循环切换采样A\B两个传感器时,A传感器信号变大,B传感器信号不变,采样的结果是A\B两个传感器信号均变大;
同样,B传感器信号变大,A传感器信号不变,采样结果也是A\B同时变大。
信号变小,情况也是这样。

费解啊,现将采样部分代码和通道切换代码贴到下面,求指教。
void ADC0_ISR (void) interrupt 10
{
   static LONGDATA rawValue;
   unsigned long mV;
  
   while(!AD0INT);                     // Wait till conversion complete
   AD0INT = 0;                         // Clear ADC0 conversion complete flag

   // Copy the output value of the ADC
   rawValue.Byte[Byte3] = 0x00;
   rawValue.Byte[Byte2] = (unsigned char)ADC0H;
   rawValue.Byte[Byte1] = (unsigned char)ADC0M;
   rawValue.Byte[Byte0] = (unsigned char)ADC0L;


   mV = 0;
   mV = rawValue.result  / 690;        //  mV = rawValue.result *10  / 6710;放大10倍          16776802         16738484
   
         
          ADC0MD  &= ~0x70;                           //使AD空闲
   
        if(ADC0MUX == 0x01 )          //切换通道
        {
           ADC0MUX = 0x32 ;
         
           printf("RIGHT:AA55%5ld55AA",mV);
        }
         else if(ADC0MUX == 0x32 )//切换通道
        {
           ADC0MUX = 0x01;
          
           printf("    LEFT:AA55%5ld55AA\r\n",mV);
        }

         
         ADC0MD = 0x83;                //使能AD
          

}

相关帖子

沙发
我是土匪| | 2011-10-31 09:52 | 只看该作者
本帖最后由 我是土匪 于 2011-10-31 11:12 编辑

:(

使用特权

评论回复
板凳
Harvard| | 2014-2-28 15:55 | 只看该作者
问题解决了吗? 是不是通道切换的过程中 延时不够啊.

使用特权

评论回复
地板
lchli8| | 2017-4-17 20:03 | 只看该作者
ADC0MD  &= ~0x70;                           //使AD空闲
这句不对
应该是:
ADC0MD  |= 0x78;                           //使AD空闲

使用特权

评论回复
5
ayb_ice| | 2017-4-18 08:41 | 只看该作者
正确配置跟踪方式和时间就可以了

使用特权

评论回复
6
Mengapple| | 2017-6-26 11:11 | 只看该作者
你是最后怎么改的,我现在也在做这个,希望请教你一下。两路差分输出的问题,方便回答吗?

使用特权

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

本版积分规则

144

主题

566

帖子

3

粉丝