-         

Ergebnis 1 bis 6 von 6

Thema: Software PWM

  1. #1
    Erfahrener Benutzer Begeisterter Techniker Avatar von albundy
    Registriert seit
    16.10.2004
    Beiträge
    282

    Software PWM

    Anzeige

    SMARTPHONES & TABLETS-bis zu 77% RABATT-Kostenlose Lieferung-Aktuell | Cool | Unentbehrlich
    Hallo,

    ich möchte ein LCD Display dimmen. Habe aber bis jetzt noch keine brauchbare Idee, um das umzusetzen.
    Ich habe bereits einen Timer mit 10ms IRQ in Betrieb, der die Dauer des Dimmens bestimmen soll.
    Das ganze soll etwa 1,5 - 2 Sekunden dauern.
    Mein Programm läuft mit 8 MHz.
    Hardware PWM ist leider nicht möglich.

    Ich brauche eigendlich nur einen Denkanstoß, wie ich das in einer separaten Schleife realisieren kann.

  2. #2
    Erfahrener Benutzer Robotik Einstein Avatar von SprinterSB
    Registriert seit
    09.06.2005
    Ort
    An der Saar
    Beiträge
    2.801
    "PWM per Software" reicht nicht als Anstoß?


    http://www.roboternetz.de/wissen/ind...M_per_Software
    Disclaimer: none. Sue me.

  3. #3
    Erfahrener Benutzer Begeisterter Techniker Avatar von albundy
    Registriert seit
    16.10.2004
    Beiträge
    282
    PWM per Software" reicht nicht als Anstoß?
    Leider nicht wirklich. Ich habe vorher schon danach gesucht.

    Sorry, ich kann mir das irgendwie nicht richtig vorstellen.

    max
    Gibt die Auflösung der PWM an. Für max=100 hat die PWM eine Auflösung von 1% und es können 101 verschiedene duty cycle eingestellt werden (von 0 bis 100)
    duty
    Codiert den duty cycle; kann Werte von 0..max annehmen. Ein Wert von 0 entspricht 0%, ein Wert von max entspricht 100%.
    Wenn ich 1,5 Sekunden dimmen will, in 10ms Schritten, wäre das als "Max" 150 ?
    Wie muss ich mir in dem Zusammenhang "Duty" vorstellen ?

  4. #4
    Erfahrener Benutzer Robotik Einstein Avatar von SprinterSB
    Registriert seit
    09.06.2005
    Ort
    An der Saar
    Beiträge
    2.801
    Zitat Zitat von albundy
    Wenn ich 1,5 Sekunden dimmen will, in 10ms Schritten, wäre das als "Max" 150?
    Das wäre eine Möglichkeit. Es kommt ja auch darauf an, welche Auflösung die PWM haben soll.

    Du brauchst zwei Takte:

    1) Ein Takt für die PWM, Frequenz f1. Dieser führt die im Artikel codierte Aktion aus. Dies sollte in möglichst äquidistanten Schritten erfolgen, um die PWM-Frequemz sicher zu stellen und den Jitter klein zu halten. Der Code ist nicht aufwändig und fühlt sich in einer ISR nicht unwohl. Für die Frequenz der PWM gilt dann f_PWM = f1 / MAX.

    2) Ein Takt, mit dem du DUTY hochlaufen lässt. Dieser ist bei dir 10ms und nach 1.5s bist du bei 100%. Das kann unabhängig (asynchron) zu 1) geschehen.

    Falls in einer ISR kein Platz ist oder das zu hohe Last macht wegen der IRQ-Rate, geht evtl. auch eine doppelt geschachtelte Schleife, aber dann wird die Nebenläufigkeit mit deinen anderen Aufgaben behindert.
    Disclaimer: none. Sue me.

  5. #5
    Erfahrener Benutzer Robotik Einstein Avatar von wkrug
    Registriert seit
    17.08.2006
    Ort
    Dietfurt
    Beiträge
    1.897
    @albundy
    Ich versteh da dein Problem nicht so ganz.
    Dein Timer mit 10ms produziert ein PWM Signal mit ca. 50Hz (wenn ich das richtig verstanden habe).
    Der Eingang des PWM Generators wird mit einem der Helligkeit entsprechenden Zahlenwert gefüttert. Einfacherweise nimmt man dafür einen Wert von 0 für AUS bis 255 VOLL AN, weil dieser Zahlenbereich in ein Register passt.
    Diese PWM würd ich in einem normalen Timer Interrupt laufen lassen, der die entsprechende Pulsbreite an einem oder mehreren Ports ausgibt.
    Die Dimmer Werte würd ich von einem anderen Timer Interrupt generieren lassen und die Werte dann einfach von der PWM Routine abholen lassen.

    Somit kannst Du die Dimmfrequenz und die Dimmdauer getrennt voneinander einstellen. Musst allerdings auch 2 Timer dafür opfern.
    Man kann natürlich auch beides in eine PWM Routine packen, wenn man denn tatsächlich keinen Timer mehr frei hat.

  6. #6
    Erfahrener Benutzer Begeisterter Techniker Avatar von albundy
    Registriert seit
    16.10.2004
    Beiträge
    282
    @SprinterSB

    danke, ich denke, ich habe es jetzt verstanden.

    Ich baue mir eine Schleife die alle 0,1ms "Tick" hochzählt.
    Im Timer Int. (10ms) zähle ich "Duty" hoch.
    Beide Zähler zählen jeweils bis 200. Wobei "Tick" dann wieder auf "0" gesetzt wird.
    Somit erhöht sich in 200 Schritten ( 2 Sekunden) der "pwm=1" Zyklus in 0,1 ms Schritten.

    Das der Controller während dessen nichts anderes machen kann, ist kein Problem.
    Ich werde es heute mal ausprobieren.

    @wkrug

    wenn ich einen Timer frei hätte, würde ich Hardware PWM dafür nehmen.

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •