4533|2

99

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

msp430f5438测频率成功,能测60K一下频率,误差50HZ以内! [复制链接]

#include
#include "LCD_12864.h"
#include "CLOCK.h"
unsigned int end,start;
unsigned char overflow;
unsigned long fre;
int main( void )
{
  // Stop watchdog timer to prevent time out reset
  WDTCTL = WDTPW + WDTHOLD;
  InitSysCLKXT2(); //8M SMCLK,MCLK为8M,ACLK为32768
  INI_LCD();
  P2SEL|=BIT2;
  TA1CTL|=TAIE+TASSEL__SMCLK+TACLR+ MC__CONTINOUS;//选择计时器时钟为SMCLK打 分频比为1 UP增模式
  TA1CCTL1|=CCIE+CAP+CM0+SCS;//打开中断 打开捕获 上升沿捕获 同步捕获
  _EINT();
  while(1)
  {
    __bis_SR_register(LPM0+GIE);
    TA1CCTL1&=~CAP;
    fre=8000000/(2*(end+overflow*65536-start));
    write_cmd(0x01);
    write_cmd(0x80);
    displayshu(fre);
    __delay_cycles(800000);
    TA1CCTL1|=CAP;
  }
}
#pragma vector=TIMER1_A1_VECTOR
__interrupt void TIMER1_A1_ISR(void)
{
  switch(__even_in_range(TA1IV,14))
  {
    case  0: break;                          // No interrupt
    case  2:                                 // Add Offset to CCR1
      {  
        if(TA1CCTL1&CM0)
        {  
          TA1CCTL1=(TA1CCTL1&(~CM0))|CM1; //改为下降沿触发
          //TA1CTL|=TACLR;
          start=TA1CCR1;
          overflow=0;
        }
        else if(TA1CCTL1&CM1)
        {
          TA1CCTL1=(TA1CCTL1&(~CM1))|CM0; //有可能是先捕到下降沿
          end=TA1CCR1;
          LPM0_EXIT;
        }
      }
      break;                           
    case  4: break;                          // CCR2 not used
    case  6: break;                          // CCR3 not used
    case  8: break;                          // CCR4 not used
    case 10: break;                          // CCR5 not used
    case 12: break;                          // Reserved not used
    case 14:                                 // 溢出数加1
             overflow++;
             break;
    default: break;
  }
}
参考了论坛上一位兄弟贴出的程序,不过一开始不能测,后来发现是退出低功耗模式在显示那里它还在改数据,干脆就把捕获关了,数据显示了再测,结果出来可以,60K以内试过可以(总会在50HZ左右抖动)。不过频率高了就不行,论坛上有人说能在250HZ内精确到1Hz,知道的话还望不吝赐教,感谢3g465的建议!

最新回复

LZ你好 fre=8000000/(2*(end+overflow*65536-start)); 中的8000000是什么?SMCLK的频率吗? 你初始化时钟的时候,倍频ACLK得到的DCO频率是多少?你取8000000对最后的精度影响大不大?  详情 回复 发表于 2011-8-18 18:02
 
点赞 关注

回复
举报

60

帖子

0

TA的资源

纯净的硅(初级)

沙发
 

回复 楼主 水货老手 的帖子

LZ你好
fre=8000000/(2*(end+overflow*65536-start));
中的8000000是什么?SMCLK的频率吗?
你初始化时钟的时候,倍频ACLK得到的DCO频率是多少?你取8000000对最后的精度影响大不大?
 
 

回复

99

帖子

0

TA的资源

一粒金砂(中级)

板凳
 
是的,我用的是外部的8M,很精准
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

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

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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

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

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

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