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?
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?
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
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.
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
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.....
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
Klingt logisch. Manchmal stellt man sich doch zu dumm an. grins Ich werde es nachher mal ausprobieren. :)
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!
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.