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

Kapitel 3

1 - Timer - Teil 2

Im Kapitel 2 - Timer wurde der Einsatz eines Timers vorgestellt. Es ist eigentlich ein Zähler, der zum Beispiel beim ATtiny13a bei Erreichen der Zahl 255 einen Overflow anzeigt (er kann als 8-Bit Zähler nicht über 255 hinaus zählen) und dann einen Interrupt auslöst, der dann zum Beispiel einen Toggle-Vorgang an einem definierten Ausgang auslöst (Kapitel 2 - Abschnitt 8).

Das Hochzählen von 0 bis 255 kann mit einem Preload-Wert verkürzt werden. Setzt man einen Preload-Wert von 100 an, dann zählt der Timer vom gesetzten Wert bis 255 hoch und löst dann einen Interrupt aus; die Zeitspanne bis zum Auslösen eines Interrupts lässt sich auf diese Weise feiner einstellen. Das werden wir im Folgenden ausnutzen.

 

  • Aufgabe
    Unter Angabe eines geeigneten Preload-Wertes soll ein 500 Hz Signalton an den Ausgang B.0 eines ATtiny13a gelegt werden.

2 - Kleiner mathematischer Einschub

Es werden die folgenden Bezeichner eingeführt:

  • fST       Frequenz des Systemtaktes unter Berücksichtung der Fusebits
  • fAT       Frequenz des Arbeitstaktes
  • fAUS     Frequenz am Ausgang B.x eines Controllers
  • PreS     Prescaler
  • PreL     Preload

Bei einem 8-Bit Timer wird nach CKMAX = 256 Ticks ein Overflow ausgelöst und damit eine Interrupt-Service-Routine (ISR) aufgerufen. Setzt man einen Vorgabewert CKPreL, dann wird nach

  • CK = CKMAX - CKPreL                 (1)
    

Ticks ein Overflow ausgelöst. Zusätzlich wissen wir, dass sich die Frequenz des Arbeitstaktes bei einem Controller über Formel (2) bestimmen lässt:

  • fAT = fST(+Fuse) / Prescalewert     (2)
    

 

Die Frequenz am Ausgang errechnet sich dann zu

  • fAUSGANG = fAT /(2*CK)                (3)
    

Beispiel

CKMAX = 256   (8-Bit Timer)

fST(+Fuse) = 9,6 MHz / 8 = 1,2 MHz

fAT = 150 kHz

PreS = 8

Mit den Vorgabewerten eines ATtiny13a errechnet sich nach (2) die Frequenz des Arbeitstaktes zu

  • fAT = 1.200.000 Hz/ 8 = 150.000 Hz

 

Die Ausgangsfrequenz ergibt sich über Formel (3) dann zu

  • fAUSGANG = 150.000 Hz / (2 * 256) = 292,96875 Hz

Aus (3) folgt mit (1)

  • fAUSGANG = fAT /(2*( CKMAX - CKPreL  ))      (4)
    

 

Löst man Gleichung (4) nach CKPreL auf, erhält man

  • CKPreL = CKMAX - fAT / (2*fAUSGANG)           (5)
    

Zur Berechnung der Vorgabe-Ticks CKPreL muss man in (6) die gewünschte Frequenz am Ausgang fAUSGANG, die Frequenz des Arbeitstaktes fAT und die maximal möglichen Ticks des Timers CKMAX eingeben und erhält die Vorgabe-Ticks (preloads).

Beispiel

Wie groß muss der CKPreL-Wert sein, damit am Ausgang ein Signal mit einer Frequenz fAUSGANG von 500 Hz steht?

 

CKMAX = 256   (8-Bit Timer)

fAT = 150 kHz

fAUSGANG = 500 Hz

Berechnung über (5) ergibt einen CKPreL-Wert von 106 oder 0x6A.

Die Berechnung der mit einem Vorteiler herabgesetzten Oszillatorfrequenz zeigt die folgende Tabelle. Sie ist als Excel-Datei schnell zu erstellen und erspart einem im Einzelfall viel Rechenarbeit. Die maximale Timerperiode ergibt sich aus Schwingungsdauer für den Arbeitstakt TAT multipliziert mit dem maximalen Zählwert von 256.

3 - Timer und Preload-Wert

Mit dem soeben berechneten Preload-Wert von 0x6A oder &H6A wird im Realexperiment der Nachweis erbracht, dass die Ausgangsfrequenz im Rahmen der Toleranz des Systems bei 500 Hz liegt.

Timer mit Preload Wert
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 (optional)
  • 1x  USB-Oszilloskop (z. B. Picoscope)
  • 3x  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_LS2.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 mit Hilfe eines USB-Oszilloskops, ob am Ausgang B.0 ein Signal der Frequenz 500 Hz anliegt.

Schaltskizze und Schaltungsaufbau

Abbildung 1 - Schaltungsaufbau ATtiny13a mit Piezo-Lautsprecher

Das Programm Piezo_LS2.bas

Abbildung 2 - piezo_LS2.bas Statt timer0 wurde auch das ALIAS Ovf0 benutzt.

Über GND und B.0 wurde das Signal mit dem Oszilloskop abgenommen und aufgezeichnet. Der Variablen Preload vom Typ Byte wird der errechnete Vorgabewert zugewiesen (Programmzeile 29) und der Timer0 auf diesen Wert gesetzt (Programmzeile 30). Jedesmal, wenn die ISR aufgerufen wird, wird auch der Timer0 auf den Vorgabewert gesetzt. Die nachfolgende Abbildung zeigt das Oszillogramm.

Abbildung 3 - Mit dem Vorgabewert von 0x6A stellt sich die Frequenz am Ausgang B.0 auf ca. 475 Hz ein.

Im folgenden Abschnitt werden wir uns den Timer0 in seiner Funktion als Puls-Weiten-Modulator (PWM) anschauen.

4 - Timer0 als PWM

Der ATtiny besitzt nur einen Timer mit zwei PWM Kanälen (Datenblatt ab S.59). Die für den Timer/Counter zuständigen Register sind TCNT0 und die Output Compare Register A und B OCR0A und OCR0B. Diese beiden Register werden zu jeder Zeit mit dem Timer/Counter Wert verglichen. Das Ergebnis kann vom Wellenformgenerator zur Puls-Weiten-Modulation oder Ausgabe einer  variablen Frequenz genutzt werden.

 

Die Output Compare Unit

Der 8-Bit Komparator vergleicht ständig TCNT0 mit den Output Compare Registern OCR0A und 0CR0B. Sobald Gleichheit zwischen TCNT0 und einem oder beiden Output Compare Register festgestellt wird, wird dies durch das Setzen des entsprechenden Flags OCF0A oder OCF0B mit dem nächsten Taktsignal signalisiert. Wurde der zugehörige Interrupt eingeschaltet, erzeugt das Output Compare Flag einen Output Compare Interrupt. Sobald der Interrupt ausgeführt wird, werden die Output Compare Flags zurückgesetzt. Alternativ geht das auch per Software durch den Eintrag einer 1 an der entsprechenden Bitposition. Der Wellenformgenerator erzeugt bei festgestellter Gleichheit von TCNT0 und den OCRx-Registern ein Ausgangssignal, das durch die Waveform-Generator-Modes Bits WGM0[2:0] und Compare Output Mode COM0x[1:0] festgelegt ist (Datenblatt, S.61ff).

  • Experiment
    Im ersten Versuch zur Puls-Weiten-Modulation (PWM) werden nacheinander verschiedene Tastverhältnisse eingestellt und am Ausgang B.0, an dem eine LED angeschlossen ist, sichtbar gemacht. Parallel dazu werden wir uns die Signalform im Oszillogramm anschauen.
Timer als PWM mit festem Tastverhältnis
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  LED, rot
  • 1x  Widerstand, 220 Ohm
  • 1x  USB-Oszilloskop (z. B. Picoscope)
  • 3x  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 led_pwm_0.bas in den Editor.
  • Setze den ATtiny13a in die Fassung des Programmers.
  • Speichere das BASIC 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 mit Hilfe eines USB-Oszilloskops die Signalform und berechne aus den ermittelten Werten das Tastverhältnis in Prozent.
  • Ändere im BASIC-Programm den Compare0A-Wert auch auf 128 und 230. Kompiliere jeweils das Programm und brenne es in den Controller.
  • Berechne auch für diese Messungen jeweils das Tastverhältnis.

Schaltungsaufbau

Abbildung 4 - Schaltungsaufbau zum Einführungsversuch PWM.

Das Programm led_pwm_0.bas

Abbildung 5 - Programm led_pwm_0.bas mit fest eingestelltem Tastverhältnis

Oszillogramme für drei verschiedene Tastverhältnisse

Abbildung 6 - Oszillogramm zur Programmeinstellung: Clear Down, Compare0A = 10. Das gemessene Tastverhältnis ist 3,93 %.
Abbildung 7 - Oszillogramm zur Programmeinstellung: Clear Down, Compare0A = 128. Das gemessene Tastverhältnis ist 50,29 %.
Abbildung 8 - Oszillogramm zur Programmeinstellung: Clear Down, Compare0A = 230. Das gemessene Tastverhältnis ist 90,07 %.

Wie arbeitet das Programm led_pwm_0.bas?

Will man das Programm verstehen, muss man sich die Arbeitsweise einmal grafisch vor Augen führen. Ein Zähler wird vom Systemtakt des Mikrocontrollers angetrieben und erhöht seinen Wert bei jedem Tick um 1. Sobald er eine voreingestellte Schwelle (Compare0A) erreicht hat, toggelt Ausgang B.0, wobei festgelegt wurde, dass der Togglevorgang mit einer 0 eingeleitet wird (clear down). Entschließt man sich für clear up, dann beginnt der Spannungspegel am Ausgang mit einer 1 oder 5V. Was jetzt im Bild HIGH ist wird dann zu LOW und umgekehrt.

Abbildung 9 - Der Counter zählt permanent von 0 bis 255 und fängt dann wieder von vorne an. Der Ausgang B.0 wird jedesmal, wenn der Vorgabewert erreicht wird, getoggelt.

Im folgenden Kapitel 4 geht es um die Anbindung einen USB-UART Converters an den mächtigeren ATmega8A, der die Möglichkeit eröffnet, Daten über Terminal und Tastatur am PC einzugeben und an den Controller zu übertragen. Auch die umgekehrte Richtung ist möglich. Die Daten vom Controller werden in einem Terminalprogramm am PC sichtbar gemacht. Weiter mit Kapitel 4.

Druckversion Druckversion | Sitemap
© Reinhard Rahner - Gettorf