网站公告列表

  没有公告

加入收藏
设为首页
联系站长
您现在的位置: 61IC中国电子在线 >> 服务导航 >> 帮助中心 >> C2000 >> 文章正文
  使用CAP4测量频率 如何处理溢出           ★★★ 【字体:
使用CAP4测量频率 如何处理溢出
作者:Free    文章来源:本站原创    点击数:    更新时间:2007-12-9    

 

问题如下:

我使用cap测量脉冲的频率。从10hz到50k,使用一个计数器的话会溢出,有什么方法自动换挡或者知道溢出了多少次呢

解答如下:

可以定义一个变量,累计溢出的次数。

问题如下:

这个不好累计吧,我觉得 ,cap中断是2个边沿才触发一次的,而且这次触发和下次触发不一定是相连续的吧,溢出是指cap触发后,两次的计数器相减已经溢出了,用个变量很难处理好吧

解答如下:

你不是有CAP中断吗?在中断里计数不就可以了。

问题如下:

cap中断计数是不行的吧,
因为cap中断不是外部中断,并不是每个上升沿都会触发的(如果捕捉上升沿),
cap是每2个上升沿触发一次,
而且中间可能空了几个上升沿,
这样cap中断计数也不行。
cap中断中读取timer可以发现,cap中断的触发的时间不是固定的,


我现在是使用了2个cap才解决了这个问题,
不知道有什么更好的解决方法,
其实不用cap
使用外部中断效果应该更好,

解答如下:

对cap的理解不对.

问题如下:

怎么解决的,我测50HZ的信号,有跳变,我是在CAP中断里读CAPFIFO进行计算的,那样跳变的厉害,我又该成在CAP中断里读T3CNT的数进行计算,条变好点,还是解决不了问题,我是T3为时基,检测上升沿,中断程序为:
unsigned char  k=0,flag1=0,frec1=0,frec=0,f_flag=0x66,ff=0,d=0;
float f=0,temp=0;       
                                        // 定义的中断次数值
// 系统初始化子程序
void  initial()
{
          asm(" setc  INTM";                // 禁止所有中断
        asm(" setc        SXM";                                // 抑制符号位扩展
        asm(" clrc        OVM";                                // 累加器中结果正常溢出
        asm(" clrc        CNF";                        // B0被配置为数据存储空间
        SCSR1=0x81FE;                        // CLKIN=10M,CLKOUT=4CLKIN=40M
        WDCR=0x0E8;                        // 不使能看门狗,因为SCSR2中的WDOVERRIDE
                                                            // 即WD保护位复位后的缺省值为1,故可以用
                                                              // 软件禁止看门狗
        IMR=0x0000;                                        //  禁止所有中断
        IFR=0x0FFFF;                        // 清除全部中断标志,"写1清0"
}
// 捕获单元4初始化子程序       
void  CAP4INT()   
{   
    MCRC=MCRC|0X0080;
    PEDATDIR=0X0000;
    T3PR=0X0FFFF;                        // 通用定时器3的周期寄存器为0XFFFF
        T3CON=0x1400;                        // 通用定时器3为连续增计数模式 X/16;
        T3CNT=0X00;                                // 计数器清0
    WSGR=0x0000;                        // 禁止所有等待状态
        CAPCONB=0X0A240;                // 设置捕获单元4为检测上升沿,且选择TIMER3为时钟
        asm(" clrc  INTM";                // 开总中断
        IMR=0X08;                                  // 允许中断优先级4的中断
        EVBIMRC=EVBIMRC|0X0001;        // 允许CAPTURE1中断 
        EVBIFRC=EVBIFRC|0X0FFFF;

}

// 主程序
main()
{
        initial();                                                // 系统初始化
        CAP4INT();                                        // 捕获单元4初始化
        T3CON=T3CON|0X0040;                // 启动定时器3
        while(1)
        {
        ;;//        if(k==10)  break;                        // k保存中断次数值,是全局变量
        }
//        asm(" setc  INTM";                        // 捕捉10次后,禁止再中断
}
// 若是由于干扰引起其它中断,则执行此子程序       
void  interrupt nothing()
{
        asm(" clrc  INTM";                                // 返回前开中断
        return;
}
// 捕捉中断服务程序
void  interrupt  capint()
{
    int  flag,i=0;
         
      flag=EVBIFRC&0X01;                        // 判断是否是CAP4中断
      if(flag!=0x01)
      {
        asm(" clrc  INTM";                        // 返回前开中断
        return;                                // 如果不是CAP4中断,则直接返回
      }
    else
      {
              i=PEDATDIR&0x0080;
          d=0;
        d=i;//(i&0x80);
        if(d==0)
        {
                EVBIFRC=EVBIFRC|0x01;
                asm(" clrc  INTM";
                return;
        }
        EVBIFRC=EVBIFRC|0x01;                // 写"1"清除CAP4中断标志
      if(f_flag==0x66)
        {
          frec=T3CNT;
          f_flag=0;
        }
        else
        {
            frec1=T3CNT;
         
          if(frec1>frec)
          {
                    temp=(frec1-frec);
            }
        else
          {
                            temp=frec1+(0xffff-frec);
                }
              f=2500000/(float)temp;  //f= 40M/16/temp
            f_flag=0x66;
    }
        asm(" clrc  INTM";                        // 返回前开中断
        return;       
    }       

   
}

请指点那里设置的不对!!!

解答如下:

弄好了,是设置优点问题
               欢迎点击进入:TI德州中文网   (国内唯一针对TI应用的中文技术网站)    文章录入:admin    责任编辑:admin 
  • 上一篇文章:

  • 下一篇文章: 没有了
  • 发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
    最新热点 最新推荐 相关文章
    没有相关文章
      网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)
    站长:61IC 湘ICP备05002478号