Block 1 Übersicht

Timer & Interrupt

CTC-Modus, Compare Match, ISR - Zeitgesteuerte Abläufe

Timer-Konfiguration

Ergebnis

Timer-Frequenz
250000 Hz
Interrupt-Frequenz
8.00 Hz
Periodendauer
125.00 ms
Timer-Ticks
31250

Formeln

f_timer = f_CPU / Prescaler
f_ISR = f_timer / (OCR1A + 1)
T_ISR = 1 / f_ISR

Arduino Code (Timer1)

// Timer1 CTC Mode Setup
void setupTimer1() {
  cli();                    // Interrupts deaktivieren
  
  TCCR1A = 0;               // Normal mode
  TCCR1B = 0;               // Timer stop
  TCNT1 = 0;                // Zähler zurücksetzen
  
  // CTC Mode, Prescaler 64
  TCCR1B |= (1 << WGM12);   // CTC Mode
  TCCR1B |= (1 << CS11) | (1 << CS10); // Prescaler 64
  
  OCR1A = 31249;            // Compare Match Wert
  
  TIMSK1 |= (1 << OCIE1A);  // Compare Match Interrupt enable
  
  sei();                    // Interrupts aktivieren
}

// Interrupt Service Routine
ISR(TIMER1_COMPA_vect) {
  // Code wird alle 125ms ausgeführt
  digitalWrite(LED_BUILTIN, !digitalRead(LED_BUILTIN));
}

CTC-Modus Visualisierung

TCNT1 (Zähler)
OCR1A (Compare)
Interrupt

Typische Anwendungen

1 Hz
RTC, Uhr, Blinker
50-1000 Hz
PWM, Motorsteuerung
1-10 kHz
Audio, Frequenzgenerierung
100-1000 kHz
Schnelle Abtastung

Wichtige Register

TCCR1B (Mode & Prescaler) CS12|CS11|CS10 | WGM12
OCR1A (Compare Value) 16-Bit (0-65535)
TIMSK1 (Interrupt Enable) OCIE1A (Compare A)
TIFR1 (Interrupt Flag) OCF1A (auto-clear)