LPC1768 und PWM

Gast #3034471
Lesenswert?

Salut,

Frage zu PWM über das Timermodul bei LPC17xx:
ist es möglich eine PWM mit variablem Dutycycle über die MATm.n Pins 
auszugeben? Wenn ja, wie? 50% Dutycycle kriege ich hin, aber bei 
variablem Teil käme mir nur ein Neubelegen der MRx Register in einer ISR 
in den Sinn. Geht es auch ohne ISR?
Hintergrund: auf dem LPC1768 Board von Steinert ist MAT2.0 rausgeführt 
als Backlight zum TFT.
Gast #3571859
Lesenswert?

Wenn der Timer so eingestellt ist, dass z.B. das MR3 Register den Reset 
des Timers macht und MR2 für die PWM dann geht das schon. Das MR 
Register im Interrupt zu setzten ist nicht nötig. Es bleibt ja so wie du 
es einstellst stehen. Wie hast du den Timer denn initialisiert?
Gast #3572554
Lesenswert?

Marc P. schrieb:

> Aber wie kann er den Pegel des Pins aendern? Es gibt ja bloss
> set/clear/toggle und keines produziert das gew"unschte Ergebnis.

Sehe ich auch so. Einen 50% Dutycycle kriegt man m.E. mit dem Toggle 
hin, aber ich möchte es ja variabel.
Ich bin bis dato davon ausgegangen, dass der Entwickler des Evalboards 
schon an PWM auf dem Backlight-Pin für das TFT gedacht hat, als er die 
Pinbelegung so wählte. Zumal man durch Umbelegung ohne weiteres einen 
PWM Kanal hätte frei machen können.
Grundsätzlich ist es nicht wichtig, da ich für meine Endanwendung 
sowieso einen PWM Kanal für sowas einsetze... aber interessiert hätte es 
mich schon, ob es da einen Kniff gibt. Auf LPCworld hat die Thematik 
auch schon mal jemand gefragt, da kam als Lösung IIRC, dass man es in 
einer ISR machen sollte. :-(
Gast #3572664
Lesenswert?

Ja, ich habe das Anfangs mit den Timern der LPC11xx Serie verwechselt. 
Die können auch PWM ohne Interrupt generieren. Da der LPC1768 aber eine 
separate PWM Einheit hat, fehlt das wohl bei den Timern. Also wird es 
wohl auf ohne eine ISR nicht gehen. Ob das stört kannst nur du wissen.
Gast #3572860
Lesenswert?

Jim Meba schrieb:
> MAT2.0 kann GPDMA Reguests erzeugen, man könnte also via DMA den
> nächsten Match Wert reinschreiben.

M.E. bringt das leider nichts. Nehmen wir an der TC darf bis 1000 laufen 
bevor er auf 0 gesetzt wird. In MR0 steht z.B. 200 drin. Ich kann jetzt 
lediglich auf High/Low oder Toggeln stellen, wenn TC=MR0 ist.
Das Delta zwischen zwei Matches TC=MR0 ist 1000. Stelle ich MR0 via DMA
auf 500, dann ist das Delta immer noch 1000.

Oder wir haben uns missverstanden!

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren