ATmega32 Timer 1 Normal Mode

Dieses Sourcecode Example bereibt den Timer1 des ATmega32 im Normal Mode.


Beschreibung

In diesem Programm läuft Timer1 im Normal Mode. Er zählt bis (2^17)-1 und setzt sich anschliessend zurück. In der main() Schleife wird das oberste Bit des Zählerregisters aiuf einen Digitalausgang übertragen. Dieser schwingt mit einer Periodendauer von 8.38s.

Buchtippp:


AVR Mikrocontroller
Programmierung in C

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: Downloadlink

Signalplots

ATmega16 Timer 1 Normal Mode

Gelb: PA0 ist gleich dem höchsten Bit des Zählerregisters