Forum: Mikrocontroller und Digitale Elektronik ATmega88 - Phase correct pwm funktioniert nicht


von MazzMan (Gast)


Lesenswert?

Ich versuche eine phasenkorrekte PWM zu erzeugen. Dazu verwende ich bei 
meinem ATmega88 den Timer/Counter2 mit OCR2A als TOP. Das Problem ist 
allerdings, dass ich kein PWM erhalte. Die Leitung steht lediglich 
konstant auf der 1, egal was in OCR2A steht. Das selbe Ergebnis bekomme 
ich auch bei Timer/Counter1. Ebenso erfolglos war der austausch des µC.

Das komische ist, dass alle anderen Modi, bei denen WGM22 = 0 ist, 
problemlos funktionieren. Hier der Quellcode:
1
TCCR2A = (1 << COM2A1)|(0 << COM2A0) | (0 << WGM21)|(1 << WGM20); //clear on match when up, set on match when down on OC2A; phase correct
2
TCCR2B = (1 << WGM22) | (0 << CS22)|(1<<CS21)|(1<<CS20); //prescaler: 32
3
OCR2A = 100;

Wo liegt mein Problem?

Datenblatt: http://www.atmel.com/images/doc2545.pdf

von Thomas E. (thomase)


Lesenswert?

MazzMan schrieb:
> Hier der Quellcode

Da fehlt die main-Funktion. So kompiliert das doch gar nicht.

Wie jedes Mal: Zeig dein ganzes Programm und versorg uns nicht mit 
Bruchstücken, die jeder Idiot richtig aus dem Datenblatt übernehmen 
kann.

mfg.

von c-hater (Gast)


Lesenswert?

MazzMan schrieb:

> Wo liegt mein Problem?

Sicher darin, daß du unfähig bist, den Unterschied zwischen Timer-Mode 1 
und Timer-Mode 5 zu begreifen, obwohl das Datenblatt ihn eindeutig 
beschreibt.

Beides ist "phase correct" PWM, klar. Der Unterschied ist, daß im Mode 5 
(der von dir verwendete) mit dem OCRxA-Register die Zykluszeit der PWM 
bestimmt wird, während sie im Mode 1 fix ($100) ist. Das impliziert, daß 
man im Mode 5 natürlich dann keine PWM-Ausgabe an den OCxA-Pins erwarten 
kann. Effektiv hat der Timer im Mode 5 nämlich nur noch einen PWM-Kanal, 
und das ist der durch OCRxB gesteuerte. Und dessen Ausgaben sind 
natürlich nur am OCxB-Pin zu erwarten und das auch nur dann, wenn du 
nicht schwachsinnigerweise die COMxAn-Bits konfigurierst, sondern statt 
dessen die COMxBn.

Vielleicht solltest du das DB nicht nur verlinken, sondern einfach auch 
mal selber lesen? Also mir jedenfalls hat das geholfen...

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.