www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik PWM mit ATMEGA128 funktioniert nicht


Autor: Ronny Schulz (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich will eine PWM-Steuerung mit dem ATMEGA128 aufbauen. Aber das
funktioniert schon im Debugger nicht. Programmieren will ich das mit
WinAVR. Hier der Codeschnipsel:

cli();
OCR3A = 20;
OCR3B = 20;
OCR3C = 20;
TCNT3 = 0;
TCCR3A |= 1<<COM3A1 | 1<<COM3A0 | 1<<COM3B1 | 1<<COM3B0 | 1<<COM3C1 |
1<<COM3C0 | 1<<WGM30;
TCCR3B |= 1<<WGM32 | 1<<CS31;
sei();

Folgende Konfiguration:

Timer 3 soll mit einem Prescaler von 8 (im Debugger ist es relativ egal
welche Frequenz) alle 3 PWM-Ausgänge mit FastPWM 8-Bit ansteuern.  Laut
Konfiguration soll der Ausgang bei "compare match" High sein und bei
"TOP" auf Low sein. Der zweite Teil funktioniert nicht. Also der
Ausgang wird zwar High, wenn TCNT3 20 erreicht. Aber wird nie wieder
Low. Wo kann der Fehler liegen?

Autor: Ronny Schulz (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Also das PWM soll natürlich so laufen, dass der Controller damit nachher
nicht mehr belastet wird und das sollte doch gehen. Ich muss doch nicht
immer einen IRQ auslösen lassen, wenn TCNT3 0xFF erreicht. Denn, wenn
ich es im Datenblatt richtig verstanden habe, sollte er bei meiner
Konfiguration:

TCNT3 = 20 (0x14) -> Ausgang OC3A = HIGH, OC3B = HIGH, OC3C = HIGH

und bei:

TCNT3 = 255 (0xFF) -> Ausgang OC3A = LOW, OC3B = LOW, OC3C = LOW

sein. Oder ist das ein Denkfehler?

Autor: Gerd Laschinski (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Ronny,

zählt denn TCNT3 von 0 bis 255 und dann wieder von 0 bis 255 usw.?
Die TCCR3A und TCCR3B sind meiner Meinung nach richtig gesetzt. Und in
dieser Konfiguration hat es bei mir schon funktioniert. Aber ich habe
es direkt im Meag128 ausprobiert.

Gruß
Gerd

Autor: Ronny Schulz (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Gerd,

ja genau so ist es. Der TCNT3 zählt von 0 - 255 und dann wieder von
vorn. Hast Du vielleicht den Beispielcode mal da? Ich habe das mit
AVRStudio 4.11 debugged und kompiliert mit WinAVR. Es sollte eigentlich
schon im Debugger laufen.

In der Hardware wollte ich später testen. Dazu muss ich mit dem Oszi
ran und müsste da noch einiges an Programm ändern, weil die Frequenz
zum einen viel zu hoch ist für mein Oszi und zum anderen noch andere
Steine im Weg liegen.

Autor: Gerd Laschinski (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Ronny,

habe momentan keinen Beispielcode zur Hand. Wie sehen denn Deine
Ausgänge bei TCNT3 = 0, 19, 20, 21 und 255 aus?

Gruß
Gerd

Autor: Ronny Schulz (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das geht nicht so genau, da ich ja nicht Takt für Takt ausprobieren
kann. Es sei denn ich würde den Prescaler ändern:

0 -> Low
21 -> High
255 -> High

Danach nie wieder Low.....

Autor: Gerd Laschinski (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Probier es doch mal im Mega128, vielleicht stimmt etwas mit dem Debugger
nicht. Du brauchst auch kein schnelles Oszilloskop. Ein einfaches
Multimeter an den Ausgang dranhängen genügt. Falls der Ausgang High
bleibt, dann mißt Du 5 Volt, sonst den gemittelten PWM-Wert.

Gruß
Gerd

Autor: Ronny Schulz (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Klingt logisch. Manchmal stellt man sich doch zu dumm an. grins Ich
werde es nachher mal ausprobieren. :)

Autor: Ronny Schulz (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Also der Debugger scheint wieder einmal zu spinnen. Die Schaltung an
sich funktioniert. Ging nachher sogar mit Oszilloskop zu messen.

Danke für die Hilfe!

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.