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;
}