diyundso.de
8-Bit-Counter im Compare Match Mode am AVR
Der Interrupt wird ausgelöst, wenn der Vergleichswert erreicht wird. Im CTC-Mode der Counter dann wieder auf 0 zurückgesetzt.
Codebeispiel:
#include <avr/io.h>
#include <avr/interrupt.h>
void start_timer2(void){
TCCR2 = 0x01; //CPU-Takt
//TCCR2 = 0x02; //CPU-Takt/8
//TCCR2 = 0x03; //CPU-Takt/32
//TCCR2 = 0x04; //CPU-Takt/64
//TCCR2 = 0x05; //CPU-Takt/128
//TCCR2 = 0x06; //CPU-Takt/256
//TCCR2 = 0x07; //CPU-Takt/1024
TCCR2 |= (1<<WGM21); //Zuruecksetzen des Counters aktivieren (CTC)
//Vergleichswert 8-bit
OCR2 = 199;
TIMSK |= (1<<OCIE2); //Interrupt aktivieren
DDRB |= (1<<5); //Als Ausgang setzen
sei(); //Interrupts global aktivieren
}
ISR(TIMER2_COMP_vect){
PORTB ^= (1<<5);
}
int main (void){
start_timer2();
while(1){};
return 0;
}
Im obigen Beispiel wird also PB5 alle 200 Zählertakte getoggelt.