PWM mit ATMEGA128 funktioniert nicht

Gast #210651
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?
Gast #210652
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?
Gast #210653
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
Gast #210654
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.
Gast #210657
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

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