Ein Timer ist ein Register im AVR Mikrocontroller, dass nichts anderes tut, als hoch zu zählen. Ein 8-Bit Zähler kann von 0 bis zum Wert 255 (0xFF - MAX) zählen; der nächste Zählschritt führt zu einem Overflow. Anschließend wird der Zähler auf 0 (0x00 - BOTTOM) zurückgesetzt und der Zählvorgang beginnt von vorn.
Mit jedem Overflow kann ein Interrupt gekoppelt werden, der unabhängig vom MAX-Wert 0xFF auch von einem beliebigen anderen Wert (TOP) im OCR0A Register abhängen kann.
Interrupt-Anforderungen (ISR - interrupt service routine) werden im Timer Interrupt Flag Register (TIFR0) sichtbar und lassen sich mit Hilfe des Timer Interrupt Mask Registers (TIMSK0) maskieren.
Controller verfügen im Allgemeinen über mehrere Timer mit unterschiedlichen Funktionalitäten, die im Datenblatt dokumentiert sind; der hier eingesetzte ATtiny13 ist nach Datenblatt mit einem 8-Bit Timer ausgerüstet.
Der Taktgeber für einen Timer kann von der CPU-Taktfrequenz, von einem Vorteilerausgang (Prescaler) oder einer externen Taktquelle (beim ATtiny13 über den Pin T0) kommen. Als Prescaler stehen beim ATtiny13 zur Verfügung: 8, 64, 256, 1024.
Die Taktquelle lässt sich bei einem AT-Controller über sogenannte Fuse-Bits einstellen, die ebenfalls im Datenblatt dokumentiert sind. Ganz allgemein lassen sich mit Hilfe der Fuses die Eigenschaften eines AVR-Controllers verändern. Wir werden uns deshalb erst einmal die eingestellten Fuse-Bits des hier benutzten ATtiny13a anschauen.
Die Fusebit-Einstellungen des benutzen ATtiny13 erhält man unter BASCOM über Programmieren - Zum Chip senden - Manuell und öffnen des Registers Lock and Fuse bits.
Im geöffneten Fenster interessieren uns nur die Eintragungen unter Fusebits; die Eintragungen unter Fusebits High entsprechen den Werkseinstellungen und sind für die hier angestellten Betrachtungen nicht relevant.
Von den acht Fusebits interessieren nur die ersten fünf:
Eingestellt bzw. programmiert sind CKSel (Clock select) 10 (9,6 MHz), SUT (start-up time) ebenfalls 10 (slow rising power) und CKDIV8. Das sind übrigens auch die Werkseinstellungen.
---------------------------------------------------------------------------------------------------------------------------
Irritierend ist, dass in diesem Fall die 1 für den nicht gesetzten Fall (nicht programmiert) und die 0 für den gesetzten Fall (programmiert) stehen. Umgekehrt, als wir es bisher gewohnt waren.
---------------------------------------------------------------------------------------------------------------------------
Der ATtiny arbeitet mit diesen Einstellungen mit 9,6 MHz / 8 = 1,2 MHz. Diese Information ist für die weitere Betrachtung wichtig.
Aufgabe
Stelle den Timer eines ATtiny13a so ein, dass er über einen Piezo-Lautsprecher einen hörbaren Ton von ca. 500 Hz ausgibt.
Ton erzeugen | |
Material |
|
Aufgaben |
|
Schaltskizze und Schaltungsaufbau
Das Programm PiezoLS1.bas
Wie arbeitet das Programm PiezoLS1.bas
Zur Initialisierung eines Timers ist die folgende Ablauffolge notwendig:
Timer konfigurieren über
Timer einschalten
Interrupt einschalten
Interrupt Service Routine (ISR) festlegen
Im vorliegenden Programm wurde als Prescaler der Wert 8 gewählt. Bei einem Systemtakt von 1,2 MHz und einem Prescaler von 8 ergibt sich ein Wert von 150 kHz. Der Timer löst immer dann einen Interrupt aus, wenn ein Overflow nach 256 Klicks stattfindet, ruft dann die ISR Piezols auf und toggelt den Ausgang von B.0, an dem der Piezolautsprecher angeschlossen ist. Zwei Toggles ergeben eine volle Periode.
Die am Lautsprecher anliegende Frequenz liegt dann bei 150.000 Hz / 512 = 292,96875 Hz. Das sollte einen gut hörbaren Ton ergeben.
Eine Überprüfung des am Ausgang B.0 anliegenden Signals mit Hilfe eines Oszilloskops zeigt folgenden Verlauf:
Wir sind am Ende dieses Kapitels angelangt.
In Kapitel 3 werden weitere Versuche mit dem Timer/Counter des ATtiny13a angesprochen. Dazu sind die Kenntnisse aus den beiden vorherigen Kapiteln notwendig und es wird die Puls-Weiten-Modulation (PWM) angesprochen. Weiter mit Kapitel 3