Forum: Mikrocontroller und Digitale Elektronik MSP430 BasicTimer1 / Stabile Uhr-Clock mit 32kHz Uhrenquarz


von Jürgen R. (duke)


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

von Christian R. (supachris)


Lesenswert?

Alle 16768 Impulse aufwecken, da hast du zwar nur 1s Auflösung, aber ist 
genauer.

von Jürgen R. (duke)


Lesenswert?

Hallo Chris,

meinst Du den BTCTL so verändern, dass nicht mehr
1024 interrupts = 1 Sekunde, sondern
16768 interrupts = 1 Sekunde?

Kannst Du mir ein Beispiel geben?

thx!

von Christian R. (supachris)


Lesenswert?

Du kannst im BTCLT Register die IP2 und IP1 und DIV auf 1 setzen, dann 
löst der alle 1s den Interrupt aus. Lies mal den User Guide, da gibts 
doch massig Kombinationen, wie man den ACLK da runter teilen kann für 
die Zeitbasis.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.