Forum: Mikrocontroller und Digitale Elektronik LED flackerfrei dimmen - mit ATtiny möglich?


von Frank S. (hobbyist)


Angehängte Dateien:

Lesenswert?

Ich habe an einen ATtiny85, der über drei Akkus betrieben wird und daher 
mit 1Mhz läuft, einen BSS138 angeschlossen. An diesem wird eine LED 
betrieben. Wenn ich die LED aber mit PWM dimme, fängt sie sichtbar an zu 
flackern.

Liegt das am ungeeigneten Treiber? Welcher wäre besser geeignet und 
warum?
Oder liegt es daran, dass der ATtiny nur mit 1Mhz läuft?
Oder daran dass die PWM Frequenz grundsätzlich zu gering ist?

Frank

von Ulrich F. (Gast)


Lesenswert?

Bei einer 8 Bit PWM sieht man die Stufen beim Dimmen.

von Marcus P. (marc2100)


Lesenswert?

Hi,
als erstes solltest du einen Widerstand vom ATtiny zum Gate einbauen, 
damit der uC-Port nicht überlastet wird beim umschalten.
Und dann, was für eine PWM-Frequenz hast den den eingestellt?

von Marian (phiarc) Benutzerseite


Lesenswert?

> LED flackerfrei dimmen - mit ATtiny möglich?

Ausgeschlossen. Zum flackerfreien Dimmen von LEDs wird mindestens eine 
32-Bit MCU benötigt.

---

- PWM-Frequenz 500.. 2000 Hz
- Wenn man einen sanften Übergang wünscht (8-Bit Helligkeit kann man 
unterscheiden, bei langsamen Fading also die Stufen "sehen"), muss 
gedithert werden.
- Der BSS138 ist denkbar ungünstig um ernsthafte Ströme zu schalten. 
Geht es nur um kleine LEDs mit If 10..20 mA, brauchst du keinen extra 
MOSFET.

Marcus P. schrieb:
> als erstes solltest du einen Widerstand vom ATtiny zum Gate einbauen,
> damit der uC-Port nicht überlastet wird beim umschalten.

Bei lächerlichen 2 nC Gateladung wird da gar nix überlastet. Da stellt 
ja eine längere Leiterbahn eine größere Last dar.

: Bearbeitet durch User
von Klaus (Gast)


Lesenswert?

Marcus P. schrieb:
> als erstes solltest du einen Widerstand vom ATtiny zum Gate einbauen,
> damit der uC-Port nicht überlastet wird beim umschalten.

Quatsch, das Umschalten von solchen FETs ist das täglich Brot von 
Digitalausgängen. Dafür sind sie gebaut. Eingänge von CMOS Logic sind 
auch nur FETs, meist sogar zwei. Und so ein digitaler Ausgang schaltet 
leicht fünf oder auch mehr Eingänge gleichzeitig.

Und mit einem BSS138 schalte ich (ohne Probleme) auch gern mal ein 
kleines Relais.

MfG Klaus

von Wolfgang (Gast)


Lesenswert?

Ulrich F. schrieb:
> Bei einer 8 Bit PWM sieht man die Stufen beim Dimmen.

Eine stufige Helligkeitsänderung wird man wohl nicht als "Flackern" 
bezeichnen. Beim Flackern zappelt üblicherweise die Helligkeit sichtbar 
um den Mittelwert.

von Ulrich F. (Gast)


Lesenswert?

Warten wir es mal ab....
Vielleicht bekommen wir ja noch die Frequenz genannt....

von Frank S. (hobbyist)


Lesenswert?

Das war vielleicht etwas missverständlich ausgedrückt. Ich meinte nicht 
das Dimmen ansich, sondern das Flackern der LED, wenn ich mit einem Wert 
<255 die Helligkeit reduzieren möchte, wie zum Beispiel

analogWrite(LED, 100);

Die Frequenz kenne ich nicht. Wie kann man diese berechnen?

Frank

: Bearbeitet durch User
von Falk B. (falk)


Lesenswert?

@ Frank Saner (hobbyist)

>Das war vielleicht etwas missverständlich ausgedrückt. Ich meinte nicht
>das Dimmen ansich, sondern das Flackern der LED, wenn ich mit einem Wert
><255 die Helligkeit reduzieren möchte, wie zum Beispiel

>analogWrite(LED, 100);

Beim normalen Arduino und 16 MHz kommen da 488 Hz raus. Da flackert 
nichts.
Es kann sein, daß deine Softwarte auf 16 MHz ausgelegt ist und nicht auf 
1MHz.

von Wolfgang (Gast)


Lesenswert?

Frank S. schrieb:
> Die Frequenz kenne ich nicht. Wie kann man diese berechnen?

Nachmessen wäre wahrscheinlich noch einfacher als zu rechnen.

Und ändern kann man sie auch.
https://github.com/kiwisincebirth/Arduino/tree/master/libraries/PWMFrequency

von Ulrich F. (Gast)


Lesenswert?

Frank S. schrieb:
> Die Frequenz kenne ich nicht. Wie kann man diese berechnen?


Den Tiny kenne ich nicht genug...

Also nur so ein Tipp:
https://www.mikrocontroller.net/articles/AVR-GCC-Tutorial/Die_Timer_und_Zähler_des_AVR

von Wolfgang (Gast)


Lesenswert?

Falk B. schrieb:
> Beim normalen Arduino und 16 MHz kommen da 488 Hz raus. Da flackert
> nichts.

Da soll man sich nicht so sicher sein. Eine zügige Drehung des Kopf 
beschert einem da prächtige gestrichelte Linien, wenn die LED direkt, 
d.h. ohne Diffusor mit ausreichend Abstand, sichtbar ist.

von Jiri (Gast)


Lesenswert?

Falk B. schrieb:

> Beim normalen Arduino und 16 MHz kommen da 488 Hz raus. Da flackert
> nichts.
> Es kann sein, daß deine Softwarte auf 16 MHz ausgelegt ist und nicht auf
> 1MHz.

Das stimmt. Je nachdem, welchen ATtiny-Core man nimmt, sind dort die 
Libs nicht angepasst.
Bei 1 MHz sieht man es dann flackern.
=> Lib anschauen, verstehen, modifizieren, fertig.

von Sigi (Gast)


Lesenswert?

Bei PWM so ab 200 Hz sieht man zwar direkt kein
Flackern mehr, es kann aber trotzdem zu
Kopfschmerzen führen. (ca. 240 Hz: PWM eines
Std.TFT, verursacht bei vielen bei mehrstündiger
Nutzung Kopfschmerzen)

Ich hatte mal dazu vor ein paar Jahren ein Experiment
gemacht: Eine LED per FPGA und PWM dimmen, jeweils
eine Einstellung ein paar Stunden im Hintergrund
laufen lassen:

- bis 1 kHz: nach Stunden wird's unangenehm
- 1-4 kHz: merkt man kaum noch
- ab 4 kHz: überhaupt keine Probleme, selbst nach
  vielen Stunden.

von Peter D. (peda)


Lesenswert?

Der Attiny85 kann die 8Bit-PWM mit 250kHz, da sieht man kein Flackern 
mehr.

Nimmt man dagegen nicht die HW-PWM, sondern irgendne Lib, die das zu Fuß 
in SW macht, sollte man auch die Doku dazu lesen.

Es gibt aber auch schnelle Libs, die 8 Ausgänge mit 12Bit und 4kHz 
schaffen.

von c-hater (Gast)


Lesenswert?

Marian  . schrieb:

> Ausgeschlossen. Zum flackerfreien Dimmen von LEDs wird mindestens eine
> 32-Bit MCU benötigt.

Das war doch hoffentlich Sarkasmus?!

Denn es ist natürlich vollkommener Blödsinn.

Wenn du das wirklich glaubst, hast du nicht den Hauch einer Andeutung 
einer Ahnung davon, wie man sowas sinnvoll programmiert...

von Thomas Bühler (Gast)


Lesenswert?

c-hater schrieb:
> Wenn du das wirklich glaubst,

Du glaubst wirklich, das er das glaubt?
Aber naja, du glaubst ja auch das Assembler die einzig wahre 
Programmiersprache ist. Was soll man da schon erwarten...

von Thomas E. (thomase)


Lesenswert?

Thomas Bühler schrieb:
> Du glaubst wirklich, das er das glaubt?

Das hat er doch gar nicht geschrieben. Er hat geschrieben, dass Marian 
keine Ahnung hätte, wenn er das glaubte.

Also, wer von euch beiden ist jetzt der Idiot?

mfg.

: Bearbeitet durch User
von Thomas Bühler (Gast)


Lesenswert?

Thomas E. schrieb:
> Also, wer von euch beiden ist jetzt der Idiot?

Als in der Schule das Thema Höflichkeit dran war, hast du wohl 
geschwänzt?

Thomas E. schrieb:
> Das hat er doch gar nicht geschrieben.

Nicht direkt, aber implizit unterstellt.

von Lothar (Gast)


Lesenswert?

Marian  . schrieb:
> Zum flackerfreien Dimmen von LEDs wird mindestens eine
> 32-Bit MCU benötigt

Immerhin viel teurer als ein ATtiny85-20PU wäre ein LPC810-DIP8 gar 
nicht :-)

von Rektal Invasiver (Gast)


Lesenswert?

>Thomas E. schrieb:
> Also, wer von euch beiden ist jetzt der Idiot?

>Als in der Schule das Thema Höflichkeit dran war, hast du wohl
>geschwänzt?

>Thomas E. schrieb:
> Das hat er doch gar nicht geschrieben.

>Nicht direkt, aber implizit unterstellt.

Das kommt dabei heraus, wenn sich humorlose Idioten in einem Forum 
treffen.

von Marian (phiarc) Benutzerseite


Lesenswert?

Das ist dann wohl das Werk von Poe's Law.

von Pd G. (pdg)


Lesenswert?

Abseits der Geplänkel noch mal ein ernster Tipp:

Es gibt einen Flacker-Effekt, der besonders bei sehr kleinen 
eingestellten Helligkeiten auftritt. Dafür ist ein einfacher Grund 
verantwortlich: die übliche Serienschaltung des Schalters (hier ein FET) 
und der LEDs.

Vermeiden kann man das mit Konstantstromspeisung der LED (-Kette) und 
Parallelsteuerung: der schaltende FET liegt dabei parallel zur LED 
(-Kette) und schließt sie sozusagen kurz. Was passiert dabei?
Der fließende Strom aus der KSQ ist identisch, wird nur um die LEDs 
herum geleitet. Die Verlustleistung am FET ist dabei wie bei der 
Serienschaltung abhängig von Strom und seinem Rdson, nur dass sie 
umgekehrt zu dort besonders im gedimmten Fall anfällt.

Tests haben ergeben, dass mit dieser Schaltung extrem gut bei sehr 
kleinen Helligkeitswerten gedimmt werden kann. Das Auge ist halt 
logarithmisch und bei diesem Arbeitspunkt besonders empfindlich.

Bitte aber beim Entwurf berücksichtigen, dass für einwandfreie Funktion 
eine ausreichend schnelle KSQ notwendig ist.

von Stefan (Gast)


Lesenswert?

Mir ist das Fehlerbild noch nicht ganz klar.

Flackert die LED gedimmt ständig oder tut sie es nur in dem Moment wenn 
der Dimmwert geändert (verkleinert) wird?

Ist das Flackern gleichmässig?

Falls nicht, ändert sich die Helligkeit beim Flackern zwischen 0 und 
eingestelltem Dimmwert oder zwischen Dimmwert und maximaler Helligkeit 
(aufblitzen)?

von wolke (Gast)


Lesenswert?

Stefan schrieb:
> Mir ist das Fehlerbild noch nicht ganz klar.

Flackert wahrscheinlich nur bei künstlicher Raumbeleuchtung.

von Ungläubiger (Gast)


Lesenswert?

Pd G. schrieb:
> Tests haben ergeben, dass mit dieser Schaltung extrem gut bei sehr
> kleinen Helligkeitswerten gedimmt werden kann. Das Auge ist halt
> logarithmisch und bei diesem Arbeitspunkt besonders empfindlich.

Was hat die Schaltung mit der logarihmischen Empfindlichkeit des Auges 
zu tun?

von asFKLEJ (Gast)


Lesenswert?

ne

mfg

von Karl H. (kbuchegg)


Lesenswert?

Stefan schrieb:
> Mir ist das Fehlerbild noch nicht ganz klar.

Das Fehlerbild ist ganz einfach.

Er hat ein Arduino Programm genommen, welches auf eine Taktfrequenz von 
16Mhz ausgelegt ist und lässt es auf einem 1Mhz Tiny laufen. Dadurch 
dass die Taktfrequenz auf 1/16 gedrosselt ist, ist auch die PWM auf 1/16 
gedrosselt (weil alles auf 16Mhz hingerechnet ist). Dadurch wiederrum 
kommt die PWM Frequenz in einen Bereich in dem man (auch ohne Kopfdreher 
und sonstige Spezialfälle) die LED deutlich flackern und nicht mehr 
gedimmt sieht.
Weiter oben wurde angemerkt, dass die Arduino PWM auf 488Hz hingetrimmt 
ist. Ich habe keinen Grund anzunehmen, dass diese Information nicht 
stimmt. 488 / 16 ergibt 30Hz. Und das sieht man nun mal flackern. Ganz 
ohne irgendwelche Nebenbedingungen.

: Bearbeitet durch User
von bianchifan (Gast)


Lesenswert?

Frank S. schrieb:
> Ich habe an einen ATtiny85, der über drei Akkus betrieben wird und daher
> mit 1Mhz läuft, einen BSS138 angeschlossen. An diesem wird eine LED
> betrieben. Wenn ich die LED aber mit PWM dimme, fängt sie sichtbar an zu
> flackern.
oje..

Frank S. schrieb:
> Liegt das am ungeeigneten Treiber? Welcher wäre besser geeignet und
> warum?
Welcher Treiber?
LED-TReiber?
Deine Schaltung ist beschissen.

Frank S. schrieb:
> Oder liegt es daran, dass der ATtiny nur mit 1Mhz läuft?
nein

Frank S. schrieb:
> Oder daran dass die PWM Frequenz grundsätzlich zu gering ist?
u.a.

Ich mag den ATTiny85, für LED-Steuerungen - sprich Taschenlampen, 
Fahredbeleuchtung - verwende ich ausschließlich den ATTiny13, der reicht 
aus.
U.a. kann man den auch mit 9.6 takten, bei Power-LiIon und 2A LED-Strom 
sollte das machbar sein...

Kurz und knapp, PWMte LED flackern immer!
Ist die PWM ausreichend hoch, kann das menschliche Auge das Geflimmere 
aber nicht mehr sehen, ein Fotapparat (bzw. dessen Sensor) dagegen schon 
;)
Moderne LED-Treiber sind so konzipiert, dass sie den Lichtstrom 
augenfreundlich stufenlos auf- und abschwellen lassen.

EIn paar Foren Tips:
Messerforum
CandlePowerForum
BudgetLightForum

Immer gut im Kontext mit LED und LiIon:
Lygte.dk

Ein paar Links für den Anfang:
http://www.messerforum.net/showthread.php?67738-Interesse-an-individuellen-led-Treibern&p=664718#post664718

http://www.candlepowerforums.com/vb/showthread.php?201383-Build-a-Basic-uC-3-Level-Led-Driver-A-Tutorial

http://budgetlightforum.com/node/799

von Karl H. (kbuchegg)


Lesenswert?

bianchifan schrieb:

> Frank S. schrieb:
>> Oder liegt es daran, dass der ATtiny nur mit 1Mhz läuft?
> nein

Du hast das 'analogWrite' überlesen.
Ein klarer Hinweis auf Arduino Code.
Und der ist nun mal ohne spezielle Vorkehrungen für 16Mhz ausgelegt.

Auch wenn mit 1Mhz eine PWM problemlos möglich ist: in seinem Fall unter 
Verwendung der original Arduino Umgebung nicht.

von Ulrich F. (Gast)


Lesenswert?

Karl H. schrieb:
> in seinem Fall unter
> Verwendung der original Arduino Umgebung nicht.
Es muss nichts an der Arduino Umgebung geändert werden.

Man muss nur das Vorteiler Register beschreiben.
Und selbst das Verfahren findet sich in der Arduino Doku recht gut 
beschrieben. Wenn auch nur für die Standard Arduinos. Für den Tiny muss 
man selber mal denken.

Nicht die Arduino Umgebung ändern, sondern Hirn einschalten.

In diesem Thread ist klar geworden, WARUM es flackert. Es steht dem 
abstellen der Symptome nur noch die Dokuleseverweigerung und 
Denkfaulheit im Wege.
Aber das scheinen mir lösbare Probleme zu sein... ;-)

von Falk B. (falk)


Lesenswert?


von Karl H. (kbuchegg)


Lesenswert?

Ulrich F. schrieb:

> In diesem Thread ist klar geworden, WARUM es flackert.

Das ist schon klar.
Ich will nur verhindern, dass einige den TO durch diverse Treiber und 
sonstige Dinge auf eine falsche Fährte locken. Das hatten wir schon oft, 
dass sich gerade Anfänger sinnloserweise an jeden Strohhalm klammern, 
wenn sie nur ja nichts in ihrer Entwicklungsumgebung und/oder Programm 
umstellen müssen.

von Ulrich F. (Gast)


Lesenswert?


von Frank S. (hobbyist)


Lesenswert?

Vielen Dank für die vielen aufschlussreichen Antworten!
Eure Annahme, dass ich mit der Arduino IDE arbeite, ist richtig. In der 
Auswahl der Boards hatte ich "ATtiny85/1Mhz intern" ausgewählt. Damit 
flackerte es. Nachdem ich die themenbezogenen Antworten hier gelesen 
habe, habe ich die Fuses auf "intern 8Mhz" geändert. In der Arduino IDE 
habe ich dann "ATtiny85/8Mhz intern" eingestellt. Seitdem ist kein 
Flimmern mehr zu erkennen. Ich nehme an, dass es, wie weiter oben 
ausführlich erläutert, an den Teilern in der Arduino IDE liegt. Aber wie 
auch immer, jetzt macht die LED, was sie soll :)

Frank

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
Noch kein Account? Hier anmelden.