Forum: Mikrocontroller und Digitale Elektronik Uhrentakt mit 32,768 Quarz und Timer2 am AT90CAN128 ungenau


von Dietmar K. (kunsti)


Lesenswert?

Hallo,
ich habe wie im ATMEL-Datenblatt an einen AT90CAN128 zwischen TOSC1 
(19)und TOSC2 (18) einen 32,768kHz Quarz, beide Leitungen mit je einem 
Kondensator gegen Masse angeschlossen und versucht, mit dem TIMER2 einen 
genauen  Sekundentakt zu erzeugen.

Das ganze funktioniert auch, ist aber extrem ungenau, d.h. in 2Minuten 
geht die Uhr 1s nach.

In der ISR(TIMER2_COMP_vect) - Interrupt-Funktion zähle ich die 
Sekunden, Minuten, Stunden hoch.
Ein extremes Abspecken des Programmcodes (nur Sekundenabarbeitung) hilft 
auch nicht weiter. Am Quarz oder den Kondensatoren liegt es sicherlich 
auch nicht, da habe ich verschiedene Typen und Kapazitäten ausprobiert 
habe.
Vielleicht liegt der Fehler in der Initiailisierung des TIMER2?

void rtc_init(void)
{
  // enable extern pulsing via quartz
  ASSR=(1<<AS2);
  /* setup RTC for 1s-interrupt
     extern-clock: 32.768 Hz
     prescaler: 256
     ctc-mode: preset 127
     -->   --> 128 32.768/256pulses/s --> preset 128
  */
  OCR2A=128;
  TCNT2=0;
  TCCR2A=(1<<WGM21) | (1<<CS22) | (1<<CS21);
  // enable overflow compare interrupt
  TIMSK2=(1<<OCIE2A);
}
Ein Funkuhrempfänger oder die in den Foren mehrfach beschriebene Nutzung 
des TIMER1 (ms-Takt) wäre eine Alternative, trotzdem würde ich gern die 
Ursache wissen, da diese Anwendung sehr einfach ist und in einigen 
Datenblättern als real-time-clock beschrieben ist.

Vielleicht kennt jemand den Fehler?

von Falk B. (falk)


Lesenswert?

@  Dietmar Kunst (kunsti)

>Das ganze funktioniert auch, ist aber extrem ungenau, d.h. in 2Minuten
>geht die Uhr 1s nach.

Dann sit was faul. Das sind fast 1%!

>In der ISR(TIMER2_COMP_vect) - Interrupt-Funktion zähle ich die
>Sekunden, Minuten, Stunden hoch.

Warum nicht im Überlauf?

>auch nicht, da habe ich verschiedene Typen und Kapazitäten ausprobiert
>habe.

Was hast du denn da jetzt dran? Die Kapazitäten sind vom Quarz abhängig. 
Ausserdem können einige AVRs an die Pins interne Kapazitäten per [[AVR 
Fuses]] zuschalten.

>  OCR2A=128;

Dir ist hoffentlich klar, dass dein Interrupt eine Periode von 129!!! 
Takten hat? Denn der zählt von 0..128.

;-)

MFG
Falk

von Dietmar K. (kunsti)


Lesenswert?

Hallo Falk!

Vielen Dank für deine schnelle Hilfe!

Ich glaub' das letzere war's!
Blöder Anfängerfehler!
Der Gedanke war mir auch schon mal gekommen, hatte ihn aber nicht weiter 
verfolgt.

Die Uhr läuft jetzt mit OCR2A=127 fast eine halbe Stunde und es sieht 
auf jeden Fall besser aus ;-), genaues kann ich erst morgen sagen.

Ist es nicht egal, welchen Interrupt man nimmt? Überlauf oder Compare?

Mit den Kapazitäten hast du natürlich recht. Aber da hab' ich darauf 
geachtet, dass die Kapazität wie im Datenblatt des Quarzes gefordert 
angeschlossen ist.
Im Moment habe ich zwei 12pF Kondensatoren dran. Aber Danke für den 
Tipp.

Bei den Fuses-Bits habe ich bisher noch nicht geschaut.
Ich programmiere den AT90CAN128 mit AVR-Studio.
Welches BIT ist dann da relevant?

VG
Kunsti

von Ulrich (Gast)


Lesenswert?

Die angeblichen internen Kondensatoren die man zuschalten kann 
funktionieren nicht. Das ist ein bekannter BUG bei (fast ?) allen AVRs. 
Einfach mal in den Errats zu dem µC nachschauen ob der Chip gerade eine 
Ausnahmen ist.

von Falk B. (falk)


Lesenswert?

@  Dietmar Kunst (kunsti)

>Ist es nicht egal, welchen Interrupt man nimmt? Überlauf oder Compare?

Jain. Wenn man mit dem Sleep Mode Strom sparen will, nimmt man den 
Überlauf, weil der die geringstmögliche Frequenz bietet. Ansonsten ist 
es gleichwertig.

>Ich programmiere den AT90CAN128 mit AVR-Studio.
>Welches BIT ist dann da relevant?

Gibt es bei dem AVR nicht.

MFG
Falk

von Dietmar K. (kunsti)


Lesenswert?

Vielen Dank Falk und Ulrich!
Damit sind meine Fragen erst mal beantwortet. Die Uhr läuft mittlerweile 
über 2 Stunden und ich kann noch keine Verspätung feststellen. Ich lasse 
sie mal bis Montag in Ruhe und werde dann den Überlauf-Interrupt 
ausprobieren.

VG
Kunsti

von Falk B. (falk)


Lesenswert?

Und wenn du deine Uhr richtig schön kalibrieren willst, schau mal hier 
rein

AVR - Die genaue Sekunde / RTC

MFG
Falk

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.