Guten Abend
Ich benötige einen ziemlich genauen Sekunden Takt bei meinem Atmega16.
Dazu wollte ich den 12MHz Quarz und einen Timer verwenden.
Hier mein Vorgehen:
Atmega hat keinen ClkDiv aktiviert.
Timer1 bekommt seinen Takt mittels 64x Vorteiler (CS11 & CS10)
Dannach habe ich 187,5KHz bzw. 187500Hz
Nun konfiguriere ich den Timer für den CTC Modus (WGM12)
Setze die Obergrenze auf einen zehntel also auf 18750 - 1
OCR1A = 18749
Im interrupt zähle ich nun auf 10, da ein Durchgang ja 100ms entspricht.
Doch leider blinkt die LED mit weitaus mehr als 1Sekunde.
Ein Interrupt durchgang entspricht ca. 350ms (mit Oszi gemessen)
Hier mein Code
1 | void init_timer(void)
|
2 | {
|
3 | TCCR1A |= (1<<WGM12); //CTC
|
4 | TCCR1B |= (1<<CS11) | (1<<CS10); // 64Div = 187,5 KHz (mit Variable /10 = 18.75KHz);
|
5 | TIMSK |= (1<<OCIE1A); //Int für OC1A
|
6 | OCR1A = 18750 - 1;
|
7 | }
|
Was ist hier nur falsch?
danke schonmal