Grüße, ich habe ein sehr kurioses Problem. Folgender Aufbau: Meanwell 5V 12A Netzteil das WS2812b und später auch den Microcontroller speisen soll. ESP32 (Wemos Lite) und Arduino Uno als "Testgeräte". Später soll der ESP32 die Stripes steuern. Als WS2812b habe ich einmal feste 8er-Stripes 5050er zum Testen am Breadboard, ein Nachbau dieser: https://www.adafruit.com/product/1426 und auf der anderen Seite einzelne Stücke (12 - 50 Stück) mit 60 pro Meter als Stripes (die ich verbauen möchte). Als Vorwiderstand dient erstmal ein 330ohm. Ground ist überall verbunden. Libary ist die FastLED Libary, komplett auf ESP umgestellt incl Core 0-Ansteuerung und mit 20-120 Frames Per Second. Zu meinen 2812ern: Die 8er Stücke: Beide Controller steuern diese an. Der Arduino absolut problemlos, der ESP hat schon mal ne falsche Farbe dabei, vor allem wenn ich nur r1g1b1 sende, ansonsten aber alles gut. Gehe ich mit dem Vorwiderstand auf 220ohm runter ist auch beim ESP alles gut. Nun zu den Stripes: der Arduino steuert auch diese problemlos an, beim ESP flackert nicht einmal die erste LED auch nur ansatzweise. 220ohm, 330ohm, völlig egal. Erster Gedanke: LEDs haben internen Vorwiderstand, ESP hat nur 3,3V am Pin. Einen Bi-Directional Level Shifter (https://www.sparkfun.com/products/12009 Nachbau) dazu. Netzteil-5V an HV, ESP-3,3V an LV, common ground. Ausgangspin vom ESP (hab 12 und 13 getestet) über den Level-Converter, dann über den 330er Widerstand an die Stripe. Erstmal will der ESP so gar nicht booten. Pinout runter, booten lassen, dann das exakt gleiches Ergebnis: 220ohm feste 8er-Chips alles gut, 330ohm mit Fehlanzeigen. Stripe immer noch komplett tot, hab einen Sketch der die Stripe alle 500ms ein- und ausschaltet - da tut sich nix. Hab auch nen anderen Shifter probiert, immer das gleiche. Spannung kann ich am Ende der Stripe messen (stabile 4,78V), der Arduino lässt sie auch in allen Farben leuchten, Einspeisung ist keine 5cm lang. Hab auch mehrere andere Stücke der Stripe getestet, der ESP bekommt keine auch nur dazu mal zu blinzeln.. Leider besitze ich kein Oszilloskop um den Ausgang mal zu messen, nur ein normales Multimeter. Nächster Versuch war dann eine einzelne LED mit 3,3V Spannung zu betrieben, damit diese das Data-Signal ein wenig anhebt. Die LED mit 3,3V funktioniert (wobei r255g255b255 hier wie erwartet ein tiefes rot ergeben), der Data Out kann aber auch hier nicht die längere Stripe zum leuchten bringen. Einzig: Bringe ich die Spannung an der Stripe auf ~2,5V runter bekomm ich sie dann endlich "nativ" angesteuert - natürlich in orange und, was mich stutzig macht, dann flackert sie ordentlich. Eine andere Möglichkeit das Signal hochzupegeln wüsste ich jetzt nicht (hab noch LM2596, Transistoren und Optokoppler hier rumfliegen, aber die sind laut allem was ich gelesen hab alle zu langsam für die Stripes). Ich bin jetzt leider auch nicht der Crack was die Feinelektronik betrifft, hab mich mal ordentlich quergelesen aber das war es auch schon. An sich sollte das aber doch mit dem Level Shifter problemlos klappen.? Vor allem das ich die einen (8er-)2812b absolut problemlos ansteuern kann und die anderen überhaupt nicht macht mich echt stutzig, die sollten doch eigentlich alle die gleichen Spannungen für high und low nehmen wenn sie beide die gleiche Betriebsspannung haben? Aso, den ESP als auch das Netzteil hab ich auch mal auf Verdacht getauscht, beide das gleiche Ergebnis. ESP an gleichem oder anderem Netzteil hat auch keinen Unterschied gemacht. Mittlerweile bin ich mit meinem Latein am Ende..
Hallo, du kannst ja den langen Streifen an den 8'er hinten dran hängen, da hast du den Pegel schon mal auf 5V angepasst. Aber wahrscheinlich ist das Timing des ESP für die Sorte LEDs gerade außerhalb des Bereichs was die noch so abkönnen. Sascha
Also ich steuere meine WS2812b ohne Probleme mit einem STM32, ebenfalls 3,3V (allerdings ohne Vorwiderstand, sollte ja nicht nötig sein), daran sollte es nicht liegen. Hast du einen Logic-analyser oder Oszilloskop? Wenn ja dann miss mal die Datenleitung und schau ob die Frequenz der Pulse stimmt (sollte ~800kHz haben und möglichst konstant sein) und das on/off Verhältnis bei 0 sollte ca 1/3, bei 1 ca 2/3 sein.
Alex D. schrieb: > Also ich steuere meine WS2812b ohne Probleme mit einem STM32, ebenfalls > 3,3V (allerdings ohne Vorwiderstand, sollte ja nicht nötig sein) Aber ist der Widerstand nicht für die ggf auftretenden Spikes, und sollte in keiner Schaltung weggelassen werden? Wenn ich im Netz 8266er-Schaltungen sehe (der nutzt ja auch 3,3V) hat jeder den Widerstand drinnen.. Oszilloskop oder so was hab ich leider gar nichts, nur nen normales Multimeter.. @Sascha aber sollte der Logic Level Converter nicht eh schon mein Signal auf 5V-Niveau erhöhen?
Hallo, Hans M. schrieb: > Aber ist der Widerstand nicht für die ggf auftretenden Spikes, und > sollte in keiner Schaltung weggelassen werden? der Widerstand hat erstmal den Zweck, die erste WS2812 zu schützen. Wenn am Stripe keine Betriebsspannung anlegt und das Steuersignal an Din anliegt, können interne Schutzdioden oder sonstige Halbleiterstrukturen leitend werden und versuchen, den Stripe aus diese Spannung zu versorgen. Dafür hat die erste LED meist kein Verständnis. Schon wenn die LEDs und die Ansteuerung aus eigenen Netzteilen versorgt werden, kann man diesen Zustand schon beim Einschalten haben. Gruß aus Berlin Michael
Hans M. schrieb: > Der Arduino absolut problemlos, der > ESP hat schon mal ne falsche Farbe dabei Du hast wahrscheinlich das berühmte Timing Problem. Bei den ESP Chips ist es unmöglich, exakte Timings zu erzeugen, weil dein Programm in unregelmäßigen Zeitabständen für unregelmäßige Zeit durch die Basis Firmware unterbrochen wird. Es soll angeblich helfen, das eigene Programm auf einem dedizierten CPU Kern laufen zu lassen, während der WLAN Kram auf dem anderen Kern läuft. > Leider besitze ich kein Oszilloskop um den Ausgang mal zu messen, > nur ein normales Multimeter. Ein Logic Analyzer wäre hier wahrscheinlich hilfreicher, auf jeden Fall billiger (ca. 10€).
Hallo, auf dem ESP8266 nehm ich zur Ansteuerung die UART-Schnittstelle. Baud: 7200000 Mode: SERIAL_7N1 Pin invertieren mit U0C0 |= (uint32_t)(1<<UCTXI) zur Ankopplung der WS2812 einen 4.7k Widerstand von der 1.LED nach +5V, und den Ausgang des ESP mit einer 1N4148 an die LED. Stromversorgung sollte natürlich verbunden sein. Ausgabe für ein 1-Bit 0x60 und für ein 0-Bit 0x7C Da die Ausgabe damit per UART-Hardware läuft und gepuffert ist läuft das ohne Probleme. Sascha
Sascha W. schrieb: > Auf dem ESP8266 nehm ich zur Ansteuerung die UART-Schnittstelle. > Da die Ausgabe damit per UART-Hardware läuft und gepuffert ist läuft das > ohne Probleme. Sehr gute Idee.
Hallo, Du kannst ja mal mit der NeoPixelBus Lib testen: https://github.com/Makuna/NeoPixelBus Er hat den ESP32 inzwischen mit drin und nutzt wie beim ESP8266 I2S-DMA für die Ausgabe. Das hat sich zumindest auf dem ESP8266 durch nichts aus der Ruhe bringen lassen. UART hat er auf dem ESP8266 auch als Alternative drin, das lies sich bei größeren LED-Anzahlen aber durch WLAN durchaus stören. Gruß aus Berlin Michael
ich bin auch gerade dabei mit einem ESP32 256 WS2812 in einer Matrix anzusteuern, kein Problem für die Ansteuerung, helfen tut ein BS170 und 1 R 1k auf der 5V Seite, den auf der ESP Portseite habe ich "eingespart" der Port ist entweder aktiv low oder aktiv high. Beitrag "Re: Pegelwandler 5V->3V" Mir fehlt nur noch die SW für 2 16x8 Matrixen, 1 läuft, 2 laufen aber nicht mit LEDText und LEDMatrix die Github Beispiele verstehe ich nicht, wenn einer ein Idee hat? Matrix 1 zig_zag
1 | ----------------
|
2 | |
|
3 | ----------------
|
4 | |
|
5 | ----------------
|
6 | |
|
7 | ----------------
|
8 | |
|
9 | ----------------
|
10 | |
|
11 | ----------------
|
12 | |
|
13 | ----------------
|
14 | |
|
15 | ----------------
|
Matrix 2 zig_zag hinter Matrix 1 auf der linken Seite
1 | ----------------
|
2 | |
|
3 | ----------------
|
4 | |
|
5 | ----------------
|
6 | |
|
7 | ----------------
|
8 | |
|
9 | ----------------
|
10 | |
|
11 | ----------------
|
12 | |
|
13 | ----------------
|
14 | |
|
15 | ----------------
|
ich schaffe die Init 2er nicht Die Matixen laufen nur nicht die Laufschrift über Beide.
Stefanus F. schrieb: > Hans M. schrieb: >> Der Arduino absolut problemlos, der >> ESP hat schon mal ne falsche Farbe dabei > > Du hast wahrscheinlich das berühmte Timing Problem. Bei den ESP Chips > ist es unmöglich, exakte Timings zu erzeugen, weil dein Programm in > unregelmäßigen Zeitabständen für unregelmäßige Zeit durch die Basis > Firmware unterbrochen wird. > > Es soll angeblich helfen, das eigene Programm auf einem dedizierten CPU > Kern laufen zu lassen, während der WLAN Kram auf dem anderen Kern läuft. > >> Leider besitze ich kein Oszilloskop um den Ausgang mal zu messen, >> nur ein normales Multimeter. > > Ein Logic Analyzer wäre hier wahrscheinlich hilfreicher, auf jeden Fall > billiger (ca. 10€). Die Timings hab ich ausgeschlossen, WLan rennt auf Core 1, die LED-Sachen auf Core 0, auch parallel kein Problem. Wenn ich die 2x8er Reihen mit 220 Ohm ansteuere habe ich auch absolut keine Farbprobleme oder so. Da lasse ich die LEDs einzeln in verschiedenen Tasks rauf und runter dimmen, Farbe ändern usw, stundenlang ohne den kleinsten Fehler.. daher gehe ich klar davon aus, das es die Stripe sein muss. Sascha W. schrieb: > auf dem ESP8266 nehm ich zur Ansteuerung die UART-Schnittstelle. An sich eine sehr coole Idee, leider hab ich bis zu 5 Ausgänge am ESP die später zu verschiedenen Ketten führen. Das über mehrere Ausgänge rennen zu lassen war überhaupt der Grund vom Arduino zu wechseln :D Michael U. schrieb: > Du kannst ja mal mit der NeoPixelBus Lib testen: > https://github.com/Makuna/NeoPixelBus Danke für den Link, wenn es sich gar nicht ordentlich fängt auf jeden fall ne Idee wert. Allerdings hab ich jetzt 3 Wochen dran geschrieben über die FastLED schöne Abläufe zu haben - sollte das rennen müsste ich nochmal große Teile neu programmiern -.- Joachim B. schrieb: > ich bin auch gerade dabei mit einem ESP32 256 WS2812 in einer Matrix > anzusteuern, kein Problem für die Ansteuerung, helfen tut ein BS170 und > 1 R 1k auf der 5V Seite, den auf der ESP Portseite habe ich "eingespart" > der Port ist entweder aktiv low oder aktiv high. > Beitrag "Re: Pegelwandler 5V->3V" > > Mir fehlt nur noch die SW für 2 16x8 Matrixen, 1 läuft, 2 laufen aber > nicht mit LEDText und LEDMatrix die Github Beispiele verstehe ich nicht, > wenn einer ein Idee hat? Hab einige Transistoren hier, aber natürlich keinen so schnellen -.- Mittlerweile scheint mir, das mein Logic Level Converter einfach zu langsam ist (obwohl oft empfohlen). Direkt nen paar "74HC14" aus China in den Warenkorb geworfen, die sollen bei einigen Verbesserungen bringen.. Derweil hab ich zumindest mal ne Farbe aus der LED-Stripe bekommen, allerdings völlig instabil. Hab eine einzelne LED genommen, und die Spannung für die separiert über ne Diode laufen, so das gut 0,5V an V-In abfallen. Den Data Out jetzt in die Stripe, und es kommt zumindest was an. Wollte jetzt noch mal einige ZenerDioden testen ob ich mit einer bessere Ergebnisse erziele.. Nen Logic Analyzer werd ich mir aus nem Arduino basteln, da gibt es auch feine fertige Sketche - mal schauen was da so bei rauskommt. Da ich aber wie gesagt andere Stripes gut rennen hab rechne ich eher mit Spannungspegel- als Timingproblemen.. Zu deinem Problem mit der zweiten Stripe am ESP32: neueste FastLed-Libary, da den DemoReelESP32-Sketch mal anschauen. Im Endeffekt setzt du oben noch
1 | #define FRAMES_PER_SECOND 120
|
2 | |
3 | // -- The core to run FastLED.show()
|
4 | #define FASTLED_SHOW_CORE 0
|
5 | |
6 | // -- Task handles for use in the notifications
|
7 | static TaskHandle_t FastLEDshowTaskHandle = 0; |
8 | static TaskHandle_t userTaskHandle = 0; |
nach dem include ein, und kopiert die kompletten Funktionen "void FastLEDshowESP32()" und "void FastLEDshowTask(void *pvParameters)" rüber. Ausserdem im Setup
1 | // -- Create the FastLED show task
|
2 | xTaskCreatePinnedToCore(FastLEDshowTask, "FastLEDshowTask", 2048, NULL, 2, &FastLEDshowTaskHandle, FASTLED_SHOW_CORE); |
und, ganz wichtig, statt "FastLED.show" nimmst du nun immer "FastLEDshowESP32();" (sprich die Funktion die du oben einkopiert hast). Damit sollte jeder FastLED-Task auf deinem "Anwendungenkern" rennen, und der ESP keinen Reboot beim Aufruf der Show-Funktion hinlegen ;)
du könntest auch mit nichtinvertierenden Buffern an 5V arbeiten 74HCT125 o.ä. weil die HCT an 5V high ab 2V typisch erkennen. Hans M. schrieb: > Zu deinem Problem mit der zweiten Stripe am ESP32: neueste > FastLed-Libary, da den DemoReelESP32-Sketch mal anschauen. Im Endeffekt > setzt du oben noch LINK? das erkläre bitte noch mal genauer, alle Erklärungen bis jetzt habe ich nicht verstanden oder sie waren ungenügend. bis jetzt ist der Init FastLED.addLeds<CHIPSET, LED_PIN, COLOR_ORDER>(leds[0], leds.Size()); OK LEDText Probleme konnte ich mit Hilfe des Autors AaronLiddiment klären aber weiter? mit der Adafruit NEO Pixel Lib gibt es Stress, flackert unsauber und // Parameter 4 = matrix layout flags, add together as needed: // NEO_MATRIX_TOP, NEO_MATRIX_BOTTOM, NEO_MATRIX_LEFT, NEO_MATRIX_RIGHT: // Position of the FIRST LED in the matrix; pick two, e.g. // NEO_MATRIX_TOP + NEO_MATRIX_LEFT for the top-left corner. // NEO_MATRIX_ROWS, NEO_MATRIX_COLUMNS: LEDs are arranged in horizontal // rows or in vertical columns, respectively; pick one or the other. // NEO_MATRIX_PROGRESSIVE, NEO_MATRIX_ZIGZAG: all rows/columns proceed // in the same order, or alternate lines reverse direction; pick one. // See example below for these values in action. ist auch keine Erklärung was meinen die mit TOP BOTTON, LED0 bis LED ende? Wo sind Beispiele Ich versuchte auch in FASTLED LEDMatrix aber 2 die hintereinander liegen schaffte ich nicht Es wird immer nur eine 16x8 benutzt ich versuchte #define MATRIX_WIDTH 32 // Set this negative if physical led 0 is opposite to where you want logical 0 #define MATRIX_HEIGHT 8 und #define MATRIX_WIDTH 16 // Set this negative if physical led 0 is opposite to where you want logical 0 #define MATRIX_HEIGHT 16 aber beide nutzten nur eine Matrix Das Layout der Matrix ist zig_zag 16x8 mit LED0 oben links und LED127 unten links und beide hintereinander funktionieren wenn ich von LED0 bis LED 255 einzeln durchtackere.
:
Bearbeitet durch User
Sorry, ich hätte ein wenig weiter ausholen sollen, war schon zwei Gedanken weiter^^: hab mich da auch grad nur fix quergelesen, selbst noch kein 2d-Textarray angesteuert. Soweit ich das verstehe kannst du jeden Text nur auf einem Ausgang sauber laufen lassen. Sprich du musst einen zweiten Ausgang nehmen, und da auch über nen BS170 und 330Ohmer die Stripe dran klemmen, so das du beide Ausgänge problemlos separat ansteuern kannst. So wie du es jetzt hast ist es ja ein Textarray das du aus beiden machen könntest, für verschiedene Texte brauchst du also entsprechend zwei davon. Das ist soweit ja eionfach: du initialisierst dir zwei LED Stripes statt einer (gibst deinem 2ten Array nen anderen Namen, definierst Pinout und LED-Anzahl). Diese sprichst du dann auch entsprechend an. Also bspw
1 | #define NUM_LEDS_S1 30
|
2 | #define NUM_LEDS_S2 45
|
3 | |
4 | #define DATA_PIN_S1 12
|
5 | #define DATA_PIN_S2 13
|
6 | |
7 | CRGB ledsS1[NUM_LEDS_S1]; |
8 | CRGB ledsS2[NUM_LEDS_S2]; |
9 | |
10 | FastLED.addLeds<WS2812B, DATA_PIN_S1, GRB>(ledsS1, 0, NUM_LEDS_S1).setCorrection(TypicalLEDStrip); |
11 | |
12 | FastLED.addLeds<WS2812B, DATA_PIN_S2, GRB>(ledsS2, 0, NUM_LEDS_S2).setCorrection(TypicalLEDStrip); |
und ledsS1 und ledsS2 solltest du jetzt separat zu nem 2dimensionalen Array machen können und mit Text versehen können (wie gesagt, ab hier hab ich das selber noch nicht gemacht) Der ESP32 kann jetzt glücklicherweise auch beide parallel befeuern weil er für jeden nen eigenen Task startet. Allerdings wird er dir absaufen, wenn du jetzt nicht die o.G. Änderungen in deinen Sketch einfliessen lässt - die beispiele dazu (also der Parallelität am ESP32^^) findest du entweder in der bei dir in der Arduino IDE bzw im Visual Studion MicroBuild unter "Beispiele - FastLed- DemoReelESP32" - oder in der Libary auf GitHub: (https://github.com/FastLED/FastLED/tree/master/examples/DemoReelESP32)
:
Bearbeitet durch User
Hans M. schrieb: > Soweit ich das verstehe kannst du jeden Text nur auf einem Ausgang > sauber laufen lassen nein, ich muss 'nur' die Matrix umorganisieren für 2 Panels das läuft ja von 0-255 im single step nur kommt die Textdarstellung nicht zurecht, wenn ich aber meine Matrix umorganisiere mit einem swap vor FASTLED.show aus 0-127 und 128-255 aufteilen nach 0-15 auf Matrix 1 und 16-31 auf Matrix 2 für 8 Zeilen dann sollte es klappen nur war ich in Matrix Rechnung nicht gut
:
Bearbeitet durch User
Joachim B. schrieb: > nein, ich muss 'nur' die Matrix umorganisieren für 2 Panels > das läuft ja von 0-255 im single step nur kommt die Textdarstellung > nicht zurecht, wenn ich aber meine Matrix umorganisiere mit einem swap > vor FASTLED.show ich habs fertig, da der TO von fastLED Text noch nichts ergänzt hat habe ich die Matrix umorganisiert, vor fastLED.show "swappe" ich die 2 echten Matritzen zu einer Textmatrix bzw. umgekehrt, so kann der Text laufen als wenn die Matrix so wäre 8x32 und in real gebe ich die LEDs passend für zwei 8x16 zig_zag Matritzen hintereinander aus.
:
Bearbeitet durch User
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.