Hallo! Meine Sekunde ist beim Timer1 im CTC-Modus keine genaue Sekunde! Nach 10 Sekunden habe ich ca. eine Abweichung von 1 Sekunde. Ich verwende den ATtiny44. Meine Frequenz beträgt 1MHz. Den Timer Compare Match habe ich auf 50000 gesetzt. Also alle 20ms ein Timer-Interrupt. Hier meine Initialisierung und die ISR:
1 | void start_timer1(void) |
2 | {
|
3 | TIMSK1 |= (1<<TOIE1); // Timer1 overflow interrupt enable |
4 | TIMSK1 |= (1<<OCIE1A); // Interrupt bei Timer Compare |
5 | TCCR1B |= (1<<CS10); // Prescaler = 1 (f=1MHz) |
6 | TCCR1B |= (1<<WGM12); // CTC-Mode (Clear Timer on Compare) |
7 | OCR1A = 50000; // Set timer1 match to 50000 |
8 | }
|
9 | .
|
10 | .
|
11 | .
|
12 | ISR (TIM1_COMPA_vect) |
13 | {
|
14 | if (overflow <= 20) // count 20 timeroverflows ( 1 second ) |
15 | overflow ++; |
16 | |
17 | else
|
18 | {
|
19 | PORTA |= (1<<PA5); |
20 | overflow = 0; // reset counter for timeroverflows |
21 | sekunden ++; // count seconds |
22 | |
23 | ADC_Wert = Read_ADC(); // ADC value (sense voltage) einlesen |
24 | ADC_gesamt += ADC_Wert; |
25 | PORTA &= ~(1<<PA5); |
26 | }
|
27 | }
|