Timer Funktionsprinzip 8-Bit-Timer des ATmega28 Beispiel Timer im Polling- und Interrupt-Betrieb Funktionsprinzip Timer ist ein in Hardware realisierter i Zähler ändert seinen Zählerstand mit einer vorgegebenen Taktrate ( timer ) reagiert au bestimmte Weise, wenn Zählerstand vordeinierte Bedingung erüllt Zählerstand 5 4 3 2 0 2 3 4 5 t n timer n
Zweck von Timern Generierung einer verlässlichen Zeitbasis zur Steuerung von Programmabläuen, z.b.: - Wartezeiten mit beriedigender Genauigkeit einstellen - Einlesen von Daten von externen (über Ports) oder internen (ADC,...) IO-Bausteinen in bestimmten Zeitintervallen Timer generiert dazu Ereignisse in genau zu bestimmenden Zeitintervallen t ereignis ein Ereignis kann sein: x timer - das Setzen von Flags in bestimmten Registern - das Generieren von Interrupts Betriebsarten von Timern (Beispiele) Ereignisse MAX MAX PREVAL Zählrichtung up, down wählbar BOTTOM BOTTOM t t tereignis MAX t ( ) Ereignis MAX PREVAL timer timer MAX MAX TOP TOP BOTTOM BOTTOM t tereignis MAX tereignis TOP timer (Phasenverschiebung) timer Timer mit N Bit: MAX=2 N BOTTOM=0 TOP, PREVAL beliebig wählbar t 2
Zählrequenz des Timers einachster Fall: Zählrequenz entspricht dem Takt des Controllers timer CPU Problem: Takt des Controllers ist ot sehr hoch, so dass die Zählrequenz des Timers ebenalls relativ hoch ist - Beispiel 8-Bit-Timer (MAX=2 8 ): tereignis MAX CPU 8 6 tereignis 2 0 s 256 s bei CPU timer MHz ereignis 3, 9kHz t ereignis ür langsame Vorgänge (z.b. das Blinken einer LED oder das Messen langsamer Änderungen physikalischer Größen) sind kleinere Frequenzen nötig - das Verringern des Prozessortaktes bewirkt eine Verringerung der gesamten Rechengeschwindigkeit -> schlechte Lösung Lösung: Einsatz von Prescalern Prescaler teilen den Prozessortakt herunter timer N CPU Pr escaler Beispiel: ür N Prescaler =024 und CPU =MHz 8 024 tereignis MAX 2 262ms 6 CPU 0 NPr escaler ereignis 3, 85Hz t ereignis weitere Möglichkeit: Verwendung eines externen Taktes ür den Timer, der unabhängig ist von CPU - man nennt das asynchroner Modus - auch dieser Takt kann durch Prescaler heruntergeteilt werden 3
Beispiel Timer0 des ATmega28 Überblick Prescaler Output-Compare-Unit Register Timing-Diagramme Die Timer des ATmega28 ist mit 4 Timern ausgestattet: - 2x 8-Bit-Timer (Zählregister hat 8 Bit, MAX=255) - 2x 6-Bit-Timer (Zählregister hat 6 Bit, MAX=65535) Timer unterscheiden sich außerdem in ihrem Funktionsumang, z.b.: - Ausgabe eines Signals über Pin des C (waveorm generation) - PWM (Pulse Wide Modulation) - Zeitstempel ür eintreende Ereignisse - Zählen eintreender Ereignisse hier beschränken wir uns, am Beispiel des Timer0 (8 Bit), au die Grundunktionalität eines Timers 4
Blockschaltbild Timer0 4 2 6 3 5 Prescaler Controllertakt osc 5
Output-Compare-Unit Die Register von Timer0 TCCR0 TCNT0 OCR0 TIFR TIMSK 6
Timer/Counter Control Register TCCR0 Waveorm Generation Mode Compare Match Output Mode Clock Select Force Output Compare Timer-Counter-Control-Register TCCR0:[WGM0 und WGM00] TOV0= OC0= MAX MAX TOP BOTTOM normal mode BOTTOM CTC mode WGM0 WGM00 normal mode 0 0 CTC* 0 *clear timer on compare match 7
Zähl- und Vergleichsregister TCNT0, OCR0 Zählregister (Timer Counter Register): mit jedem Takt wird der Zählwert um erhöht, Register kann auch mit einem Wert geladen werden, ab dem gezählt werden soll (PREVAL in Folie 3) Output Compare Register: wird mit dem Wert TOP geladen, d.h. hat das Zählregister den hier gesetzten Wert erreicht, wird ein Ereignis ausgelöst (Flag setzen, evtl. Interrupt auslösen) ASynchronous Status Register ASSR ür den Fall, dass der Timer von externem Takt versorgt wird (asynchroner Mode) - wird hier nicht weiter behandelt 8
Timer Interrupt Flag Register TIFR gelten ür Timer0 Timer setzt Flag au, wenn eine Bedingung eingetreten ist: - OCF0 (Output Compare Flag): nach Erreichen von TOP oder BOTTOM je nach Zählrichtung - TOV0 (Timer Overlow Flag): nach Erreichen von MAX oder BOTTOM je nach Zählrichtung au das Setzen des Flags durch den Timer kann man warten (Polling) - das Flag muss dann durch das Programm wieder zurückgesetzt werden - Rücksetzen der Flags erolgt durch Schreiben einer (!) in das entsprechende Bit des Registers Timer Interrupt Mask Register TIMSK gelten ür Timer0 schaltet Interrupts ein, wenn au gesetzt - OCIE0: Timer0 löst Interrupt aus, wenn Zählwert TOP erreicht (Output Compare Interrupt Enable) - TOIE0: Timer0 löst Interrupt aus, wenn Zählwert MAX erreicht (Timer Overlow Interrupt Enable) sobald Timer das jeweilige Flag in TIFR gesetzt hat, wird der dazu passende Interrupt ausgelöst - ein Interrupt löscht das jeweilige Flag automatisch wieder 9
Normal Mode Timing-Diagramm Normal Mode mit Prescaler Timing-Diagramm 0
CTC-Mode mit Prescaler Timing-Diagramm Beispiele LED2 blinkt. Die Wartezeit (Geschwindigkeit) wird nun nicht mehr mit _delay_ms() gesteuert, sondern mit dem Timer0. Zwei verschiedene Methoden werden angewendet:. Polling, Normal Mode, Timer Overlow (konstante Geschwindigkeit in Abhängigkeit vom Prescaler) CPU MHz 2. Interrupt, CTC Mode, Output Compare Match (Geschwindigkeit ändert sich in Abhängigkeit vom Wert im OCR-Register) R CPU MHz 0ms t 250ms ereignis
Berechnung der Werte ür das Output-Compare-Register CPU timer N Pr escaler ( OCRval ) N t ( ) Pr escaler ereignis OCRval timer CPU tereignis CPU OCRval NPr escaler 2 6 0 0 t ereignis 0ms OCRval min 9 024 3 6 250 0 0 tereignis 250ms OCRvalmax 243 024 tatsächlicher Bereich : 0,24ms t 249,856ms ereignis 2