kramann.info
© Guido Kramann

Login: Passwort:










10.2 Verwendung eines Timers als Zähler

Nutzen des Beispiels

  • Erstellen eines Echtzeitfähigen Systems.

Verwendete Befehle und ihre Bedeutung

Befehl Bedeutung
TCCR2 Resgister zur Konfigurierung des Timers 2
DDRD |= (1<<PD7); Bit 7 von PortD in jedem Fall auf 1 setzen, ohne die anderen Bits zu beeinflussen.

Tabelle 10.2-1: Befehlsübersicht

Beispielprogramm

#include<avr/io.h>

using namespace std;

int main(void)
{
    bool toggel = false;

    //Timer 2 als Zähler mit Vorteilung von 256 definieren:

            //WGM20 = 0 WGM21 =0 => Zählbetrieb, zählt ständig von 0 bis 255
            //COM20 = 0 COM21 = 0 => Pin OC2 nicht verbunden
            //COM20 = 1 COM21 = 1 => Pin OC2 löschen on Top, setzen bei Compare
            //CS 22 21 20 : 000 gestoppt
            //CS 22 21 20 : 001 Vorteilung durch 1
            //CS 22 21 20 : 010 Vorteilung durch 8
            //...
    TCCR2 = (1<<FOC2) | (0<<WGM20) | (0<<COM21) | (0<<COM20) | (0<<WGM21) | (1<<CS22) | (1<<CS21) | (0<<CS20);

    //OCR2 auf bestimmten Comparewert setzen, um Ton zu erzeugen: ???
    //OCR2 = 127; 

    DDRD |= (1<<PD7); //Pin mit Lautsprecher auf Ausgang setzen.

    toggel = false;

    TCNT2=0;
    while(true)
    {
        //Pin PD7 toggeln:
        if(toggel==true)
            PORTD |=0b10000000;
        else
            PORTD &=0b01111111;
        toggel=!toggel;

        while(TCNT2<36); //90->400Hz, 36->1kHz Durch das Toggeln hört man immer f/2
        TCNT2=0;
    }
    return 0;
}
 

Code 10.2-1: Beispiel

Projekt herunterladen
Übung 4b)
  • Schreiben Sie ein Programm, das auf Tastendruck einen Countdown von 5 Sekunden startet, der auch auf der 7-Segment-Anzeige angezeigt wird, und danach zwei Motoren für drei Sekunden startet.