www.mikrocontroller.net

Forum: GCC MSP430 Echtzeit-Uhr

Autor: wolf30 (Gast)
Datum: 16.02.2004 22:35

Hallo zusammen,

habe folgendes Problem:
Möchte auf meinem Display eine einfache Uhr laufen lassen(Echtzeit)
Funktioniert sowiet auch ganz gut, das Problem ist, dass die Uhr Pro
Tag um ca. 3-5s falsch geht.

Takte den MSP mit 8MHz, teile den Takt durch 64. Lasse meinen Timer bis
500ms hochzählen, dann wird nen Interrupt ausgelöst. In diesem
Interrupt setzt ich dann eine "Timerflag" hoch, welches ich in meinem
Hauptprogramm zyklisch auswerte. Habe dann eine kleine Ujmrechnung für
die LCD-Darstellung.
Wie gesagt, klappt auch soweit ganz gut. Läuft aber halt nicht exakt.
Habe schon am Timer gespielt. Wenn ich aber sowohl ein Takt mehr oder
weniger laufen lass, wirds immer ungenauer.
Wo ist also mein Fehler.

  BCSCTL1 |= XTS;

  do
  {
  IFG1 &= ~OFIFG;
  for (i = 0xFF; i > 0; i--);
  }
  while ((IFG1 & OFIFG) != 0);


  BCSCTL2 |= SELM1+SELM0+DIVS_3+DIVM_0+SELS;// MCLK = LFXT1 (safe)



TACTL = TASSEL1 + TACLR + ID_3;    //  Initialisierung Timer A
CCTL0 = CCIE;
CCR0 = 62500;                      // 500ms-Periode
TACTL |= MC0;                      //TACTL |= MC0;
_EINT();

..
..
..
for(;;)
{
while (Timerflag == 1)
{
Timerflag = 0;
if (ms>=2){ms=0;s++;};
if (s>=10   ){s=0;ss++;};
if (ss>=6   ){ss=0;m++;};
if (m>=10   ){m=0;mm++;};
if (mm>=6   ){mm=0;h++;};
if (h>=10   ){h=0;hh++;};
if (hh>=3   ){hh=0;};
if (hh==2 && h == 4){h=0;hh=0;};
}
#pragma vector=TIMERA0_VECTOR
__interrupt void Timer_A (void)
{
Timerflag = 1;
P3OUT &= ~BIT4;
for (y=1;y>=0;y--);
ms++;
}

Diese Rechnung kam halt durch die einfachere Ausgabe auf das Display
zustande.
Uhr sieht dabei folgenderweise aus:
..hh_h:mm_m:ss_s..

Wo liegt mein Denkfehler?
Ist bestimmt nicht die galanteste Methode um das umzusetzen.
Wollte es halt selber hinbekommen, statt nur immer fertigen Code zu
benutzen.
mfg
Wolf
Autor: m@is (Gast)
Datum: 17.02.2004 08:53

wie genau läuft dein LFXTCLK?

wählst Du mit SELM1 nicht den DCO für MCLK aus? Wenn Du die IAR bzw TI
Header verwendest müsste es SELM_0 + SELM_1 heißen.

BCSCTL2 |= SELM1+SELM0+DIVS_3+DIVM_0+SELS;// MCLK = LFXT1 (safe)

Mit was arbeitest Du?
Autor: Martin Raffelsieper (Gast)
Datum: 17.02.2004 11:56

Hallo!

selbst wenn du einen speziellen Uhrenbaustein (327686 Hz-Quarz)
verwendest, wirst du eine Abweichung von ca 80 ppm (ca 6 sekunden/Tag)
feststellen.

Die U(h)rsache liegt DORT in der Anschaltung des Uhrenbausteines an den
Quarz, dessen Frequenz um eben diesen Betrag gezogen wird.

Deshalb haben Uhrenbausteine normalerweise Adjustment register, mit dem
man bis zu +-200 ppm ausgleichen kann. Diese Baustein machen das so,
dass z.b. alle 20 sekunden einige wenige Quarz-Clocks mehr bzw weniger
zum sekundenzählen nötig sind.


Gruß Martin
Autor: m@is (Gast)
Datum: 18.02.2004 11:38

Ich habe mit so einem "Uhrenbaustein" meine Uhr laufen lassen. Ich lag
etwas unter dem von Martin genannten 6 sec/Tag.
Autor: Martin Raffelsieper (Gast)
Datum: 18.02.2004 11:43

Dann hast Du einen Quarz mit weniger "pf" verwendet, die laufen etwas
genauer.


Ausserdem haben die Quarze eh ca. 30 ppm Fehler

Gruß Martin
Autor: peter dannegger (Gast)
Datum: 18.02.2004 12:15

Das Problem ist nur, einen so genauen Frequenzmesser zu bekommen, um den
Trimmer abzugleichen.
Deshalb lasse ich die Uhr einige Tage laufen und ermittle die
Abweichung, z.B. mit der Videotext-Uhr oder einer Funkuhr.
Dann berechne ich daraus die exakte Quarzfreqenz und setze die Teiler
entsprechend:

http://www.mikrocontroller.net/forum/read-4-57760.html

Das Prinzip sollte auf den MSP übertragbar sein.


Peter
Autor: Hefti (Gast)
Datum: 09.05.2008 09:11

Wie hoch ist eigentlich der Stromverbrauch, wenn ich die Uhr laufen
lasse? Müsste doch auch im LPM4 gehen, oder?

Antwort schreiben

Die Angabe einer Email-Adresse ist freiwillig. Wenn Sie automatisch per Email über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Suchfunktion und Betreffsuche benutzen - vielleicht gibt es schon einen ähnlichen Beitrag
  • Aussagekräftigen Betreff wählen
  • Im Betreff angeben um welchen Controllertyp es geht (AVR, PIC, ...)
  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang
  • JPEG-Dateien (.jpg) nur für Fotos verwenden, Schaltpläne, Screenshots usw. als PNG oder GIF anhängen

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [pre]vorformatierter Text (z.B. Code in anderen Sprachen)[/pre]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel





Hinweis: der Originalbeitrag ist mehr als 6 Monate alt.

webmaster@mikrocontroller.netImpressumWerbung auf Mikrocontroller.net