Sketch reagiert nicht wie erwartet. Einfaches Fading einer RGB LED

  • Mahlzeit,

    ich habe ein einfaches Sketch für eine RGB LED geschrieben in dem eigentlich die Farben von Rot auf Blau, weiter auf Grün und dann wieder Rot... und halt immer die Runde, halt mit den Mischfarben.

    Die For-Schleife habe ich in einer Funktion, in der die eine Variable von 0 auf 255 und die andere halt entsprechend runter gezählt wird.

    Dann wird diese Funktion drei mal aufgerufen.

    Leider entspricht das Verhalten der LED gar nicht dem, was ich erwarten würde.

    Erst leuchtet sie einmal langsam Rot auf, geht ganz kurz aus, ist dann Blau und geht dann über Lila zu Rot und dann fängt der wechsel wieder an mit Blau, über Lila zu Rot und macht dies die ganze Zeit.

    Ich vermute ich habe einen schweren Gedankenfehler, aber ich komme nicht dahinter.

    Hier mal der ganze Code:

    Würde mich freuen, wenn mir da mal wer auf die Sprünge helfen kann.

  • Sketch reagiert nicht wie erwartet. Einfaches Fading einer RGB LED? Schau mal ob du hier fündig wirst!

  • Ich kenne zwar Deine LED nicht, könnte mir aber vorstellen, daß die Leuchtstärke nicht proportional zum Ausgangssignal ist. Will heißen, vielleicht fängt die LED überhaupt erst bei 200 an zu leuchten und bei 230 ist dann auch schon gefühlt Schluß mit der Helligkeitssteigerung. Dieses Verhalten kann dann bei den 3 Farben vielleicht auch noch unterschiedlich ausgeprägt sein?!

    Versuche doch mal, jeweils eine einzelne LED zu dimmen und schau Dir an, bei welchen Werten sich welche gefühlte Helligkeit einstellt. Alternativ könntest Du versuchen, die Helligkeit auch per PWM digital anzusteuern?! Nur so ein paar Ansätze...

  • schnasseldag

    In der ersten Übung mit der RGB LED habe ich sie im Grunde genau so angesprochen, nur halt für jede Farbe einzelne schleifen zum aufleuchten und abdunkeln. Nur wurde da halt erst Rot von 0 auf 255 geregelt, dann Blau von 0 auf 255, und dann Rot von 255 auf 0 und dann Grün etc... Jetzt wollte ich halt, dass wenn die eine Farbe heller wird, die andere abdunkeln und das ganze mit der Funktion kurz halten.

  • Servus Mario Be,

    bau mal ein paar Serial.print() als Debug Ausgaben ein. Dann kannst Du mal überprüfen, in welchem Bereich die einzelnen Farben sichtbar reagieren ... ich hab' da was in Erinnerung, dass es sich so verhält wie schnasseldag schon vermutet:

    ... könnte mir aber vorstellen, daß die Leuchtstärke nicht proportional zum Ausgangssignal ist. Will heißen, vielleicht fängt die LED überhaupt erst bei 200 an zu leuchten und bei 230 ist dann auch schon gefühlt Schluß mit der Helligkeitssteigerung. Dieses Verhalten kann dann bei den 3 Farben vielleicht auch noch unterschiedlich ausgeprägt sein?!

    cu,

    -ds-

  • Mahlzeit.

    Ich habe die Schaltung gerade neu aufgebaut. "Musste" Sie wieder abbauen, da ich mit den Lektionen weiter machen wollte, und die eigentliche Übung mit der LED geklappt hatte, nur mein eigens Sketch nicht. Hatte bis gestern nur ein Steckbrett. Dank fünf neuer kleiner Steckbretter kann ich solche Problemfälle jetzt aufgebaut lassen... tut aber nichts zur Sache.
    Auf jeden Fall funktioniert der Sketch jetzt.

    An der Aufbaute sollte es aber nicht gelegen haben, denn der Sketch aus der Übung macht im Grunde das selbe, nur ist der Code viel zu lang.

    Gnom

    Hier mal die einfache Schaltung http://macloud.selfhost.eu/nextcloud/inde…pY6ptPtteYxjLn3

    Wie man sieht kann man da im Grunde nicht viel falsch machen.

    dreamshader

    Wie schon geschrieben, in der eigentlich Übung hat die LED wie erwartet mit for-Schleifen von 0 bis 255 funktioniert.

    Hier mal der Code aus der Originalen Übung:

    Spoiler anzeigen

    Und hier mein eigener der nun funktioniert

    Spoiler anzeigen

    @flyppo

    Hab im anderen Forum schon was zu geschrieben. Recht haste. Doppelpostings/Crosspostings sind nicht angebracht. War selber mal wieder zu ungeduldig. Lag wohl mit daran, dass ich mir absolut nicht erklären konnte, wieso diese einfache Schaltung mit dem simplen Code nicht gehen sollte. Hat mir echt Kopfschmerzen gemacht.

    Sorry hierfür, kommt nicht wieder vor.

    Ich Danke auf jeden Fall allen, die versucht haben mir zu helfen.

    Gruß Mario

  • Und woran hats nun gelegen?

    Übrigens kann man da schon ne Menge falsch machen. Es ist wenig üblich, die LEDs direkt an die 3,3V-GPIO-Pins anzuschließen.

    Rot und grün bekommen da ungefähr 6-7 mA, blau nur 1-2 mA - also ist das schon mal mindestens recht ungleichmäßig.
    Außerdem: Ich persönlich bin da zwar nicht so zimperlich, aber allgemein gilt, dass die GPIOs nicht mit mehr als 2-3 mA belastet werden sollen. Wenn du noch ein paar mehr LEDs anschließt, überlastest du die Stromversorgung der GPIOs. Schließ die LEDs lieber über einen Transistor an.

    Oh, man kann hier unliebsame Nutzer blockieren. Wie praktisch!

  • Wie schon geschrieben, in der eigentlich Übung hat die LED wie erwartet mit for-Schleifen von 0 bis 255 funktioniert.

    Das mag sein, ist ja auch alles so weit ok ... aber: mach' mal den Test und probier mal aus, ab welchem Wert die jeweilige Farbe tatsächlich sichtbar leuchtet und welche sichtbaren Abstufungen Du mit Deiner Schleife erreichst ... lass' Dich einfach mal überraschen ...

    Z.B. in etwa so:

    cu,

    -ds-

  • ack ... das meinte ich u.a. mit meiner Anregung.

    Beispielcodes mögen ja, wie auch das mit dem PWM Signal, vom Ansatz her durchaus richtig sein. Aber PWM mit einer LED zu "visualisieren" ist dann doch eher suboptimal ("ich hab' doch analogWrite(pin,10) gemacht ... warum leuchtet jetzt die LED nicht?" ...).

    //EDIT: btw ... der Code oben ist nicht getestet sondern on-the-fly hier eingetippt. Kann also Fehler enthalten.

    cu,

    -ds-

  • dreamshader

    Ich hab den Code gerade mal schnell getestet.

    Ein Fehler war drin in Zeile 14 oben bei Dir, musste code: in Anführungszeichen setzen.

    Und ich bekomme keine Anzeige über Serial.print, aber das habe ich bisher noch nie probiert, bzw so weit war ich noch nicht. Hatte mal beim überfliegen was von wegen baut Rate gelesen. Keine Ahnung, aber die LED wird auf jeden Fall von Anfang an angesprochen. Hab es aber jetzt nicht ganz durchlaufen lassen, das Dauert dann ja auch einiges an Zeit.

    Ich schaue mal wie ich die Anzeige auf dem PC bekomme, denn wenn ich das richtig verstanden habe sollte ich ja eine Ausgabe ala "writing to LED on pin RED: 1" und fortlaufend bekommen.

  • ack ... das meinte ich u.a. mit meiner Anregung.

    dann hilft das:

    Spoiler anzeigen

    // für 15 Stufen

    #define MAX_LEDHELL 15

    #define MIN_LEDHELL 1

    uint8_t led_hell=1;

    const uint8_t pwmtable_16C[] PROGMEM = { 0, 2, 3, 4, 6, 8, 11, 16, 23, 32, 45, 64, 90, 128, 181, 255 };

    // Aufruf:

    FastLED.setBrightness(pgm_read_byte(&pwmtable_16C[led_hell]));

    oder eben dein Aufruf

    https://www.mikrocontroller.net/articles/LED-Fading

    hat auch Beispiele für mehr Stufen

    lasst die PIs & ESPs am Leben !
    Energiesparen:
    Das Gehirn kann in Standby gehen. Abschalten spart aber noch mehr Energie, was immer mehr nutzen. Dieter Nuhr
    (ich kann leider nicht schneller fahren, vor mir fährt ein GTi)

  • dreamshader Ich habe gestern noch mal etwas mit der LED rumgespielt, und wie ich schnasseldag schon sagte, sie reagiert von 1 bis 255.

    Allerdings hat jar mit seinem Wink Richtung Wahrnehmung recht. Erst sieht man deutlich, Stufe für Stufe den Unterschied. Später im Grunde gar nicht. Sprich, will man für das menschliche Auge ein gleichmäßiges Fading, so müsste man logarithmisch die Helligkeit steigern.

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!