LPC1768 und PWM

Gast #3034471
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
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
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
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
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

Eine eigene Frage? Dieser Thread ist über 13 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.