mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Flackern beim Dimmer


Autor: Alex R. (geneo)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hi, ich hab da ein (kleines?) Problem: Ich habe jetzt einen PWM-Dimmer 
programmiert. Klappt auch soweit ganz gut, bis auf eine Ausnahme: Der 
Dimmer flackert beim faden. Ich habe auch die Werte überprüft, aber 
irgendwie find ich keinen Fehler. Zumal das Flackern auch nur vereinzelt 
und sehr unregelmäßig kommt, als ob da Spannungsschwankungen sind.
Zum Code:
Ich lass die 1. und 6. LED ausfaden. Bei ca. jedem bis jedem zweiten 
Durchgang kommt es unterschiedlich oft ( ein bis ca. 10 mal ) zu einem 
sehr kurzen Aufleuchten.
Hoffentlich kann mir einer von euch sagen, woran es liegt...
Gruß,
Alex

Autor: Fred (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

ich schätze mal, dass das daher kommt, dass Du den Sollwert für die PWM 
auf einen Wert setzt, der kleiner als der Istwert ist. Beispiel:

alter PWM Wert = 100
neuer PWM Wert = 50

Wenn Du jetzt im Bereich von 0 bis 49 umschaltest, dann wird der Wert 50 
erkannt und sofort der neue Wert übernommen.
Wenn Du aber schaltest, wenn der Wert zwischen 50 und 100 liegt, dann 
läuft erstmal der Timer über und nochmal bis zur 50, bis dieser Wert als 
Compare Match erkannt wird. Damit ist Deine PWM für eine Periode auf 
100% und verursacht ein kurzes Aufleuchten.
Abhilfe schaffen best. PWM Modi, Stichwort "glitch" bzw. "glitch free"
Gruß

Fred

Autor: Alex R. (geneo)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Vielen Dank. Das mit den Phasen ohne Ausschalten wegen der Extrarunde 
war auch ein ursprünglicher Gedanke von mir, allerdings habe ich ihn zu 
früh verworfen, da ich mein Programm so strukturiert habe, dass dieser 
Fall verhindert wird. Stichwort Doublebuffering. Tatsächlich hattest du 
Recht, da ich eine Zeile zu weit vorn hatte:
"while ( intern_buffer != buffer ) ;"
Das Aktualisieren der Dimmkonfiguration wurde blockiert, bevor die 
Konfiguration im ersten UND zweiten Buffer aktualisiert wurde. Daraus 
entstand sporadisch folgende verheerende Situation:
Es wird gewartet, bis die Timerroutine den aktuellen Buffer benutzt, 
dann wird der inaktive aktualisiert und der Buffer auf den inaktiven 
geswitcht. Danach wird der zuvor aktive Buffer aktualisiert.
Bei dem Schritt im vorigen Satz passiert nun die von dir beschriebene 
Situation: Da der nun inaktive Buffer geändert wird, obwohl noch _unter 
Umständen_ die Timer-Routine darauf zugreift, können Extrarunden 
entstehen.

Die erwähnte Warteroutine musste also nur direkt nach dem Bufferswitch.

Zur Zeit überlege ich, aus dieser Endlosschleife etwas besseres zu 
machen, da sie doch so ziemlich die Fade-Geschwindigkeit reduziert.

Liebe Grüße,
Alex

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.