Forum: Mikrocontroller und Digitale Elektronik Timer2 Interrupt


von Marcel (Gast)


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.

von Marcel (Gast)


Lesenswert?

Die Klammer hinter CS20 habe ich vergessen

von Mein grosses V. (vorbild)


Lesenswert?

Zeig dein ganzes Programm.
0 Errors, 0 Warnings.
Aus diesen Fetzen ist der Fehler nicht ersichtlich.

von Ziegenpeter (Gast)


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.

von Dieter F. (Gast)


Lesenswert?

Marcel schrieb:
> Aber was mache ich falsch, dass OCR2 keinen Einfluss hat?
> Benutze einen ATmega32.

Datenblatt S. 125 - Du hast Mode 3 eingestellt, willst aber mit Mode 2 
arbeiten.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.