ATmega16 Timer 1 Normal Mode

Dieses Codebeispiel setzt den Timer 1 des ATmega16 im Normal Mode auf.


Beschreibung

dieses Beispiel lässt den timer 1 im Normal Mode laufen. Er zählt bis 2^17-1 und setzt sich dann zurück. In der main() Schleife beobachten wir das oberste Bit des Zählerregisters, wie es mit einer Periodendauer von 8.38s schwingt.

C Sourcecode

#include <avr/io.h>
                                    // Calculations in the comments
                                    // are valid vor a CPU Clock of 8MHz
int main(void)
{
    DDRA = 0x01;                    // Set PA0 as output
    TCCR1B = (1<<CS12)|(1<<CS10);   // Start timer1 with prescaler 1024
                                    // Fclk_timer = 8MHz/1024 = 7812.5Hz

    for(;;)                         // Endless loop;
    {
        if (TCNT1 & 0x8000)         // Check the MSB of the timer
            PORTA |= 0x01;          // Set PA0
        else
            PORTA &= ~0x01;         // Reset PA0
                                    // F_PA0 = 7812.5Hz/(2^16)=0.1192Hz
                                    // t_period_PA0 = 8.38s

    }                               // 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 Normal Mode

Gelb: Digitaler Ausgang PA0