Hallo,
ich baue gerade eine Berlin Uhr mit einem Mega16 in C programmiert.
Den Timer habe ich so konfiguriert :
----------------------------------------------------------------------------
// Timer 0 konfigurieren
TCNT1H=0; // Timer Daten REgister Timer1 high auf 0
TCNT1L=0; // Timer Daten REgister Timer1 LOW auf 0
TCCR1B |=(1<<CS12)|(1<<CS12); // TImer Starten mit Vorteiler
// TCCR0 |= (1<<CS02)|(1<<CS02); // oder so 1/1024 CPU TAkt funzt1
// Overflow Interrupt erlauben
TIMSK |= (1<<TOIE1);
TCNT1=33387; //Timer Vorladen
// Global Interrupts aktivieren
sei();
----------------------------------------------------------------------------
Die Timer ISR sieht so aus :
----------------------------------------------------------------------------
ISR (TIMER1_OVF_vect)
{
if (sec<59) sec++; else {sec=0; min++;} // Uhrzeit
if (min>59) {min=0; stu++;} // else {min=0; sec=0;}
if ((stu==23)&(min==59)&(sec==59)) {stu=0; min=0; sec=0;}
seku = ~seku; //sekunden Blinken für LED
TCNT1=33387;}
----------------------------------------------------------------------------
Trotz diverser TCNT1 Einstellung läuft die Uhr immer zu langsam oder zu schnell mehrere Sekunden am Tag.
Die Uhrzeit wird auf einem Display und auf einer LED Anzeige (Multiplex) ausgegeben.
Was mache ich denn Falsch ???
AT Mega16 - 8Mhz Quarz - ( Ext. CLock; STart-up time: 6 CK + 64ms)
christoph
ich baue gerade eine Berlin Uhr mit einem Mega16 in C programmiert.
Den Timer habe ich so konfiguriert :
----------------------------------------------------------------------------
// Timer 0 konfigurieren
TCNT1H=0; // Timer Daten REgister Timer1 high auf 0
TCNT1L=0; // Timer Daten REgister Timer1 LOW auf 0
TCCR1B |=(1<<CS12)|(1<<CS12); // TImer Starten mit Vorteiler
// TCCR0 |= (1<<CS02)|(1<<CS02); // oder so 1/1024 CPU TAkt funzt1
// Overflow Interrupt erlauben
TIMSK |= (1<<TOIE1);
TCNT1=33387; //Timer Vorladen
// Global Interrupts aktivieren
sei();
----------------------------------------------------------------------------
Die Timer ISR sieht so aus :
----------------------------------------------------------------------------
ISR (TIMER1_OVF_vect)
{
if (sec<59) sec++; else {sec=0; min++;} // Uhrzeit
if (min>59) {min=0; stu++;} // else {min=0; sec=0;}
if ((stu==23)&(min==59)&(sec==59)) {stu=0; min=0; sec=0;}
seku = ~seku; //sekunden Blinken für LED
TCNT1=33387;}
----------------------------------------------------------------------------
Trotz diverser TCNT1 Einstellung läuft die Uhr immer zu langsam oder zu schnell mehrere Sekunden am Tag.
Die Uhrzeit wird auf einem Display und auf einer LED Anzeige (Multiplex) ausgegeben.
Was mache ich denn Falsch ???
AT Mega16 - 8Mhz Quarz - ( Ext. CLock; STart-up time: 6 CK + 64ms)
christoph