Sinus via PWM und Timer2 Mega8 will nicht :(

Gast #433985
Lesenswert?

Hallo,
ich wollte via PWM einen 1bit DAC realisieren, der einen Sinus aus einer 
Sinustabelle ausgibt.
Tabelle spar ich mir jetzt ;)
Timer wie folgt initialisiert:
1
void initTimer2(void)
2
{
3
 // Timer2 Fast PWM, toggle OCR2 on match
4
 TCCR2 = (1 << WGM20) | (1 << WGM21) | (1 << COM20) | (1 << COM21) | (1 << CS20);
5
 OCR2 = 0;
6
}
Und im Capture IRQ lade ich jeweils den nächsten Sinus Wert:
1
// Globale Variable
2
volatile unsigned char uOffset;
3

4
ISR(TIMER2_COMP_vect)
5
{
6
  OCR2 = sinetable[uOffset++];
7
}
Der Mega8 läuft mit internen 1MHz und an PB3 ist einen LED angebracht.
Statt nun periodisch heller und dunkler zu werden, geht die LED einfach 
aus :(
Wo liegt mein Fehler ?
Falscher PWM Modus oder ist 1MHz einfach zu schnell ?
Danke ;)
Gast #433997
Lesenswert?

"Compare" != "Capture"! Das sind zwei völlig unterschiedliche Dinge. 
Abgesehen davon kann ich Rolf nur zustimmen: Das Codeschnipselchen von 
Dir enthält weder die lokale Freigabe des Compare-Interrupts noch die 
globale Interrupt-Freigabe. Ein bisschen ausführlicher darf es schon 
sein...
Gast #434019
Lesenswert?

Sorry,
mein Fehler :?
1
void initIRQ(void)
2
{
3
    // Timer IRQs enabled
4
    // Timer2 CompareMatch2
5
       TIMSK = (1 << OCIE2);
6
    // Timer0 OverFlow
7
       TIMSK = (1 << TOIE0); 
8
       sei ();
9
}
10

11
void initPorts(void)
12
{
13
  // PortB PWM outs 
14
  DDRB = (1 << PB1) | (1 << PB2) | (1 << PB3);
15
}

Timer0 wird später dann zu key-debouncing benutzt werden.
Nur habe ich gerade mal folgendes probiert und festgestellt das die IRQ 
Routine gar nicht angesprungen wird :(
1
ISR(TIMER2_COMP_vect)
2
{
3
  OCR2 = sinetable[uOffset++];
4

5
    // Debugging LED on when IRQ
6
    PORTB |= (1<<PB2);
7

8
}

Also Timer2 im Fast PWM Mode mit vollem takt und Compare-Match = setzen 
Pin und löschen bei TOP.
Compare-Match IRQ enabled.
Wird aber nicht angesprungen :(
Wo ist mein Fehler ?
Danke ;)

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