Hallo ! Habe das Problem, dass ich bei meinem ATmega168 die PWM nicht vernünftig zum laufen bekomme. Kriege auf PB1 exakt eine steigene und eine fallende Flanke und das wars dann. Jemand eine Idee, wo mein Fehler liegt ? Gruß S.Dierking PS: Habe gerade noch folgendes hinzugefügt: ISR(TIMER1_COMPA_vect) { }
Ich kann übrigens durch verändern des OCR1A Wertes die Pulsbreite des einen Pulses einstellen.........!
Im Code sind prinzipielle Fehler:
1 | TCCR0B = (0<<CS00) | (0<<CS01) | (1<<CS02); |
enthält 2 Fehler: Erstens kann man keine "0" shiften und ver-odern, also 0<<CS00 geht nicht. Zweitens soltest du nicht "TCCR0B = ..." sondern "TCCR0B |= ..." schreiben, sonst kann es sein das du vorherige Einstellungen überschreibst. Obige Zeile sollte also wie folgt aussehen: TCCR0B |= (1<<CS02); TCCR0B &= ~( (1<<CS00) | (1<<CS01) ); So jetzt überarbeite nochmal deinen Code (es betrifft auch andere Register) und schaue dann obs klappt. siehe auch: http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial#Schreiben_in_Register
außerdem würde ich an deiner Stelle den CTC-Mode des Timer 1 für die PWM nutzen...
>Erstens kann man keine "0" shiften und ver-odern, also 0<<CS00 geht >nicht. Ich denke, daß die 0 hier ein Platzhalter ist, falls man im Code mal schnell eine 1 draus machen will. Die Schreibweise ist also in Ordnung und recht oft in Codebeispielen zu finden. >Obige Zeile sollte also wie folgt aussehen: >TCCR0B |= (1<<CS02); >TCCR0B &= ~( (1<<CS00) | (1<<CS01) ); Wenn es nur eine Init des Timers ist, kann man es so schreiben, wie im Original-Code. >außerdem würde ich an deiner Stelle den CTC-Mode des Timer 1 für die PWM >nutzen... Ich nicht. Jeder Timer, der PWM kann, kann auch verwendet werden. Der CTC-Mode ist gut, wenn man die Auflösung der PWM variieren will. Wenn man nur das Puls-Pausen-Verhältnis ändern will, braucht man den CTC nicht.
Die Änderungen haben leider keine Verbesserungen gebracht..! Habe aber gerade festgestellt, dass wenn ich ein OCR1A++(mit Verzögerung z.B. alle 0,5s) in meine hauptschleife einbau, die Pulse regelmäßig kommen. Warum das so ist, ist mir allerdings ein Rätsel.
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.