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.
Impressum

Valid HTML 4.01 Transitional