Forum: Compiler & IDEs timer und servo wollen nicht...


von problem_child (Gast)


Angehängte Dateien:

Lesenswert?

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...

von neuer (Gast)


Lesenswert?

deine whileschleife wird wahrscheinlich wegoptimiert.
schau dir mal den objektcode an.

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Gibt's einen wichtigen Grund, die Hardware-PWM nicht zu
benutzen?

von problem_child (Gast)


Lesenswert?

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...

von Rolf Magnus (Gast)


Lesenswert?

> deine whileschleife wird wahrscheinlich wegoptimiert.

Eher nicht, denn das wäre nicht erlaubt.

von Karl heinz B. (kbucheg)


Lesenswert?

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?

von problem_child (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.