Timer2 Interrupt

Gast #4553580
Lesenswert?
• ▲
▼
Hallo Leute,
ich versuche mich mit den Interrupts vertraut zu machen. Will zur Übung 
eine einfache Funktion am Timer2 in eine ISR packen...
Die funktionierende Funktion:

//Initialisierung//
TCCR2 =  (1<<WGM21) | (1<<WGM20) | (1<<CS20) | (1<<COM21) ;

//TopValue beschreiben//
OCR2 = ADC_value;

So kann gebe ich am OC2 ein Signal von 62,49kHz aus und kann den 
Tastgrad mit einem Poti verstellen.

Jetzt versuche ich das ganze per ISR zu realisieren:
//Initialisierung//
TCCR2 =  (1<<WGM21) | (1<<WGM20) | (1<<CS20;
TIMSK |= (1<<OCIE2);
sei();

//TopValue beschreiben//
OCR2 = ADC_value;

//ISR//
ISR (TIMER2_COMP_vect)
{
  PORTD ^= (1<<PD7);
}

Bekomme ein Signal mit 31.24kHz. Das beschreiben des OCR2 hat jedoch 
keinen Einfluss.Das sich die Frequenz halbiert hat leuchtet mir ein. 
Aber was mache ich falsch, dass OCR2 keinen Einfluss hat?
Benutze einen ATmega32.
Gast #4553615
Lesenswert?
• ▲
▼
Du toggelst beim erreichen des Vergleichswertes, deshalb sieht es aus, 
also ob die Periodendauer gleich bleibt (d.h. nur der Zeitpunkt des 
Toggelns verschiebt sich nur).
Ich glaub du erwartest eigentlich, dass bei 0 (Overflow Interrupt) 
eingeschattet wird und beim erreichen des Wertes (Comp Interrupt) wieder 
ausgeschaltet.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren