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 0-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 0-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.
|