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
staticTaskHandle_tFastLEDshowTaskHandle=0;
8
staticTaskHandle_tuserTaskHandle=0;
nach dem include ein, und kopiert die kompletten Funktionen "void
FastLEDshowESP32()" und "void FastLEDshowTask(void *pvParameters)"
rüber. Ausserdem im Setup
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.
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
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)
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
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.