打印

AD采样遇到的奇怪问题

[复制链接]
1176|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
布丁奶茶|  楼主 | 2016-4-18 10:39 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
沙发
ayb_ice| | 2016-4-18 12:51 | 只看该作者
对着时序图检查程序

使用特权

评论回复
板凳
布丁奶茶|  楼主 | 2016-4-18 14:41 | 只看该作者
void ADC_handle(void)//转换8次,切换通道
{
  unsigned int DATA0,DATA1,DATA2,DATA3,DATA4,DATA5,DATA6,DATA7;
  int A0,A1,A2,A3,A4,A5,A6,A7;
  Delay_US(40);
  for(A0=0;A0<4;A0++)
  {
    ADCON0=0x81;           //选择AN0通道准备进行A/D转换,启动A/D模块
    asm("NOP");            //略做延时
    asm("NOP");            //略做延时
    asm("NOP");            //略做延时
    asm("NOP");            //略做延时
    ADGO=1;                //开始进行A/D转换
    while(ADGO) continue;  //等待A/D转换结束
    DATA0=(unsigned int)ADRESH;//强制类型转换,因为ADRESH是字符型的只能表示8位二进制。所以必须转换成可以容纳10位二进制的整型。
    DATA0= DATA0<<8;       // 将高两位左移8位
    DATA0 += ADRESL;       //低八位加入ADRESL的值。
    Data0+=DATA0;
  }
    Data0=Data0/4;
    Delay_US(40);

  for(A1=0;A1<4;A1++)
  {
    ADCON0=0x89;           //选择AN1通道准备进行A/D转换,启动A/D模块
    asm("NOP");            //略做延时
    asm("NOP");            //略做延时
    asm("NOP");            //略做延时
    asm("NOP");            //略做延时
    ADGO=1;                //开始进行A/D转换
    while(ADGO) continue;  //等待A/D转换结束
    DATA1=(unsigned int)ADRESH;//强制类型转换,因为ADRESH是字符型的只能表示8位二进制。所以必须转换成可以容纳10位二进制的整型。
    DATA1= DATA1<<8;        // 将高两位左移8位
    DATA1 += ADRESL;        //低八位加入ADRESL的值。
    Data1+=DATA1;
  }
    Data1=Data1/4;
    Delay_US(40);

  for(A2=0;A2<4;A2++)
  {   
    ADCON0=0x91;   
    asm("NOP");            
    asm("NOP");           
    asm("NOP");            
    asm("NOP");            
    ADGO=1;               
    while(ADGO) continue;  
    DATA2=(unsigned int)ADRESH;
    DATA2= DATA2<<8;
    DATA2+= ADRESL;
    Data2+=DATA2;
   }
    Data2=Data2/4;
    Delay_US(40);

  for(A3=0;A3<4;A3++)
  {
    ADCON0=0x99;   
    asm("NOP");            
    asm("NOP");            
    asm("NOP");            
    asm("NOP");            
    ADGO=1;               
    while(ADGO) continue;  
    DATA3=(unsigned int)ADRESH;
    DATA3= DATA3<<8;
    DATA3+= ADRESL;
    Data3+=DATA3;
  }
    Data3=Data3/4;
    Delay_US(40);

  for(A4=0;A4<4;A4++)
  {  
    ADCON0=0xA1;   
    asm("NOP");            
    asm("NOP");            
    asm("NOP");            
    asm("NOP");            
    ADGO=1;               
    while(ADGO) continue;  
    DATA4=(unsigned int)ADRESH;
    DATA4= DATA4<<8;
    DATA4+= ADRESL;
    Data4+=DATA4;
  }
    Data4=Data4/4;
    Delay_US(40);

  for(A5=0;A5<4;A5++)
  {
    ADCON0=0xA9;   
    asm("NOP");            
    asm("NOP");            
    asm("NOP");            
    asm("NOP");            
    ADGO=1;               
    while(ADGO) continue;  
    DATA5=(unsigned int)ADRESH;
    DATA5= DATA5<<8;
    DATA5+= ADRESL;
    Data5+=DATA5;
   }
    Data5=Data5/4;
    Delay_US(40);

  for(A6=0;A6<4;A6++)
  {
    ADCON0=0xB1;   
    asm("NOP");            
    asm("NOP");            
    asm("NOP");            
    asm("NOP");            
    ADGO=1;               
    while(ADGO) continue;  
    DATA6=(unsigned int)ADRESH;
    DATA6= DATA6<<8;
    DATA6+= ADRESL;
    Data6+=DATA6;
   }
    Data6=Data6/4;
    Delay_US(40);
  
  for(A7=0;A7<4;A7++)
  {
    ADCON0=0xB9;   
    asm("NOP");            
    asm("NOP");            
    asm("NOP");            
    asm("NOP");            
    ADGO=1;               
    while(ADGO) continue;  
    DATA7=(unsigned int)ADRESH;
    DATA7= DATA7<<8;
    DATA7+= ADRESL;
    Data7+=DATA7;
  }
    Data7=Data7/4;
    Delay_US(40);  
   
    Data_V[D_flag]=Data0;     //将转换的电压值存入数组
    Data_V[D_flag+1]=Data2;
    Data_V[D_flag+2]=Data4;
    Data_V[D_flag+3]=Data6;  
    Data_I[D_flag]=Data1;     //将转换的电流值存入数组
    Data_I[D_flag+1]=Data3;   
    Data_I[D_flag+2]=Data5;  
    Data_I[D_flag+3]=Data7;   
    DATA0=0;                  //AD采样暂存清0
    DATA1=0;
    DATA2=0;
    DATA3=0;
    DATA4=0;
    DATA5=0;
    DATA6=0;
    DATA7=0;
}AD采样的程序,现在发现无线循环下采样不准了?

使用特权

评论回复
地板
一粒尘a_a| | 2016-4-18 16:16 | 只看该作者
难道是跟外部切换电路有关系?

使用特权

评论回复
5
布丁奶茶|  楼主 | 2016-4-18 17:19 | 只看该作者
自己解决了
清0清错了,应该是全局变量清0

使用特权

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

本版积分规则

44

主题

180

帖子

1

粉丝