PL9823-F8 RGB LED lässt sich nicht ansteuern – Raspberry Pi Pico 2 (RP2350)

  • Hallo zusammen,

    ich versuche seit einiger Zeit PL9823-F8 8mm RGB LEDs (gekauft bei Berrybase) mit meinem Raspberry Pi Pico 2 (RP2350) anzusteuern, komme aber einfach nicht weiter.

    Mein Aufbau (ohne Level Shifter):


    Code
    Pico Pin 40 (VBUS, 5V)  →  LED Pin 2 (VDD, 15mm)
    Pico Pin 38 (GND)       →  LED Pin 3 (GND, längster Pin, 17mm)
    Pico Pin 20 (GP15)      →  LED Pin 1 (DIN, kürzester Pin, 13,5mm)
    LED Pin 4 (DO)          →  nicht angeschlossen

    Pinbelegung der LED (flache Seite rechts, von links nach rechts):

    • Pin 1 = DIN (kürzester Pin, 13,5mm)
    • Pin 2 = VDD (15mm)
    • Pin 3 = GND (längster Pin, 17mm)
    • Pin 4 = DO (15mm)

    Was ich bereits probiert habe:

    • Mit und ohne SN74AHCT125N Level Shifter
    • MicroPython neopixel Modul mit timing=1
    • Eigenen PIO Code mit angepasstem Timing
    • Bit-Banging direkt über GPIO
    • Verschiedene GPIO Pins
    • Mehrere LEDs (5 Stück getestet, alle gleiches Verhalten)
    • MicroPython v1.28.0 (aktuellste Version)

    Das Verhalten:

    Die LED leuchtet dauerhaft weiß sobald VDD, GND und DIN angeschlossen sind – das typische Verhalten wenn kein gültiges Datensignal ankommt. Der Code läuft korrekt auf dem Pico (print-Ausgaben erscheinen normal in der Konsole), aber die LED reagiert auf keinerlei Farbänderungen.

    Früher gab es beim Einstecken kurz ein blaues Aufleuchten, was zeigt dass die LEDs grundsätzlich funktionieren.

    Meine Vermutung:

    Möglicherweise hat der RP2350 (Pico 2) ein Timing-Problem mit diesen LEDs unter MicroPython, oder die bei Berrybase gelieferten PL9823 haben andere Timing-Anforderungen als im Datenblatt angegeben.

    Hat jemand diese LEDs erfolgreich mit einem Pico 2 betrieben? Oder weiß jemand ob es bekannte Kompatibilitätsprobleme zwischen RP2350 und PL9823 gibt?

    Danke schon mal!

  • PL9823-F8 RGB LED lässt sich nicht ansteuern – Raspberry Pi Pico 2 (RP2350)? Schau mal ob du hier fündig wirst!

  • Moin Knig_der_Katze,

    erstmal: Herzlich Willkommen im Forum!

    Anhand der fehlenden Beiträge hat, anscheinend, es noch niemand probiert.
    Die paar Informationen die meine kurze Suche ergab:

    - Die Led sollte in Ruhe blau leuchten. Die Betreibsspannung ist 4,5V- 6V. Ein Pico hat aber nur 3,3V an den GPIO's.
    - Die gefundene Beispiele haben immer die Bibliothek "FastLed" unter Arduino genutzt.
    - Ein Aufruf für "neo-pixel: Adafruit_NeoPixel strip ( LED_COUNT , LED_PIN , NEO_RGB + NEO_KHZ800 ) ;

    Dies sind nur einige Hinweise...

    73 de Bernd

    Ich habe KEINE Ahnung und davon GANZ VIEL!!
    Bei einer Lösung freue ich mich über ein ":thumbup:"
    Vielleicht trifft man sich in der RPi-Plauderecke.
    Linux ist zum Lernen da, je mehr man lernt um so besser versteht man es.

    Edited 2 times, last by Bernd666: Mir ist noch was eingefallen (May 27, 2026 at 6:43 PM).

  • Moin Knig_der_Katze,

    kannst du denn irgendwann mal schreiben, wie das Ergebnis nun aussieht? Und ansonsten, bitte, das Thema als erledigt markieren. Das geht oben bei "Thema bearbeiten". Danke!

    73 de Bernd

    Ich habe KEINE Ahnung und davon GANZ VIEL!!
    Bei einer Lösung freue ich mich über ein ":thumbup:"
    Vielleicht trifft man sich in der RPi-Plauderecke.
    Linux ist zum Lernen da, je mehr man lernt um so besser versteht man es.

  • - Die gefundene Beispiele haben immer die Bibliothek "FastLed" unter Arduino genutzt.
    - Ein Aufruf für "neo-pixel: Adafruit_NeoPixel strip ( LED_COUNT , LED_PIN , NEO_RGB + NEO_KHZ800 ) ;

    Nur mal zur Erklärung der genannten Bibliotheken !
    FastLED und Adafruit_Neopixel sind vom Grund auf zwei komplett verschiedenen Bibliotheken.
    Hinzu kommt , wenn man diesen RP2350 mit oder über die "Arduino IDE" proggen will, muss man auf die PICO-SDK setzen. Damit funktioniert die Initiierung der GPIOs nicht mehr über den Befehl

    #define Output_Pin

    void setup() {
    pinMode(Output_Pin, OUTPUT);
    }

    sondern muss die SDK Befehl zwingend nutzen. Wenn man dann versucht NEOPIXEL von Adaruit zu verwenden, welcher im Hintergrund "wire.h" aus der Arduino Hardware Bibliothek versucht zu laden, wird man dann eine Compiler-Meldung erhalten, die auf diese Hardware-Abweichung hinweist.
    Ja - es kann funktionieren, wenn das Timing exakt eingehalten wird, ansonsten bekommt man nur Müll oder fehlerhafte Farbinterpretationen angezeigt. Deswegen, bei einem Projekt was in der Anfangsphase steckt und noch nicht die gesamte externe Hardware implementiert ist, ist das der falsche Weg. Schon eine Zusatzkomponente wie eine I2C Komponente oder eine ISR Trigger kann dazu führen das der ursprünglich Code, wo nur diese NeoPixel Bibliothek noch das gewünschte Ergebnis lieferte dann nur noch Unsinn macht.
    Selber kämpfe ich gerade mit einem ähnlichen Problem, auch mit der Adafruit NeoPixel_Matrix Bibliothek auf einem Waveshare Pico Zero mit dem selben RP2350 Prozessor.

    Admin wie kann man hier mehrere Codezeilen in dieser immer gewünschten Codeblock Ansicht einfügen ? Ich bin offensichtlich zu blöd dazu . Entweder werden solche Zeilenfelder wie beim Vorredner generiert, oder alles der gesamte Messages text wandert in diesen Sonderdarstellungsformat ...
    Mach nicht so wirklich Sinn, wenn man in einer Antwort mehrere getrennte Codeblöcke einfügen will.

  • Admin wie kann man hier mehrere Codezeilen in dieser immer gewünschten Codeblock Ansicht einfügen ? Ich bin offensichtlich zu blöd dazu . Entweder werden solche Zeilenfelder wie beim Vorredner generiert, oder alles der gesamte Messages text wandert in diesen Sonderdarstellungsformat ...
    Mach nicht so wirklich Sinn, wenn man in einer Antwort mehrere getrennte Codeblöcke einfügen will.

    Zuerst mit Eingabetaste in einen neuen Absatz/Zeile. Dann klickt oder tippt man auf "Codeblock einfügen" und nicht auf das "Code" (Symbol <>) direkt rechts daneben. Dann fügt man die mehreren Zeilen Code ein. Um den Codeblock wieder zu verlassen und normalen Text zu schreiben geht man ganz an das Ende des eingefügten Bereichs (mit Maus oder Pfeiltasten) und drückt mehrfach die Eingabetaste. Bis man den Block verlassen hat. Experimentieren im Testforum.

    Sonntag morgen um viertel vor acht
    geht das Radio an mitten in der Nacht
    Das ist jetzt mindestens schon fünfmal passiert
    Ich habe den Schweinehund falsch programmiert, falsch programmiert, falsch programmiert

  • Moin WolleWillWhisky,

    danke für deinen Beitrag. Ja, ich gebe zu, so wie es in meinen Beitrag #2 steht, kann man schon verwirrt sein. SRI , dafür

    FastLED und Adafruit_Neopixel sind vom Grund auf zwei komplett verschiedenen Bibliotheken.

    Stimmt! Das sagen ja auch schon die Namen...

    Wenn man dann versucht NEOPIXEL von Adaruit zu verwenden, welcher im Hintergrund "wire.h" aus der Arduino Hardware Bibliothek versucht zu laden, wird man dann eine Compiler-Meldung erhalten, die auf diese Hardware-Abweichung hinweist.

    Ich habe weder in NeoPixel von Adafruit noch in FastLed einen Hinweis gefunden, der auf wire.h hinweisst. Wenn du da was findest, bitte zeigen.

    Hinzu kommt , wenn man diesen RP2350 mit oder über die "Arduino IDE" proggen will, muss man auf die PICO-SDK setzen. Damit funktioniert die Initiierung der GPIOs nicht mehr über den Befehl

    #define Output_Pin

    void setup() {
    pinMode(Output_Pin, OUTPUT);
    }

    sondern muss die SDK Befehl zwingend nutzen.

    Das sind, für mich, ganz neue Erkenntnisse. Ich habe im Internet, keinen Hinweis gefunden, wie man die Raspberry Pi Pico C-SDK, in die Arduino Ide einbindet.
    Aber du hast sicherlich auch dafür einen Hinweis...
    Weil, alle Welt nutzt, mit der Arduino Ide, die Bibliothek "arduino-pico" von earlephilhower. Da kann man auch die üblichen Sachen für die GPIO nehmen. Ja, im Grunde hast du recht, irgendwo ist da die Raspberry Pi Pico C-SDK eingebunden.

    73 de Bernd

    Ich habe KEINE Ahnung und davon GANZ VIEL!!
    Bei einer Lösung freue ich mich über ein ":thumbup:"
    Vielleicht trifft man sich in der RPi-Plauderecke.
    Linux ist zum Lernen da, je mehr man lernt um so besser versteht man es.

  • Hallo zusammen,

    entschuldigt bitte die späte Rückmeldung, ich war im Urlaub und konnte das Thema leider nicht früher abschließen.

    Vielen Dank für die hilfreichen Hinweise!

    Hier kurz wie ich es letztendlich gelöst habe:

    Das Problem war, dass die normale MicroPython neopixel-Bibliothek mit dem RP2350 (Raspberry Pi Pico 2) kein zuverlässiges Timing für die PL9823-F8 LEDs erzeugt. Ich habe MicroPython verwendet und das Problem durch direkten Zugriff auf den PIO des RP2350 gelöst, womit sich das exakte Timing selbst definieren lässt ohne auf externe Bibliotheken angewiesen zu sein.

    Außerdem war ein 74AHCT125 Level Shifter nötig, da das 3,3V Datensignal des Pico für die PL9823 zu schwach war.

    Ich bin noch sehr neu in der Thematik und kenne mich kaum aus, weshalb ich zur Lösung auch KI genutzt habe, daher auch die Verwendung von PIO wovon ich selbst noch nicht viel verstehe.

    Danke nochmals an alle!

  • Das sind, für mich, ganz neue Erkenntnisse. Ich habe im Internet, keinen Hinweis gefunden, wie man die Raspberry Pi Pico C-SDK, in die Arduino Ide einbindet.
    Aber du hast sicherlich auch dafür einen Hinweis...

    Sicherlich kann ich dir den Weg aufzeigen.
    Nachdem du über die Config selber den Github-Link hinzugefügt hast, kannst du das vollständieg Paket inkl aller SDK Erweiterungen über die Boardverwaltung / -auswahl nachinstallieren.
    Dann kannst du, nach dem du das Board oder default den Core-Type RP2040 oder RP2350 ausgewählt hast, und er Bescheibung / Parameter zum Board selber auswählen, ob du mit der PICO SDK arbeiten willst, oder bei der klassischen Arduino Schreibweise, bzw Befehlssatz bleiben möchtest. Theoretisch ist auch eine Vermischung beider Schreibweisen möglich. Diesen Zustand würde ich jedoch als BETA bezeichnen. Besonders so mein bisherige Feststellung wenn man mit der SDK den ADC Convert Flag als ISR verwendet, dann aber anderes I/O Handling im Arduino Code "digitalRead()" , "digitalWrite()" o.ä. auch in der Erweiterungen mit den Bus-Hosts verwendet kommt dann meist nur funktionaler Unsinn heraus, obwohl der Code weder eine Compilerwarnung, noch einen -fehler erzeugt.
    Wenn dann noch eine schon implementierte PICO Boards nicht sauber als Boardparameter beschrieben wurden kann es durchaus auch mal passieren besonderns beim RP2350, das eine farblich nicht hervorgehobene Compilermeldung erscheint, dass das Programm für einen 2040 compiliert wird. Danach muss man dann sehr genau suchen und sich auch alle Compilermeldungen vollständig ausgeben lassen. Hier sind die Waveshare Abkömmlinge des PICOs ein der grausiges Beispiel.

    Zu dem Verweis auf "Wire.h" das passiert auch nicht in allen Fällen, jedoch wenn man eine "#include <Hardware/<irgendwas> > schon im Code stehen hat. Das sind wieder sehr spezifische Abhängigkeiten und Interpretationvarianten /-verhalten, wo man sich dann fragt warum passiert das genau an dieser Stelle oder in / mit dieser Konfiguration.

  • Aber danke für deine Mühe mit dem NICHTS

    Dann klick mal hier auf Codeblock um das mit dem Einfügen zu lesen! Wenn der Code eingefügt ist, gehst Du einfach ans Ende des Codes, also in die letzte Zeile ans Zeilenende und drückst zwei oder drei mal die Enter-Taste und schon bist Du raus aus dem Codeblock und kannst normal weiter schreiben oder auch neuen weiteren Codeblock einfügen. Man kann auch mit der Maus darunter klicken, aber das ist manchmal, wegen wenig Platz nicht so einfach.

    Eine Raketenwissenschaft ist das jedenfalls nicht.

Participate now!

Don’t have an account yet? Register yourself now and be a part of our community!