ATMega32 Problem mit Timer0 als Uhr

01/02/2008 - 05:08 von Harald Noack | Report spam
Hallo!

Ich habe einen AtMega32 mit 16MHz Quarz und zwei 27pF Kondensatoren am Quarz
in Betrieb.
Timer0 hat einen Vorteiler von 1024, soll bis 125 zàhlen und sich dann auf 0
setzen und weiterzàhlen.
=> Interruptroutine soll 125 mal pro Sekunde aufgerufen werden.
Interruptroutine zàhlt bis 125 und setzt dann Sekunden + 1.

Problem: meine Uhr geht sehr ungenau (ca. -6 Sekunden auf 13 Minuten)
Habe ich einen +-1 Fehler in den IFs gemacht?
Ist der Quarz so ein Mist?



Konfiguration im Hauptprogramm:

SFIOR &= ~( 1 << PUD );

// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: 15,625 kHz
// Mode: CTC top=OCR0
// OC0 output: Disconnected
TCCR0=0x0D;
TCNT0=0x00;
OCR0=0x7D;

// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=0x02;


Interruptroutine:

volatile static unsigned char minuten,sekunden,sub_sekunden;
volatile static unsigned short stunden;
volatile static unsigned char timer_interrupt,sekunden_interrupt;
ISR(TIMER0_COMP_vect) //125Hz
{
sub_sekunden++;

if(sub_sekunden%25==0)
{
timer_interrupt=1;
}

if(125<=sub_sekunden)
{
sub_sekunden=0;
sekunden++;
if(60<=sekunden)
{
sekunden=0;
minuten++;
if(60<=minuten)
{
minuten=0;
stunden++;
}
}
sekunden_interrupt=1;
}

}

Danke für Eure Hilfe!
Mit freundlichen Grüßen
Harald Noack
 

Lesen sie die antworten

#1 Artur
01/02/2008 - 06:40 | Warnen spam
Hallo Harald,

Ich habe einen AtMega32 mit 16MHz Quarz und zwei 27pF Kondensatoren
am Quarz in Betrieb.



... im Datenblatt des ATMegas stehen aber Kondensatorwerte 12-22pF...

Alternativ könntest Du doch auch, sofern sie noch frei sind, an die
Pins PC6 und PC7 einen Uhrenquarz mit 13,...kHz anschließen. Bei
meinen "Uhrenschaltungen" mit dem ATMega32 habe ich über Wochen hinweg
damit keine Zeitabweichung.

Artur

Ähnliche fragen