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
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
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
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.