Forum: Mikrocontroller und Digitale Elektronik ATmega644 Phase Correct PWM am Timer2


von SvenS2011 (Gast)


Lesenswert?

Guten Abend!

Ich mache nun schon einige Stunden herum Phase Correct PWM mit Timer2 
auf einem ATmega644 ans laufen zu bekommen. Der Pin OC2A bleibt immer 
auf LOW.

folgenden Code verwende ich:
1
int main(void)
2
{
3
    TCNT2 = 0;
4
    OCR2A = 128;
5
    TCCR2A |= (1<<WGM20) | (1<<COM2A0) | (1<<COM2A1);
6
    TCCR2B |= (1<<WGM22) | (1<<CS20)
7
    sei();
8
9
    for(;;){}
10
}

was ich gerne hätte:
- Phase Correct PWM
- Ausgabe an OC2A
- OC2A beim Hochzählen setzen
- Duty Cycle über OCR2A wählen
- kein Prescaler (bzw. 1)

kann dazu bitte jemand meine Werte prüfen - ich weiß echt nicht mehr 
weiter :(

Danke!

von SvenS2011 (Gast)


Lesenswert?

Fast vergessen:
DDRD ist natürlich auf Ausgang eingestellt:
1
DDRD = 0xFF;

von holger (Gast)


Lesenswert?

>Der Pin OC2A bleibt immer auf LOW.

Schalte ihn mal auf Ausgang (DDR!).

von holger (Gast)


Lesenswert?

>Fast vergessen:
>DDRD ist natürlich auf Ausgang eingestellt:
>DDRD = 0xFF;

Ok, dann poste mal den realen Code und nicht irgendwas.

von Karl H. (kbuchegg)


Lesenswert?

Du verwendest den Modus 5.
In diesem Modus fungiert das OCR2A Register als TOP Wert.

Siehe Datenblatt, Tabelle 15.8, Seite 148

Wenn du von OCR2A einen Output haben willst, musst du Modus 1 nehmen. 
Nur WGM20 setzen und sonst nichts.

von SvenS2011 (Gast)


Lesenswert?

vielen Dank! Es funktioniert nun :)
Manchmal hat man einfach Tomaten auf den Augen...

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.