hi, ich schaffs einfach nicht mit meinem atmega8 ein pwm signal zu erzeugen. mein quarz hat 3686400 H. ich wollte das so machen: timer1 loest alle 20ms einen interrupt aus und setzt pin0 von PORTB auf high, stellt timer2 und der sollte nach 1.5ms pin0 wieder auf low setzen. meine rechnung: (3686400 * 0.02) / 8 = 9216 fuer timer1 (3686400 * 0.0015) / 64 = 84 fuer timer2 waere echt dankbar fuer jede hilfe. ich probier jetz schon ziemlich lange daran herum und weis einfach nicht warum das nicht will...
deine whileschleife wird wahrscheinlich wegoptimiert. schau dir mal den objektcode an.
Gibt's einen wichtigen Grund, die Hardware-PWM nicht zu benutzen?
hi, warum ich die hardware-pwm nicht benutz ist pure unwissenheit ;) hab gerade mal in avr-studio getestet und da scheint es als würde das timing passen...
> deine whileschleife wird wahrscheinlich wegoptimiert.
Eher nicht, denn das wäre nicht erlaubt.
Erzähl mal. Woran scheitert es denn? 'Es funktioniert nicht' ist ja wohl eine etwas dürftige Fehlerbeschreibung. Kriegst du am Ausgang Pulse? (Halte mal eine LED mit Vorwiderstand dran: sollte leuchten bzw. glimmen). Ich hab jetzt die Timer-Zahlen nicht nachgerechnet, aber wenn die stimmen: Bist du sicher, dass der Quarz auch aktiv ist?
hi, hab den fehler jetz gefunden. das problem war, dass auch wenn ich den interrupt von timer2 ausschalte timer2 natürlich weiterläuft und auch in den 20ms überläuft. weil der interrupt aus ist wird auch das überlaufflag nicht wieder entfernd. also wird der interrupt sofort ausgelöst, wenn ich in der ISR von timer1 den interrupt von timer2 wieder aktiviere. musste also noch TIFR &= 0xc0 einfuegen und jetz gehts. trotzdem danke, dass ihr so schnell geschrieben habt!!!
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.