Sehr geehrtes Forum, liebe Gemeinde, ich habe vor, 18 LED-Stripes unabhängig voneinander zu dimmen. Ein Arduino Mega liegt hierfür bereit. Nun hat dieser meines Wissens 15 extra dafür vorgesehene Hardware-PWM-Ausgänge, welche problemlos zu verwenden sind. Leider sind das immer noch 3 zu wenig, weshalb ich auf die SoftPWM-Library von Brett Hagman gestoßen bin. Diese ermöglicht ja PWM auf beliebigen digitalen Ausgängen. Standardmäßig läuft die PWM aber in diesem Fall mit 60Hz, was für flickerfreies LED-Licht wohl etwas grenzwertig sein dürfte. Bin ich mit meiner Herangehensweise, per Software-PWM die 18 Streifen zu dimmen, auf dem Holzweg? Lässt sich die Frequenz auf 150Hz anheben? Oder ist das Ganze evtl. anders einfacher zu bewerkstelligen? Freue mich auf Eure Rückmeldung! Viele Grüße von der Bratwurst ;-)
Ein ATmega2560 kann problemlos 18 oder 24 Ausgänge auch mit 1000 Hz bei 10 bit PWM dimmen, wenn man nicht die Kinderprogrammiererumgebung vom Arduino verwendet, die bremst doch sehr stark, sondern den uC direkt in C (oder gar Assembler, dann noch etwas schneller) programmiert. https://www.mikrocontroller.net/articles/Soft-PWM
Da Licht nicht linear sondern logarithmisch wahrgenommen wird, sollte die Dimmung mit mindestens 12 Bit erfolgen, sonst sieht man deutliche Sprünge in der Helligkeit am unteren Ende und nichts am oberen. PWM Frequenzen deutlich unter 500 Hz sind gut geeignet für Kopfschmerzen, Desorientierung und andere spannede Effekte.
Ansonsten schau dir mal Chips wie den PCA9685 an. Den gibt's auch auf Arduino-User-tauglichen Plug&Play Breakout-Boards. Da kannst du direkt kleine LL-Fets an die Ausgänge basteln, und dahinter deine LED-Strips. Hat aber nur 16 Kanäle, d.H. entweder zwei von den ICs oder zwei PWM-Kanäle vom AVR mitverwenden.
Guido K. schrieb: > Da Licht nicht linear sondern logarithmisch wahrgenommen wird, sollte > die Dimmung mit mindestens 12 Bit erfolgen, sonst sieht man deutliche > Sprünge in der Helligkeit am unteren Ende und nichts am oberen. Jepp. Ich würde sogar eher 16 Bit nehmen. Das reicht dann für für 8Bit-Ansteuerung und Gamma=2.0 aus, für Gamma=2.2 ist aber selbst das noch zu wenig, da braucht man dann schon 20Bit. Angeblich ist aber Gamma=2.2 das Optimum, keine Ahnung woher die (die dies in die Welt gesetzt haben) das wissen wollen. Ich selber sehe jedenfalls keinen wahrnehmbaren Unterschied, ob Gamma nun 2.0 oder 2.2 ist. Auch nicht bei den 20Bit, mit denen das tatsächlich möglich wird... > PWM Frequenzen deutlich unter 500 Hz sind gut geeignet für > Kopfschmerzen, Desorientierung und andere spannede Effekte. Ach watt. Milliarden Menschen haben über viele Jahrzehnte hinweg stundenlang jeden Tag in die (CRT-) Glotze mit 50Hz geschaut. Hätten die das getan, wenn das wirklich massive Beschwerden verusachen würde? Wohl nicht. Einfach mal logisch denken, bitte... Sprich: Insbesondere bei den geringen Helligkeiten kann man sehr deutlich runter gehen. Meine 16Bit-Implementierung z.b. hat für die dunkelste Stufe (also Duty 1:65536) nur noch 56Hz. Aber davon kriegt garantiert niemand irgendwelche Beschwerden, schon deshalb, weil man sich schon anstrengen muß, um überhaupt noch irgendwas leuchten zu sehen. Das geht eigentlich nur, wenn es ringsrum schon sehr dunkel ist. Dann allerdings kann man mit schnellen Augenbewegungen oder durch statisch Betrachtung am Rand des Sehfelds das Flimmern durchaus wahrnehmen. Insofern ist also schon was dran. Aber Kopfschmerzen, Desorientierung usw.? Quatsch mit Soße.
c-hater schrieb: > Ach watt. Milliarden Menschen haben über viele Jahrzehnte hinweg > stundenlang jeden Tag in die (CRT-) Glotze mit 50Hz geschaut. schon mal was von Nachleuchtdauer gehört? Eine Leuchtschicht in einer CRT ist nun mal kein Halbleiter. Die miesen PWM LED der PKW Rückleuchten nerven mich auch, was zu geringe PWM Frequenz ausmacht kennt wohl jeder
:
Bearbeitet durch User
Joachim B. schrieb: > schon mal was von Nachleuchtdauer gehört? > Eine Leuchtschicht in einer CRT ist nun mal kein Halbleiter. Genausowenig wie die Leuchtschicht von (weissen) LEDs... Und ernsthaft zu Beleuchtung wird man wohl nur diese einsetzen wollen. Schon aus Gründen der Energieeffizienz.
c-hater schrieb: > Joachim B. schrieb: > >> schon mal was von Nachleuchtdauer gehört? >> Eine Leuchtschicht in einer CRT ist nun mal kein Halbleiter. > > Genausowenig wie die Leuchtschicht von (weissen) LEDs... > Da leuchtet nichts nennenswert nach.
H. H. schrieb: > Da leuchtet nichts nennenswert nach. Eben, ungefähr genauso wenig wie bei den seligen TV-CRTs. Da hätte das nämlich fürchterlich gestört und häßliche Schlieren bei bewegten Bildinhalten gezogen. Ja, es gab schon CRTs mit wesentlich höherer Nachleuchtdauer. Aber eben nicht als TV. Insofern also: Joachim B.s Einwurf als Bullshit entlarvt. Und damit auch der Schwachsinn mit den angeblichen nennenswerten Beeinträchtigungen bei PWM-Frequenzen von unter 500Hz. Da hätten Millionen oder gar Milliarden Menschen viel Jahrzehnte lang dauernd beeinträchtigt sein müssen. Ist aber nicht so gewesen. Also: Absoluter Schwachsinn!!! Jedenfalls bei geringen Helligkeiten. Und nur die sind überhaupt kritisch. Bei höheren Helligkeiten ist es leicht, auch bei hochauflösender PWM deutlich höherer PWM-Frequenzen zu erreichen. Man muss halt nur ein brauchbares PWM-Schema implementieren.
c-hater schrieb: > Insofern also: Joachim B.s Einwurf als Bullshit entlarvt och das nichts nachleuchtet ist dein Bullshit noch nie gesehen wenn eine Ablenkung oder Hochspannung urplötzlich ausfällt, wie die CRT Leuchtschicht nachleuchtet? JEDER RFS Techniker aus der CRT Zeit kennt die Nachleuchtung, also erzähle du nicht: c-hater schrieb: > Da hätte das > nämlich fürchterlich gestört und häßliche Schlieren bei bewegten > Bildinhalten gezogen. die war schon auf 50Hz abgestimmt und als die 100Hz Technik kam hatten einige CRT damit Probleme
c-hater schrieb: > Insbesondere bei den geringen Helligkeiten kann man sehr > deutlich runter gehen. Kann man :-( > Meine 16Bit-Implementierung z.b. hat für die > dunkelste Stufe (also Duty 1:65536) nur noch 56Hz. Aber davon kriegt > garantiert niemand irgendwelche Beschwerden, schon deshalb, weil man > sich schon anstrengen muß, um überhaupt noch irgendwas leuchten zu > sehen. Das geht eigentlich nur, wenn es ringsrum schon sehr dunkel ist. Das mag für deine Augen und dein persönliches Nervensystem richtig sein. > Dann allerdings kann man mit schnellen Augenbewegungen oder durch > statisch Betrachtung am Rand des Sehfelds das Flimmern durchaus > wahrnehmen. Du "merkst" also doch noch was :-) > Insofern ist also schon was dran. Aber Kopfschmerzen, > Desorientierung usw.? Quatsch mit Soße. Ich sehe mit meinen Augen solche Lichtblitzbeleuchtungen (Duty 1:65536 bei 56Hz) praktisch genauso wie beim reinglotzen in das Stroboskop meiner Diskothek. Letzteres würdest auch du sicherlich wahrnehmen, und im dauerbetrieb als sehr unangenehm empfinden, bis hin zur totalen Desorientierung bei Bewegungen im Raum. Nach wenigen Minuten sind Kopfschmerzen ein kleines Übel, einige andere Menschen riskieren bei so einem schlecht durchdachtem Konzept sogar epileptische Anfälle. Spastik ist nicht spassig!
c-hater schrieb: > Aber Kopfschmerzen, Desorientierung usw.? Quatsch mit Soße. Menschen reagieren da sehr unterschiedlich drauf. Joachim B. schrieb: > Die miesen PWM LED der PKW Rückleuchten nerven mich auch, was zu geringe > PWM Frequenz ausmacht kennt wohl jeder Die müssen die PWM-Frequenz niedrig machen, weil sie sonst zu viele EMV-Störungen verursachen. Könnte man natürlich filtern, aber das würde ja 3 ct mehr kosten. c-hater schrieb: > H. H. schrieb: > >> Da leuchtet nichts nennenswert nach. > > Eben, ungefähr genauso wenig wie bei den seligen TV-CRTs. Da hätte das > nämlich fürchterlich gestört und häßliche Schlieren bei bewegten > Bildinhalten gezogen. > > Ja, es gab schon CRTs mit wesentlich höherer Nachleuchtdauer. Aber eben > nicht als TV. Die Nachleuchtdauer konnte durch Zusammensetzung der Beschichtung gewählt werden und wurde genau so lange gewählt, dass das Flimmern so weit wie möglich reduziert wurde, ohne dass es merkliche Schlieren gibt. Und als die (für damalige Verhältnisse doch sehr komplexe) Technik reif dafür war, sind die 50 Hz auch ziemlich schnell von den Bildschirmen verschwunden.
Ich würde mir das ganze Geflimmer und potentielle Interferenzen untereinander und mit anderen Geräten(**) sparen, eine Spule in den Klimbim einbauen und die potentielle Änderung der Farbtemperatur durch den sich ändernden Konstantstrom einfach hinnehmen. (**)Ich kenne da eine Fabrik, die die Leuchtstoffröhren gegen LED-Lampen getauscht hat. Und auf einmal tickte je nach Tageszeit die Anlage darunter aus. Der Grund: je nach Umgebungshelligkeit bekam die Verstärkungsregelung der verwendeten Lichttaster (die teils auch nach oben schauen und ihrerseits eben auch gepulstes Licht verwenden) so ihre Probleme mit dem neuen Flackerlicht...
:
Bearbeitet durch Moderator
c-hater schrieb: > Ach watt. Milliarden Menschen haben über viele Jahrzehnte hinweg > stundenlang jeden Tag in die (CRT-) Glotze mit 50Hz geschaut. Hätten die > das getan, wenn das wirklich massive Beschwerden verusachen würde? Wohl > nicht. Einfach mal logisch denken, bitte... Ja, bitte mal logisch denken. Die Leuchtstoffe einer Bildröhre sind darauf ausgerichtet eine gewisse Nachleuchtzeit zu haben. Ein Bildpunkt ist grade wieder ganz dunkel, wenn der Elektronenstrahl das nächste mal vorbei kommt. Die Lücke zwischen hell und dinkel ist also eher kurz. LEDs dagegen reagieren sehr viel schneller. (Da wir grad dabei sind Flicker-Messgeräte zu entwickeln, habe ich auch konkrete Messwerte…) LEDs ohne Phosphor (oder Leuchtstoff) reagieren teilweise bis in den MHz-Bereich hinein, bei weißen LEDs sind ein paar 100 kHz normal. Entsprechend ist die PWM bei einer LED wirklich ein ziemlich hartes Abschalten. Die Flimmerwahrnehmung ist deutlich intensiver.
Guido K. schrieb: > Ja, bitte mal logisch denken. > > Die Leuchtstoffe einer Bildröhre sind darauf ausgerichtet eine gewisse > Nachleuchtzeit zu haben. Ein Bildpunkt ist grade wieder ganz dunkel, > wenn der Elektronenstrahl das nächste mal vorbei kommt. Genau. Und was bedeutet das? 50Hz mit voller Amplitude. Nur der Verlauf der Helligkeit innerhalb einer Periode ist anders als bei einem Rechteck. Statt Rechteck was sägezahnähnliches. Das ist alles.
c-hater schrieb: > Genau. Und was bedeutet das? 50Hz mit voller Amplitude. Nur der Verlauf > der Helligkeit innerhalb einer Periode ist anders als bei einem > Rechteck. Statt Rechteck was sägezahnähnliches. Das ist alles. Ja, oder anders gesagt: Es geht nicht nach der kurzen Zeit, für die der Pixel aktiv ist, vollständig aus, sondern leuchtet, wenn auch mit reduzierter Helligkeit, weiter.
c-hater schrieb: > Genau. Und was bedeutet das? 50Hz mit voller Amplitude. Nur der Verlauf > der Helligkeit innerhalb einer Periode ist anders als bei einem > Rechteck. Statt Rechteck was sägezahnähnliches. Das ist alles. Ist schon witzig wie manche Leute einfach weiter Unsinn erzählen, nachdem schon klar gemacht wurde, dass mehrere Anwesende mit dem Thema bestens vertraut sind und einer sogar genau für dieses Thema aktuell grad ein Messgerät (und Prüfnormal) entwickelt. Also mal abgesehen davon, dass so ein Fernseher nicht die einzige Beleuchtung des Raums ist oder sein sollte (da wurde früher auch immer wieder drauf hingewiesen…), ist genau dieses Profil des Lichtverlaufes ein wichtiger Faktor. Und was dann auch noch unter den Tisch fällt ist, dass das Bild ja kontinuierlich auf die Bildröhre geschrieben wird, also fast die ganze Zeit zumindest ein Teil des Bildes grad bei voller Helligkeit ist. Abhängig vom Bildinhalt ergibt sich dann eine eher gleichmäßige Hellgikeit, nur der Ort der Lichtquelle wandert. Dazu kommt noch, dass sich das noch mal durch die Halbbilder relativiert. Aber meine (und die anderer) jahrelange Erfahrung mit LED und Dimming ist wohl nebensächlich im Verhältnis zur Meinung eines Forentrolls.
Alles unter 100Hz PWM geht garnicht. Das mag subjektiv flimmerfrei erscheinen, geht aber auf die Augen. (Hell Dunkel Wechsel verbrauchen Vitamin A) Auch mit 100Hz kann man Digitalfotografie vergessen. Das gibt heftigste Effekte im Zusammenhang mit der Cmos Sensor Abtastfrequenz.
Hallo zusammen, da hab‘ ich ja was losgetreten.. Aber durchaus interessant und lehrreich, was es zum Thema PWM-Frequenzen bei LEDs zu beachten gibt. Ich bin nun übrigens so weit, dass ich auf 18 Pins des Megas eine Software-PWM mit ca. 180 Hz habe :-) Falls ich zur Desorientierung oder Übelkeit etwas bemerke, teile ich hier die Erfahrung. Wobei ich sagen muss, dass die 180Hz (subjektiv) schon nen guten Job machen ;) Es grüßt die Bratwurst!
Prokrastinator schrieb: > Hell Dunkel Wechsel verbrauchen Vitamin A Aus welcher Verschwörungs-Studie hast du denn diese Erkenntnis?
Prokrastinator schrieb: > Auch mit 100Hz kann man Digitalfotografie vergessen. So ein Schwachsinn. Auch Digitalfotografie kann integrieren. Lies' einfach mal bei den Klassikern nach, wie man sowas löst: Belichtungszeit... Zumal die guten PWM-Lösungen diese geringen PWM-Frequenzen ohnehin nur bei den sehr geringen Helligkeiten haben, nach oben hin wird es dann sehr schnell mehr. Und diese extrem geringen Helligkeiten würden als Foto-Beleuchtung sowieso extrem lange Belichtungszeiten erfordern. Paßt also insofern schon automatisch.
c-hater schrieb: > diese extrem geringen Helligkeiten... PWM und --im Mittel-- geringe Helligkeiten hat doch nix mit langszeitgemittelten Helligkeiten zu tun. Nachts isses auch in Afrika dunkel! > ... würden als > Foto-Beleuchtung sowieso extrem lange Belichtungszeiten erfordern Nö. Nein. Nope. Sogar du solltest schon einmal etwas der Begrifflichkeit "Blitzlicht" gehört haben. In voreilendem gehorsam darf für dich ankreuzen: [x] von Photographie auch keinerlei Ahnung Grrrrrrrrrrrr Sorry, aber das musste raus. Dein > Zumal die guten PWM-Lösungen diese geringen PWM-Frequenzen ohnehin nur > bei den sehr geringen Helligkeiten haben bringt mich --ungesehen deiner sicherlich schmerzlichen Flickerkonstrukte-- in rage. Nichtsdestotrotz respektiere ich das posten deiner eigene Meinung, welche du aufgrund deiner eigenen Erfahrung hier kund tust. Du solltest nur kapieren: "deine" Wirklichkeit entspricht nicht "der" Wirklichkeit. Andere "Besserwisser" wissen es wirklich besser. Ok, manchmal mache ich mich in anderen Fäden hier selber zum Affen. Denkfehler über Denkfehler strotzenderweise.... irgendwann sollte man aber eine Einsicht zeigen. Dein irgendwann kommt auch irgendwann. Bevor ich hier jetzt noch anfange (noch mehr) zu rappen; zurück zum TO! Brat W. schrieb: > Wobei ich sagen muss, dass die 180Hz (subjektiv) schon nen guten Job > machen ;) Wer PWM kennt nimmt Konstantstrom, aber deine 180 Hz sind zumindest ein guter Anfang :-) Glückwunsch zu deiner Lösung!
Hallo zusammen, falls noch jemand mitlesen sollte: Habe gestern den ersten Test gemacht. 5m Billig-Led-Band an IRF520-Mosfet-Modulen. Funktioniert einwandfrei und lässt sich hervorragend dimmen. Die 180Hz sind aus meiner Sicht absolut ausreichend und ich (!) konnte keinen der beschriebenen negativen Effekte feststellen. Da flackert nix und erbrechen musste ich auch nicht. Nur eins würde ich noch sehr gerne tunen. Hier im Forum schrieb jmd, dass die Augen das Licht logarithmisch wahrnehmen. Ich würde also anstatt linear, lieber quadratisch in einer Zählschleife hochdimmen, hab aber seither noch keinen richtig eleganten Weg gefunden, das zu tun. Also am besten wie ein heftig breite Parabel, erst langsam, dann steil ansteigend. Hat jmd nen Rat, wie das möglichst einfach ginge? Im Prinzip funktionierts ja jetzt schon super, aber das wäre dann halt die Krönung. Schönen Abend!
Brat W. schrieb: > Hat jmd nen Rat, wie das möglichst einfach ginge? Ich verstehe dein Problem nicht. Rechnen ist doch die Haupt-Funktion jedes Mikrocontrollers. Du musst nur den entsprechenden Ausdruck in deinen Quelltext schreiben. Mindestens 16 Bit PWM vorausgesetzt.
Da hast Du wohl Recht. Trotzdem erlaube ich es mir, in einem Forum mit erfahrenen Leuten, nach Ratschlägen zu fragen. Ansonsten kann mein Post gerne ignoriert werden ;-)
Beispiel für (fast) 160 Stufen:
1 | #include <stdio.h> |
2 | #include <stdint.h> |
3 | |
4 | int main() |
5 | {
|
6 | for (int i = 0; i <= 160; i++) |
7 | {
|
8 | uint16_t pwm = pow(2.0, i/10.0); |
9 | |
10 | // Ausnahme für den maximalen Wert
|
11 | if (pwm==0) pwm=65535; |
12 | |
13 | printf("pwm=%d\n", pwm); |
14 | }
|
15 | }
|
Beim Compilieren muss man die Option -lm angeben, um die math Bibliothek
mit einzubinden.
> gcc test.c -lm
Wenn du das Programm kompakter brauchst (ohne Mathe), kannst du die 161
Werte vorher berechnen und als konstantes Array in den Quelltext
schreiben:
1 | #include <stdio.h> |
2 | #include <stdint.h> |
3 | #include <math.h> |
4 | |
5 | const uint16_t data[]={0,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,3,3,3,3,4,4,4,4,5,5,6,6,6,7,8,8,9,9,10,11,12,12,13,14,16,17,18,19,21,22,24,25,27,29,32,34,36,39,42,45,48,51,55,59,64,68,73,78,84,90,97,103,111,119,128,137,147,157,168,181,194,207,222,238,256,274,294,315,337,362,388,415,445,477,512,548,588,630,675,724,776,831,891,955,1024,1097,1176,1260,1351,1448,1552,1663,1782,1910,2048,2194,2352,2521,2702,2896,3104,3326,3565,3821,4096,4389,4705,5042,5404,5792,6208,6653,7131,7643,8192,8779,9410,10085,10809,11585,12416,13307,14263,15286,16384,17559,18820,20171,21618,23170,24833,26615,28526,30573,32768,35119,37640,40342,43237,46340,49667,53231,57052,61147,65535}; |
6 | |
7 | int main() |
8 | {
|
9 | for (int i = 0; i <= 160; i++) |
10 | {
|
11 | uint16_t pwm = data[i]; |
12 | printf("%d,", pwm); |
13 | }
|
14 | }
|
Am Anfang wiederholen sich einige kleine Zahlen, weil die 16 Bit Auflösung der PWM nicht ausreicht, um diese feinen Abstufungen darzustellen.
Wie genial ist das denn! Vielen Dank für Deine Mühen. Damit habe ich echt nicht gerechnet (im wahrsten Sinne 😃) Ich werde das sobald möglich an meinem Testaufbau ausprobieren und hier berichten. Die Lösung über das Array ist einfach top. Danke nochmal! Gruß
Brat W. schrieb: > Ich würde also anstatt linear, lieber quadratisch in einer Zählschleife > hochdimmen, hab aber seither noch keinen richtig eleganten Weg gefunden, > das zu tun. > > Also am besten wie ein heftig breite Parabel, erst langsam, dann steil > ansteigend. > > Hat jmd nen Rat, wie das möglichst einfach ginge? Stefanus hat einen guten Run :D Anderer Weg: -Wie gehabt auf/ab zählen (das kriegste wohl problemlos hin), Hausnummer 10 verschiedene Hellikeitsstufen mE mehr als ausreichend. -Den ermittelten (=gezählten Wert) darauf basierend Parabolisieren, entweder rechnen, oder aus einer Tabelle auslesen, dieses Ergebnis -> Helligkeitswert. Ontop Brat W. schrieb: > falls noch jemand mitlesen sollte: Dein Faden ist wieder oben. Klar Prominent. > Die 180Hz sind aus meiner Sicht absolut ausreichend Prima, den meisten Menschen reicht das völlig aus! In meinem Hause würde ich dir wegen solchem Geflacker 180 mal pro Sekunde deinen Hals undrehen :D suum cuique
Moin, vielleicht helfen Dir ja meine Erfahrungen mit meinem Dimmer weiter, wie Stefan habe ich eine Tabelle erstellt. Die hat jedoch einen Anfangswert von 256 und endet mit 65535. Damit lassen sich sowohl die 8 Bit als auch die 16 Bit PWM steuern. Bei 1/65535stel leuchtet da noch garnichts. Das mag natürlich mit anderen Treibern anders sein. Ich nutze 200 Helligkeitsschritte um ein softes dimmen zu erreichen. Um Netzsynchron zu arbeiten laufen die PWM mit 100 Hz. Bisher hat da noch keiner ein Flackern bemerkt. Wenn ich an die alten Röhrenmonitore denke, reichte mir eine Bildwiederholfrequenz von 72Hz völlig aus – probiere es einfach aus. Vielleicht hilft Dir die Exceltabelle Deine Dimm Kurve zu finden. Gruß Carsten
Brat W. schrieb: > Hier im Forum schrieb jmd, dass die Augen das Licht logarithmisch > wahrnehmen. > > Ich würde also anstatt linear, lieber quadratisch in einer Zählschleife > hochdimmen, hab aber seither noch keinen richtig eleganten Weg gefunden, > das zu tun. artikel LED fading mit Berechnung https://www.mikrocontroller.net/articles/LED-Fading
Moin Carsten-Peter, ideal, das ist schonmal sehr gut! Ich kann zwar nur von 0-255 dimmen, aber mit der von Joachim B. verlinkten Seite komme ich ja an die Abstufungen, die für 8Bit gemacht sind. Ich denke 32-stufig sollte das dennoch funktionieren. Ja, meine 180Hz PWM sind auch wahrlich genug (hätte ich nicht so smooth erwartet). Dass aber 100Hz auch noch gut laufen, hätte ich weniger erwartet. Trotzdem schön wenns funktioniert 😉 Besten Dank für Eure Hilfe!
Das schöne am Array ist, dass man die Abstufungen so gestalten kann wie man will. Es muss nicht zwingend linear, logarithmisch oder nach sonst einer Formel sein.
Statt dem durchgehenden Array kann man auch die gewünschte Kurve stückweise approximieren und nur Stützstellen speichern. Ob sich das lohnt hängt natürlich davon ab, wieviel Array man einsparen kann, und ob die nötigen Mulitplikations/Divisionsroutinen sowieso schon im Projekt verwendet werden oder nicht. Quick&Dirty für 8Bit -> 8Bit:
1 | prog_uint8_t red_calibration[]= { |
2 | 0,0, |
3 | 50,10, |
4 | 100,30, |
5 | 150,80, |
6 | 200,140, |
7 | 0xFF,0xFF |
8 | };
|
9 | prog_uint8_t green_calibration[]= { |
10 | 0,0, |
11 | ...
|
12 | 0xFF,0xFF |
13 | };
|
14 | prog_uint8_t blue_calibration[]= { |
15 | 0,0, |
16 | ...
|
17 | 0xFF,0xFF |
18 | };
|
19 | |
20 | |
21 | uint8_t get_calibration(prog_uint8_t data[], uint8_t value) { |
22 | uint8_t low_pos; |
23 | uint8_t low_val; |
24 | uint8_t high_pos; |
25 | uint8_t high_val; |
26 | while (pgm_read_byte(&data[2])<value) { |
27 | data+=2; |
28 | }
|
29 | low_pos=pgm_read_byte(&data[0]); |
30 | low_val=pgm_read_byte(&data[1]); |
31 | high_pos=pgm_read_byte(&data[2]); |
32 | high_val=pgm_read_byte(&data[3]); |
33 | high_val-=low_val; |
34 | high_pos-=low_pos; |
35 | value-=low_pos; |
36 | return low_val+value*high_val/high_pos; |
37 | }
|
Ja, ein pgm_read_byte könnte man wegsparen (Lohnt das? wird doch zu einem simplen LPM?), und ich hoffe mal dass da kein out-of-bound read drinnen ist.
Hallo zusammen, hatte gerade die Gelegenheit die Sache direkt zu testen. Es funktioniert wie vorgestellt ;-) Für meine 8-Bit-Auflösung habe ich das folgende Array eingebaut: const uint16_t data[]= { 0, 1, 2, 2, 2, 3, 3, 4, 5, 6, 7, 8, 10, 11, 13, 16, 19, 23, 27, 32, 38, 45, 54, 64, 76, 91, 108, 128, 152, 181, 215, 255 }; Zwischen den 32 Dimmschritten liegen jeweils 12ms, im Hoch- sowie im Runterlauf. Der Effekt, dass die LEDs nun "gleichmäßiger" für´s Auge dimmen ist sehr deutlich vernehmbar und rundet die Sache ideal ab. Besten Dank für Eure Unterstützung, hätte da wahrscheinlich noch ne Weile rumgemacht :D LG Bratwurst
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.