MSP430 BasicTimer1 / Stabile Uhr-Clock mit 32kHz Uhrenquarz

OP #670859
Lesenswert?

Hallo zusammen,

habe folgende Initialisierung um einen MSP430 jede 1 ms aus dem LPM3 zu 
holen und eine Uhr zu betreiben.
D.h. alle 1024 Interrupts wird eine Sekunde hinzugezählt.
Zusätzlich wird alle 10 Interrupts ein Sensor abgefragt.

Leider ist die Uhr nicht besonders genau (1 Sekunde pro Std zu schnell).

Ist die Initialisierung falsch?
Gibt es eine Möglichkeit die Uhr genauer zu machen (ausser DCF)?
Stromsparlösung bevorzugt.

1
  WDTCTL = WDTPW + WDTHOLD;    // Stop watchdog timer
2
  FLL_CTL0 &= ~XTS_FLL;        // XT1 0 low-frequency
3
  _BIC_SR(OSCOFF);             // turn on XT1 oscillator
4

5
  do                           // wait in loop until crystal is stable
6
   IFG1 &= ~OFIFG;
7
  while (IFG1 & OFIFG);
8

9
  FLL_CTL1 &= ~FLL_DIV0;       // ACLK = XT1
10
  FLL_CTL1 &= ~FLL_DIV1;
11

12
  IFG1 &= ~OFIFG;              // clear osc. fault int. flag
13
  FLL_CTL1 &= ~SELM0;          // set DCO as MCLK
14
  FLL_CTL1 &= ~SELM1;
15

16
  BTCTL = BTIP2;     // BT1 interrupt freq. = 1024Hz 
17
                     // aus ACLK = 32.768kHz
18
  _EINT();              // Enable interrupts
19

20

21
  _BIS_SR(LPM3_bits + GIE);     // in Low Power Mode 3

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren