diyundso.de

8-Bit-Overflow-Timer beim AVR

Alle AVRs besitzen mindestens einen 8-Bit-Timer. Ein Timer erzeugt einen Interrupt zu einem bestimmten Zeitpunkt.
Im Falle dieses 8-Bit-Timers wird beim Speicherüberlauf eines 8-Bit-Registers ein Interrupt ausgelöst.

Die Häufigkeit eines solchen Speicherüberlaufs hängt vom eingestellten Zählertakt ab. Ein Speicherüberlauf findet alle 256 Zählertakte statt. Der Zählertakt lässt sich wie folgt festlegen:

Zählertakt = CPU-Takt/x, x Element {1,8,64,256,1024}

Interrupt durch 8-Bit-Timer/Counter x Overflow

Zählertakt einstellen:

TCCRx = 0x01; //CPU-Takt
TCCRx = 0x02; //CPU-Takt/8
TCCRx = 0x03; //CPU-Takt/64
TCCRx = 0x04; //CPU-Takt/256
TCCRx = 0x05; //CPU-Takt/1024

TIMSK |= (1<<TOIEx); //Interrupt durch Timer/Counter x Overflow aktivieren
Der Interrupt wird alle (Vorteiler*256)/CPU-Takt s ausgelöst

Beispiel Interrupt durch 8-bit-Timer/Counter 0 Overflow

#include <avr/io.h>
#include <avr/interrupt.h>

ISR(TIMER0_OVF_vect){
//Interrupt-Code, wird bei 1MHz CPU-Takt alle 1s/((1000000/64)/256) = 16,4ms ausgeführt


//CODE AUSFÜHREN

}


int main (void){

TCCR0 = 0x03; //CPU-Takt/64
TIMSK |= (1<<TOIE0); //Interrupt durch Timer/Counter 0 Overflow aktivieren
sei(); //Interrupts global aktivieren

while(1){};

return 0;
}
Impressum

Valid HTML 4.01 Transitional