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


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von MazzMan (Gast)


Bewertung
0 lesenswert
nicht 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:
TCCR2A = (1 << COM2A1)|(0 << COM2A0) | (0 << WGM21)|(1 << WGM20); //clear on match when up, set on match when down on OC2A; phase correct
TCCR2B = (1 << WGM22) | (0 << CS22)|(1<<CS21)|(1<<CS20); //prescaler: 32
OCR2A = 100;

Wo liegt mein Problem?

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

von Thomas E. (Firma: Thomas Eckmann Informationst.) (thomase)


Bewertung
0 lesenswert
nicht 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)


Bewertung
-1 lesenswert
nicht 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...

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.