MSP430外接32768HZ晶振,如何测量这个晶振的精准度

MSP430外接32768HZ晶振,如何测量这个晶振的精准度,第1张

晶振频率精度已经很高了,必须用更精准的的频率计才能计量它的精度

频率计的精准程度取决于时钟源,你可以选用带恒温高精度有源晶振,价格么。。。。。。

比如这个>

任意找到一组数据DIN(0:7)作为起始,保存到寄存器R1,然后以后连续把每一组数据都保存在R2与R1做比较,if(R1==R2)

begin

R3<=t1;

end

t1是计数器的从0开始计数的值,0时刻是指对R1赋值的时刻,然后把t1根据机器周期换算成确切时间求倒数就得到频率了!

可以利用计数器捕捉模块与定时器模块(可以设置成1秒或者某个固定的时间然后计算)。8位的51与32位的MKL25计数捕捉模块我用过。430系列的你查查使用手册,看看有没有计数器捕捉模块。

时钟初始化子程序实现了DCO的锁频,ADC10初始化子程序采用了序列通道多次采样和DTC数据转存。写这程序的人对MSP430蛮了解的!

void init_Clk (void)

{

unsigned int Compare, Oldcapture = 0;

// ACLK= LFXT1CLK/8为低频振荡器32768HZ频率/8作为辅助系统时钟

BCSCTL1 |= DIVA_3;

CCTL2 = CM_1 + CCIS_1 + CAP;//上升沿捕获+CCI2B(P24)信号输入+捕获模式

// SMCLK

TACTL = TASSEL_2 + MC_2 + TACLR;//TA时钟为SMCLK,增计数模式,计数器清零

//DCO锁频,使得DCO时钟频率与P24信号频率相同

while (1)

{

//等待捕获发生

while (!(CCIFG & CCTL2)) ;//P24信号有上升沿跳出while

//清除标志

CCTL2 &= ~CCIFG;

//得到当前的SMCLK

Compare = CCR2;

//SMCLK的差

Compare = Compare - Oldcapture;

//保存

Oldcapture = CCR2;

if (DELTA == Compare) break;//DELTA=高电平脉宽

else if (DELTA < Compare)//DELTA<高电平脉宽

{

DCOCTL--;//通过改变DCO直流发生器注入电流及插入的Fdco+1来微调降低DCO时钟频率

if (DCOCTL == 0xFF)//微调降到最低了,同时设置为最高

{

if (!(BCSCTL1 == (XT2OFF + DIVA_3)))//粗调降到最低了

{

BCSCTL1--; //通过改变DCO内部阻容振荡电阻来粗调降低DCO时钟频率

}

}

}

else

{

DCOCTL++;//通过改变DCO直流发生器注入电流及插入的Fdco+1来微调提升DCO时钟频率

if (DCOCTL == 0x00)//微调升到最高了,同时设置为最低

{

if (!(BCSCTL1 == (XT2OFF + DIVA_3 + 0x07)))//粗调升到最高了

{

BCSCTL1++; //通过改变DCO内部阻容振荡电阻来粗调升高DCO时钟频率

}

}

}

}

//停止CCR2

CCTL2 = 0;

//停止定时器A

TACTL = 0;

}

void init_ADC(void)

{

//停止转换

ADC10CTL0 &= ~ENC;

//模拟输入使能A0--A2 (P20---P22)

ADC10AE |= 0x07;

//模拟采集设置

//基准选择VR+=Vref+,VR-=AVSS

//AD时钟选择 64 x ADC10CLKs

//AD10供电

//AD中断允许

//内部参考电压(12V)允许并输出

ADC10CTL0 = SREF_1 + ADC10SHT_3

+ ADC10ON + ADC10IE + REFON + REFOUT;

//采集通道设置

//首次采样通道A2

//采样时钟TAout2

//序列通道连续采样

ADC10CTL1 = INCH_2 + SHS_3 + CONSEQ_3;

//清除BUSY位,转换完成跳出

while( ADC10CTL1 & BUSY ){}

//数据传递继续

ADC10DTC0 |= ADC10CT;

//ADC块大小

ADC10DTC1 = 3;

//ADC块的开始地址

ADC10SA = (unsigned int)AdcData;

//打开转换

ADC10CTL0 |= ENC;

}

>

指令运行的时间不一样

精准定时CPU_F是晶振频率

#define CPU_F ((double)8000000)

#define delay_us(x) __delay_cycles((long)(CPU_F(double)x/10000000)) //x us

#define delay_ms(x) __delay_cycles((long)(CPU_F(double)x/10000)) /// x ms

以上就是关于MSP430外接32768HZ晶振,如何测量这个晶振的精准度全部的内容,包括:MSP430外接32768HZ晶振,如何测量这个晶振的精准度、用C语言写msp430f149单片机程序怎么初始化晶振,使用8M和32768HZ的晶振、用单片机msp430f149的ADC将正弦波转化成方波后如何测量方波的频率 求大神给点思路。等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zz/9802727.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-02
下一篇2023-05-02

发表评论

登录后才能评论

评论列表(0条)

    保存