ATmega16 Timer 1 CTC Mode

Im CTC Mode zählt der Timer 1 eine vorgegebene Anzahl Clockzyklen ab, bevor er sich zurücksetzt.


Beschreibung

Dieses Beispiel lässt den Timer 1 im CTC Mode ein 1Hz signal an OC1A erzeugen. Mit einem clock von 8MHz, einem Prescaler von 1024 und einem TOP Zählerwert von 3906 setzt sich der Timer zwei mal pro Sekunde zurück. Jedes Mal wird OC1A getoggelt.

C Sourcecode

#include <avr/io.h>

int main(void)
{

     DDRD = 0x20;                         // Setup PD5 as output

     OCR1A = 3906;                        // F_Timer = F_clk/Prescaler
                                          // = 8'000'000 / 1024 = 7812.5
                                          // F_PD5 = F_Timer/ 2 / OCR1A
                                          // = 7812.5 / 2 / 3906 = 1.00006Hz

     TCCR1A = (1<<COM1A0);                // CTC mode, toggle OC1A on compare match
     TCCR1B = (1<<CS12)|(1<<CS10)         // Start Timer1 with prescaler 1024
             |(1<<WGM12);
 
     for(;;);                             // Endless loop
                                          // main() will never be left

     return 0;                            // This line will never be executed

}

Download C-Sourcefile mit ASCII-Schema: C-Sourcefile mit ACII-Schema

Signalplots

ATmega16 Timer 1 CTC Mode 1

Gelb: Digitales Ausgangssignal (OC1A) PD5