因元件布局和低功耗问题,准备采用F2132的VLO+DCO方式,但发现VLO的误差好象很大的,启用TimerA定时器的1秒大约为1.15秒,且每只芯片都不一样。能否提供F2132的VLO的精度范围、随温度变化的误差情况、及如何对其进行校正或者实测其真实频率?
This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
因元件布局和低功耗问题,准备采用F2132的VLO+DCO方式,但发现VLO的误差好象很大的,启用TimerA定时器的1秒大约为1.15秒,且每只芯片都不一样。能否提供F2132的VLO的精度范围、随温度变化的误差情况、及如何对其进行校正或者实测其真实频率?
#include <msp430x20x3.h>
#include "VLO_Library.h"
int dco_delta;
int result;
void main(void)
{
volatile unsigned int i;
WDTCTL = WDTPW +WDTHOLD; // Stop Watchdog Timer
P1DIR |= 0x11; // P1.0,1,4 outputs
P1SEL |= 0x10; // P1.4 = SMCLK
BCSCTL3 |= LFXT1S_2; // ACLK = VLO
BCSCTL1 = CALBC1_8MHZ; // 8MHz cal value
DCOCTL = CALDCO_8MHZ; // 8MHz cal value
dco_delta = TI_measureVLO(); // dco delta = number of
// 1MHz cycles in 8 ACLK cycles
CCTL0 = CCIE; // CCR0 interrupt enabled
CCR0 = (8000000 / dco_delta); //
TACTL = TASSEL_1 + MC_1; // ACLK, upmode
P1OUT = 0x01;
_BIS_SR(LPM3_bits + GIE); // Enter LPM3 w/ interrupt
}
// Timer A0 interrupt service routine
__interrupt void Timer_A (void);
TIMERA0_ISR(Timer_A)
__interrupt void Timer_A (void)
{
P1OUT ^= 0x01; // Toggle P1.0
}
//********************************************************
//请问以上代码中的 TI_measureVLO() 在哪里能找到? "VLO_Library.h" 里面是没有的。
看到另一份帖子,感觉很有用,转过来:
你好,我也碰到了这样的问题,我用的是内部的DCO时钟,但是做出10个样品出来后,每个芯片的时钟频率都不一样。使PWM输出的频率都不一样,有的相差还挺大的,怎样解决呢,求大侠指点!!!
内部的DCO精度确实有限,我也遇到了类似的问题,建议使用高精度的外部晶振
但是我用的是G2332最高的外部晶振只能用到32K,内部的能达到1M,在不换芯片的情况下,不增电路的情况下,有什么解决办法呢?