ATmega8 Timer1 CTC

CTC Code Beispiel für den Timer1 des ATmega8


Beschreibung

Der ATmega8 Timer1 CTC Mode zählt in diesem Beipsiel immer auf 3906. Nach der Rechnung 8MHz / 1024 / 2 / 3906 = 1.00006Hz erscheint deshalb am Ausgang OC1A en Signal von zeimlich genau 1Hz. Der Faktor 1024 kommt vom Timer1 Prescaler. Der Faktor 2 ist in der Rechnung, weil das Signal getoggelt wird, dies findet pro Periode zwei Mal statt.

Buchtippp:


AVR Mikrocontroller
Programmierung in C

C Sourcecode

#include <avr/io.h>

int main(void)
{

     DDRB = 0x02;                         // Setup PB1 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

####Plotbeschreibung####

Gelb: Digitaler Ausgang PC0