Gast
#2146043
Hallo ich will meinen Timer vom Atmgea auf ein externes Uhrenquarz
umstellen. Davor hatte ich den Timer auf TIMER1_COMPA_vect verglichen
und er hat funktioniert sobald ich auch ohne den Uhrenquarz umstelle
funzt das ganze nicht mehr. Hier der Code (Die alte Variante
auskommentiert):
ISR(TIMER1_OVF_vect)//Interruptroutine für Uhrzeit
{
//... BLAbLA
}
void Time_Init(void)
{
Message_Out_Str("A",1);
/*
//Prescaler Variante
//CTC Modus
TCCR1A &= ~(1<<WGM10);
TCCR1A &= ~(1<<WGM11);
TCCR1B |= (1<<WGM12);
TCCR1B &= ~(1<<WGM13);
//Output Compare A true
TCCR1C |= (1<<FOC1A);
//Prescaler auf 1024
TCCR1B |= (1<<CS12);
TCCR1B &= ~((1<<CS10)|(1<<CS11));
//Output Compare auf 100ms setzen
//16000000/(256)*1000/1000=6250
//256 Prescaler, 1000 da jede 100ms auslösen soll, :1000 umrechnung von
ms auf s
//125 sehalb damit Erg. gerade --> Fehler klein halten
OCR1A=6250;
//Output Compare Interrupt aktivieren
TIMSK1 |= (1<<OCIE1A);
*/
//Normaler Modus
TCCR1A &= ~(1<<WGM10);
TCCR1A &= ~(1<<WGM11);
TCCR1B &= ~(1<<WGM12);
TCCR1B &= ~(1<<WGM13);
//Mit Uhrenquarz (rising edge)
TCCR1B |=((1<<CS10)|(1<<CS11)|(1<<CS12));
//Output Compare Interrupt aktivieren
TIMSK1 |= (1<<TOIE1);
//Rest vorsichtshalber deaktivieren
TCCR1C &= ~((1<<FOC1A)|(1<<FOC1B)|(1<<FOC1C));
TIMSK1 &= ~((1<<OCIE1A)|(1<<OCIE1B)|(1<<OCIE1C));
//Zähler am Anfang auf 0 setzen
TCNT1=0;
sei();//Interrupts an
zeit_h = ZEIT_DEFAULT/60;
zeit_m = ZEIT_DEFAULT%60;
}