智能车制作

标题: 定时中断中的AD采样 [打印本页]

作者: linping9656    时间: 2012-3-20 07:37
标题: 定时中断中的AD采样
写了一个定时中断函数,将AD采样写在定时中断中,结果不能得到正确的AD值,可是,单独利用AD中断,在主程序中读取数值就行,这是为什么啊?定时中断为5ms
#pragma CODE_SEG NON_BANKED
///////////////////////////////////////////////////
interrupt 66 PIT0_Interrupt(void)
{
   DisableInterrupts;
   //SpeedControlOutput();
   //GetMotorPulse();
   sum++;
   for(count=0;count<20;count++)
   {
      while(!ATD0STAT2_CCF0);
      g_AccValue+=ATD0DR0;
      while(!ATD0STAT2_CCF1);
      g_GyoValue+=ATD0DR1;
   }
      AD_value=g_AccValue/20;
      AD_enc=g_GyoValue/20;
      PORTB=PORTB+1;
      AngleCalculate();
      //AngleControl();   
      //MotorOutput();
        OutData[0]=g_fAccAngle;
        OutData[1]=g_fGyoAngleSpeed;
        OutData[2]=g_fCarAngle;
        OutData[3]=g_fCarspeed;
        OutPut_Data();
        //SpeedControl();
        EnableInterrupts;
}
#pragma     CODE_SEG DEFAULT


作者: wo520    时间: 2012-3-20 09:27
楼主建议你不要把 OutData[0]=g_fAccAngle;
        OutData[1]=g_fGyoAngleSpeed;
        OutData[2]=g_fCarAngle;
        OutData[3]=g_fCarspeed;
        OutPut_Data();
放到中断里面,因为这个执行时间挺长的!!!

作者: 野火    时间: 2012-3-20 10:00
中断函数里干那么多事情……
作者: linping9656    时间: 2012-3-20 18:51
wo520 发表于 2012-3-20 09:27
楼主建议你不要把 OutData[0]=g_fAccAngle;
        OutData[1]=g_fGyoAngleSpeed;
        OutData[2]=g ...

哦 谢谢!经常在论坛里看到你,加个QQ好吗?1017547234

作者: linping9656    时间: 2012-3-20 18:52
野火 发表于 2012-3-20 10:00
中断函数里干那么多事情……

主要是想看一下数据

作者: linping9656    时间: 2012-3-20 20:55
我把那些去掉了,可是取回的AD数据震荡的厉害,怎么回事?可是用其他方法都已经能站起来了
作者: linping9656    时间: 2012-3-20 21:02
图像如下所示。可是传感器我已经调好了,用其他方法都已经站起来了
作者: wo520    时间: 2012-3-21 09:43
linping9656 发表于 2012-3-20 20:55
我把那些去掉了,可是取回的AD数据震荡的厉害,怎么回事?可是用其他方法都已经能站起来了

已经加你QQ了!!你试试把采样的那个地方做成一个函数,然后再在中断里面调用这个函数!!看行不行,如果还不行的话,就检查你的AD初始化!!




欢迎光临 智能车制作 (http://111.231.132.190/) Powered by Discuz! X3.2