3835|8

14

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

msp430 捕获的频率不准?求解~! [复制链接]

我用TA的捕获比较器,捕获ALK,MCLK,SMCLK的频率大小,在测ACLK时,频率正确,MCLK,SMCLK时候就不准确。。有局限性吗?


#include
#define uint unsigned int
#define uchar unsigned char
  uint new_cap=0;
  uint old_cap=0;
  uint cap_diff=0;

  uint diff_array[16];
  uint capture_array[16];  //RAM中的数组用于存放数据
  uchar index=0;
  uchar count=0;
void main(void)
{
   volatile uint i;
  WDTCTL=WDTPW+WDTHOLD;
  BCSCTL1&=~XT2OFF;
  do
  {
    IFG1&=~OFIFG;
    for(i=0xff;i>0;i--);
  }
  while((IFG1&OFIFG));
  for(i=0;i<20000;i++);//延迟让晶振起振稳定
  BCSCTL2=SELS;//SMCLK 选择XT2
  P5DIR|=BIT4;
  P5SEL|=BIT4;
  //P5DIR|=BIT4+BIT5+BIT6;
  //P5SEL|=BIT4+BIT5+BIT6;
    //定义P5.4MCLK,P5.5SMCLK,P5.6ALCK
  P1DIR=BIT0;//P1.0输出,P1.1输入
  P1OUT&=~BIT0;//清除P1.0,复位
  P1SEL=BIT1;//P1.1 TA0特殊功能引脚
  CCTL0=CM_1+SCS+CCIS_0+CAP+CCIE;
//上升沿捕获+捕获模式的输入源为定时器A+同步捕获+捕获中断允许
TACTL=TASSEL_2+MC_2;//SMCLK为定时器A时钟源,连续计数模式
_BIS_SR(LPM0_bits+GIE);
}

#pragma vector=TIMERA0_VECTOR
__interrupt void Timer_A0(void)
{
  volatile uint j;
  new_cap=TACCR0;
  cap_diff=new_cap-old_cap;
  diff_array[index]=cap_diff;
  capture_array[index++]=new_cap;
  if(index==16)
  {
    index=0;
    P1OUT^=BIT0;
    for(j=50000;j>0;j--);
  }
  old_cap=new_cap;
  count++;
  if(count==32)
  {
    count=0;
    _NOP();//这里设置断点
  }
}

最新回复

这个确实是和CPU时钟相关的,时钟越快能测的频率就越高,主要是受到执行中断指令时间的影响  详情 回复 发表于 2013-7-23 22:16
 
点赞 关注

回复
举报

4005

帖子

0

TA的资源

版主

沙发
 
周期性的信号用计数方式比较好,cap_diff=new_cap-old_cap;这样的测量最小精度就是一个定时器时钟周期.

点评

计数方式方式?你的意思是增计数或者增减计数?上面说的不准不是精度不好,是相差几M的了。  详情 回复 发表于 2013-7-23 18:26
 
 

回复

14

帖子

0

TA的资源

一粒金砂(中级)

板凳
 

回复 沙发huo_hu 的帖子

计数方式方式?你的意思是增计数或者增减计数?上面说的不准不是精度不好,是相差几M的了。
 
 
 

回复

33

帖子

0

TA的资源

一粒金砂(中级)

4
 
频率较低实时用捕获,高频直接将其作为计数器的时钟然后规定时间内读计数值

点评

什么意思呢?不好意思,不是很理解  详情 回复 发表于 2013-7-27 09:37
 
 
 

回复

1972

帖子

1

TA的资源

五彩晶圆(初级)

5
 
做频率计能测出较低频率,那么在低频的时候,测量得到的值差得大吗?

点评

计数的时钟频率越高,最后测量的值误差就越小。  详情 回复 发表于 2013-7-23 22:12
 
 
 

回复

5015

帖子

12

TA的资源

裸片初长成(初级)

6
 

回复 5楼bobde163 的帖子

计数的时钟频率越高,最后测量的值误差就越小。

点评

最后测量的不是用捕获的方法吗?  详情 回复 发表于 2013-7-27 09:35
这个确实是和CPU时钟相关的,时钟越快能测的频率就越高,主要是受到执行中断指令时间的影响  详情 回复 发表于 2013-7-23 22:16
 
个人签名《MCU工程师炼成记》作者之一
 
 

回复

1972

帖子

1

TA的资源

五彩晶圆(初级)

7
 

回复 6楼wstt 的帖子

这个确实是和CPU时钟相关的,时钟越快能测的频率就越高,主要是受到执行中断指令时间的影响
 
 
 

回复

14

帖子

0

TA的资源

一粒金砂(中级)

8
 

回复 6楼wstt 的帖子

最后测量的不是用捕获的方法吗?
 
 
 

回复

14

帖子

0

TA的资源

一粒金砂(中级)

9
 

回复 4楼ifreeman 的帖子

什么意思呢?不好意思,不是很理解
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表