Moin Jungs, wie würdet ihr das machen:? Gegeben Atmega mit 7,2738MHz Gewünscht: eine PWM mit einer festen High Zeit von ca. 30mS und variablen Low Zeiten von 30mS bis 144s. Meine erste Idee: 2 Timer, einer der für die Low Zeiten zuständig ist und einer der aktiviert wird sobald der erste Timer um ist und den Pin auf High geschalten hat. Der zweite timer schaltet den Pin nach 30ms wieder auf Low. Mit einem 16 bit Timer kann ich mit einem Prescaler von 1024 nur maximal 9,1s "überbrücken" bevor er überläuft. Ich müsste also eine feste Zeitbasis zählen lassen und eine Variable für die Sekunden hochzählen lassen und dan in der Main auf den gewünschtetn Vergleichswert vergleichen oder wie würdet ihr das machen? Die Länge des High Pegel muss immer gleich bleiben. Wär da für Vorschläge dankbar. Grüße Christian
:
Bearbeitet durch User
Chris tian schrieb: > wie würdet ihr das machen:? > Gegeben Atmega mit 7,2738MHz > > Gewünscht: eine PWM mit einer festen High Zeit von ca. 30mS und > variablen Low Zeiten von 30mS bis 144s. Einen Timer für CTC mit einer Halbperiode von 30ms programmieren, so genau es halt Timerbreite und Muttertakt zulassen. Der Rest passiert im OC-Interrupt des Timers. Natürlich ausschließlich in Vielfachen von 30ms (bzw. dem Wert, der sich aus dem dem verfügbaren Muttertakt als bestmögliche Näherung ergab) Bis hierhin ist das wirklich Kinderkram. Interessant wird es erst, wenn du für die "kleinen" Low-Zeiten genauer als das 30ms-Raster werden mußt. Mußt du?
Abere mit nem 16Bit timer komm ich doch maximal auf eine Periodendauer von 9 Sekunden, dann hab ich top erreicht und der Pin wird umgeschaltet? Oder hab ich was übersehen?
Chris tian schrieb: > Abere mit nem 16Bit timer komm ich doch maximal auf eine Periodendauer > von 9 Sekunden, dann hab ich top erreicht und der Pin wird umgeschaltet? > Oder hab ich was übersehen? Ja. Man kann den Timer auch rein als Zeitgeber für Software benutzen. Er muß nicht notwendigerweise direkt an den Pinpegeln rumhäkeln. Oder anders augedrückt: Du mußt einfach nur in der ISR einen Zähler implementieren. Dort vergleichst du den Stand deines Zählers mit dem aktuellen Sollwert deiner PWM (z.B. zwischen 1*30ms=30ms und 4800*30ms=144s).Ist der Zähler >= aktueller Sollwert, wird er auf 0 zurückgesetzt. Letzlich schaust du, ob dein Zähler Null ist und gibst genau dann "high" aus, ansonsten "low". Echt primitiv, oder?
Chris tian schrieb: > Gewünscht: eine PWM mit einer festen High Zeit von ca. 30mS und > variablen Low Zeiten von 30mS bis 144s. c-hater war schneller, aber... Nur aus Neugier: Wozu brauchst du das ?
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.