Verwendung eines Timers als Zähler
Ergänzungen aus der Vorlesung vom 02.04.2014
Lösungen der Aufgabe 1 und 2 von Übung 2 und Varianten zum Zähler-Programm.
|
Übungsaufgaben
Aufgabe 1 - Programmieren Sie eine Stopuhr
|
Aufgabe 2 - Wechselblinkanlage
|
ENDE Ergänzungen aus der Vorlesung vom 02.04.2014
Übung 3 zur Vorlesung vom 09.04.2014
Lösen Sie die Aufgaben A2 und A4 der Übung zur
Vorlesung vom 26.03. (Foto Tafelbild zu Beginn von Kapitel 3) unter Verwendung von
Bitshift-Operatoren und unter Verwendung der
Konstanten, die für jedes Bit der Register definiert sind.
Beispielsweise würde man statt (PORTA & 0b00000001) folgendes
schreiben: (PORTA & (1<
Die notwendigen Vergleichsbedingungen sollen direkt formuliert werden, wo sie benötigt werden, ohne die Verwendung von Hilfsfunktionen.
Die Aufgaben sollen somit in der Form gelöst werden, wie es in der Tabelle 3.3-1 in Kapitel 3.3 in der vierten Spalte (Alternative Umsetzung 3) angegeben ist.
Orientieren Sie sich dabei an der Musterlösung zur Stopuhr-Aufgabe aus der Vorlesung vom 09.04.
ENDE Übung 3
Nutzen des Beispiels
|
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