ATmega8 Timer1 Normal Mode

Dieses Code Example betreibt den Timer1 des ATmega8 im Normal Mode und lässt einen Ausgang toggeln.


Beschreibung

Der 8MHz Clock des ATmega8 wird durch 1024 geteilt, so dass für den Timer1 Frequenz von 7812.5kHz zur Verfügung steht. In der Endlosschleife wird jeweils das MSB des Timer1 abgefragt. Dieses Toggelt, nachdem der ähler auf 2^15 gezählt hat. Dies findet mit einer Freuquenz von 7812.5kHz / 2^15 statt. Der Ausgang PC0 wird mit dieser Frequenz getoggelt. So entsteht am Ausgang ein Signal mit der Frequenz 7812.5kHz / 2^16 = 0.1192Hz. Dies entspricht einer Periode von 8.38s

C Sourcecode

#include <avr/io.h>
                                    // Calculations in the comments
                                    // are valid vor a CPU Clock of 8MHz
int main(void)
{
    DDRC = 0x01;                    // Set PC0 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
            PORTC |= 0x01;          // Set PC0
        else
            PORTC &= ~0x01;         // Reset PC0
                                    // F_PA0 = 7812.5Hz/(2^16)=0.1192Hz
                                    // t_period_PC0 = 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

####Plotbeschreibung####

Gelb: Digitaler Ausgang PC0