Unterrichts- und Lernmaterial für Mikrocontroller
Unterrichts- und Lernmaterial fürMikrocontroller

Kapitel 2

1 - Der Timer

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.

2 - Fusebits-Einstellungen überprüfen

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.

Abbildung 9 - Über das Hauptmenü wird das Fenster über Lock und Fuse Bits geöffnet.

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.

Abbildung 10 - Fusebits des ATtiny13a

Von den acht Fusebits interessieren nur die ersten fünf:

Abbildung 11 - Werkseinstellungen der Fusebits Low

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.

3 - Einen Ton erzeugen

Aufgabe

Stelle den Timer eines ATtiny13a so ein, dass er über einen Piezo-Lautsprecher einen hörbaren Ton von ca. 500 Hz ausgibt.

Treppenhausbeleuchtung 1
Material
  • 1x  USB-ISP-Programmer
  • 1x  Schwenkhebel-Modul  (Nullkraft-Sockel) für Programmer
  • 1x  AVR Mikrocontroller, z. B. ATtiny13
  • 1x  Energiequelle, 5V; z. B. 3x1,5V Typ AA in einem Batteriehalter
  • 1x  Piezo-Lautsprecher
  • 2x  Steckdraht
  • 1x  Steckbrett
  • 1x  PC mit der Software BASCOM
Aufgaben
  • Trenne alle Kabelverbindungen zwischen Steckbrett und PC.
  • Baue die Schaltung nach Schaltskizze bzw. Verdrahtungsplan auf dem Steckbrett auf.
  • Starte das Programm BASCOM und übertrage das Programm piezo_LS1.bas in den Editor.
  • Speichere das Programm ab, überprüfe es auf Syntaxfehler und korrigiere diese gegebenenfalls.
  • Compiliere das Programm und brenne es anschließend in den ATtiny13.
  • Trenne die Kabelverbindung zum Programmer und entnimm den ATtiny13.
  • Setze den Controller in die aufgebaute Schaltung ein und lege die Spannungsversorgung an.
  • Überprüfe, ob der Lautsprecher einen hörbaren Ton erzeugt.

Schaltskizze und Schaltungsaufbau

Abbildung 12 - Piezo Lautsprecher am ATtiny13a

Das Programm PiezoLS1.bas

Abbildung 13 - piezo_LS1.bas

Wie arbeitet das Programm PiezoLS1.bas

Zur Initialisierung eines Timers ist die folgende Ablauffolge notwendig:

 

Timer konfigurieren über

  • Config TIMER0 = Timer, Prescale = ?
    Auf das Vorteilerverhältnis (Prescale) kann über das Register TCCR0 zugegriffen werden.

Timer einschalten

  • Enable TIMER0

Interrupt einschalten

  • Enable Interrupts

Interrupt Service Routine (ISR) festlegen

  • On TIMER0 Unterprogramm_ISR

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:

Abbildung 14 - Oszillogramm der Ausgangsspannung B.0 - Prescaler = 8. Die Frequenz liegt bei 271 Hz.
  • Ändert man den Prescaler auf 64 ab, dann ergibt sich ein rechnerischer Frequenzwert von ca. 36 Hz, der nur noch als schnarrender Brummton wahrnehmbar ist - wenn überhaupt;-) Auf dem Oszilloskop kann der Praxiswert mit ca. 34 Hz gut nachgewiesen werden.
Abbildung 15 - Oszillogramm der Ausgangsspannung an B.0. Prescaler = 64. Die gemessene Frequenz liegt bei ca. 34 Hz.

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

Druckversion Druckversion | Sitemap
© Reinhard Rahner - Gettorf