Viele (>2000 Stk.) WS2811 LED Pixel ansteuern-Speicherprobl. (Gelöst mit Teensy)

Ich versuche seit Wochen eine programmierbare Weihnachtsbeleuchtung für mehrere 1000 Stk. WS2811 zu erstellen.
Leider scheitere ich kläglich am verfügbaren Speicher.

Ich suche eine Lösung wie ich besser mit dem geringen Speicher umgehen kann oder einen komplett anderen Ansatz wie ich das Problem lösen kann. Im Anhang mein Lösungsansatz der mit 72 LED geht, aber bereits mit 144 LED den Speicher überfüllt.

Was ich will:
Via PC (z.B. seriell), mit der SD Karte oder Ethernet (z.B. mySQL) eigens gestaltete Lichtprogramme ablaufen lassen. Dabei spielt die Geschwindigkeit keine grosse Rolle weil ich keine amerikanische Disco Weihnachtsbeleuchtung will. Es sollen statische Lichtbilder sein, die sich alle paar Minuten ändern. Als Feature sollten die Lichtbilder dann noch sanft überblenden usw.

Das Test Sketch:
Liest sequentiell die test.txt Datei von der SD Karte aus. Drei Stellen ergeben jeweils einen Farbcode. Dieser wird über das rotRGB, gruenRGB und blauRGB in eine Farbe aufgeschlüsselt. Danach werden die nächsten drei Stellen gelesen, welche den Farbcode für den nächsten Pixel bedeuten.
Bei NUM_LEDS definiere ich wie viele LED Pixel ein Lichtbild hat. Nach dieser Anzahl wird das LED Bild aufgeschaltet und das nächste wird ausgelesen. Etwas schwierig zum beschreiben. Ich hoffe ihr versteht es trotzdem :slight_smile:

Mein Problem:
Ich vermute, dass die FastSPI_LED2 Library jeden Pixelzustand in ein Array speichert und dann zum Zeitpunkt x mit FastLED.show(); scharf schaltet. Ein Array frisst aber massenhaft Speicher.
Habe auch ein Testprogramm mit mySQL programmiert. Da fällt die SD Library weg. Funktioniert auch, aber sobald ich über 200 Pixel nehme ist der Speicher wieder voll.

Lösungsansätze?
Statt ein Arduino Ethernet ein Ardunio Mega nehmen? Hat zwar mehr Speicher, aber ich möchte bis zu 6000 LED ansteuern können. (PS: Probierte Intel Galileo, da läuft ausser "Blink" leider gar nichts)
Kann man die FastSPI_LED2 so umschreiben, dass die LED direkt aus der mySQL Datenbank angesteuert werden statt in einem Array zwischen zu speichern? Oder habe ich dann ein Zeitproblem?
Gibt es einen komplett anderen Ansatz um das zu lösen?

Was ich nicht verstehe:
Mit der FastSPI_LED2 Library kann ich durchaus eine Matrix mit 1020 LED ansteuern: Siehe Bsp. led_1020_zufall.ino. Ist das weil es keine weiteren Librarys enthält?

Vielleicht kann jemand meinen Prototypen auf einem Mega ausprobieren und die NUM_LEDS hoch schrauben?

Wäre riesig froh um Unterstützung da ich schon sehr am verzweifeln bin. Danke.

NACHTRAG: Dank grosser Unterstützung hier im Forum bin ich schon sehr weit voran gekommen!
In meinem Blog berichte ich sporadisch über die Projektfortschritte: http://www.technikfreak.ch/?s=weihnachtsbeleuchtung

NACHTRAG 2 (Okt. 2016) - Lösungsbeschreibung komplett

Digitale Weihnachtsbeleuchtung selbst programmiert - Teil 1
Digitale Weihnachtsbeleuchtung selbst programmiert - Teil 2
Digitale Weihnachtsbeleuchtung selbst programmiert - Teil 3

serial_rgb_006.ino (4.61 KB)

test.txt (163 KB)

led_1020_zufall.ino (829 Bytes)

Spontaner Vorschlag: Bei solchen Leistungen/Größenordnungen keinen Arduino nehmen.
SPI kann z.B. auch ein Raspberry Pi und der kann das auch ohne Murren ansteuern.

Danke für den Vorschlag. Einen Raspberry Pi habe ich mir deswegen auch angeschafft.

Leider fand ich erst danach heraus, dass der nicht in der Lage ist, die WS2811 direkt ab der Hardware taktgenau anzusteuern. Das geht anscheinend nur mit den teureren WS2801 da diese einen Clock und Data Anschluss haben. Die WS2811 haben nur einen Data Anschluss.
Für Links zu funktionierenden WS2811 Lösungen mit dem Rasp., ohne zusätzliches Hardwaregebastel, bin ich jedoch auch sehr interessiert und offen.

hi,

die daten müssen in einem array gespeichert werden, damit sie die library auf die leds übertragen kann.
ein raspberry hat das problem, daß da ein betriebssystem läuft, das das timing stört.
schau Dir mal einen teensy an.
http://www.pjrc.com/teensy/index.html
funkt auch mit der arduino IDE, aber speicher und flash satt.

gruß stefan

Entschuldige daß ich das so mal wenig jugenfrei sage: Hat Du einen Geldscheißer zuhause?
Du willst 6000 WS2812 kaufen, ansteuern und betreiben?
Ein WS2812 kostet im Strip so um die 0,4€ bei Großmengen vieleicht die Hälfte. Das sind bei 6000 Stück immernoch 1200€
Bei einem Stromverbrauch von 60mA pro LED sind das 360A bzw bei 5V gute 1800W. Bei einem Wirkungsgrad des Netzteils von optimalen 90% sind das dann ca 2kW Anschlußleistung. Da mußt Du DIr Gedanken machen die WS2912 nicht zu nahe beieinander zu montieren. Um 360A an die Strips zubekommen brauchst Du ab Netztei ein 50mm^2 Kabel daß es die 360A verträgt und Du mußt die Spannungsversorgung bei einem Strip alle 30 LED einspeisen.

Ein Arduino MEGA hat 8kByte RAM da könntest Du ca 2000 LED-Daten im Speicher halten. Mit einer Extendend RAM Platine hast Du bis zu 64kByte RAM aber ich kann Dir nicht sagen ob die FastSPI damit funktioniert und das Timing einhalten kann.
teensy3 ist da wahrscheinlich die beste Lösung.

Grüße Uwe

Wenn man etwas mehr RAM braucht ist auch der Atmega1284 eine gute Alternative. Der hat 16kB ist in DIP zu haben.

Aber bei dem was ein Teensy kostet lohnt sich die Arbeit nicht unbedingt:
http://www.ebay.de/itm/Teensy-3-1-USB-Entwicklungs-Board-32bit-ARM-Cortex-M4-MK20DX256VLH-Original-PJRC-/261351143546?pt=Wissenschaftliche_Geräte&hash=item3cd9bdf87a

Serenifly:
Wenn man etwas mehr RAM braucht ist auch der Atmega1284 eine gute Alternative. Der hat 16kB ist in DIP zu haben.

DIe Ansteuerroutine der WS2812 ist in Maschienenspreche programmiert. Bist Du sicher daß die aauf dem Atmega1284 funktioniert?
Grüße Uwe

Das ist nur das Mittelstück zwischen Atmega328 und Atmega2560. Was auf denen funktioniert sollte auch auch auf dem 1284 gehen. Die hier relevanten Register sind sehr, sehr wahrscheinlich identisch. Abgesehen von Unterschieden beim Speicher, der Anzahl der I/Os, ADC-Eingänge, Anzahl der Timer, etc. gibt es da nicht viele Differenzen.

Vielen Dank für die vielen Tipps.

Ja, ich will ca. 6000 RGB LED für meine Weihnachtsbeleuchtung kaufen. Die aktuelle Weihnachtsbeleuchtung besteht aus etwa 3000 Glimmlämpchen und die haben eine Leistungsaufnahme von über 2000 Watt.
Mit 6000 LED werde ich die Leistungsaufnahme auf ca. 900 Watt reduzieren. Die Bruttoberechnung von Uwe stimmt zwar. Doch weil nicht alle LED gleichzeitig leuchten und vor allem selten in Weiss, wird sich der Verbrauch entsprechend reduzieren. Ich plane daher drei bis max. vier 5V 60A Netzteile. Die Stromverteilung findet sternförmig statt. Nach ersten Tests muss ich alle 100 LED neu einspeisen, sonst flackern die LED (Spannungsabfall). Daher werden (wetterfeste) Stecker und Kabel wohl der teuerste Posten des Projektes werden. Aktuell liege ich bei 1700 Dollar für die 6000 LED. Ohne Steuern und Zoll. Ich nehme übrigens LED Pixel und nicht LED Bänder. Bei meinen Indoor Testaufbau (12*12 Matrix) leuchten die LED so hell, dass ich sie auf ca. 50% dimmen muss.
PS an Uwe: Nein, habe keinen Geldscheisser, muss mir das wie die meisten durch viel Arbeit verdienen. Trotzdem will ich mir dieses Projekt leisten. :wink:

Auf den Teenys 3.1 bin ich auch schon gestossen. Der hat 256kB, wenn ich das richtig sehe? Gemäss Beschreibung sollte der mit mehreren Tausend LED funktionieren. Nachdem ich mit dem Arduino UNO, Ethernet, Intel Galileo und Raspberry Pi scheiterte, bin ich etwas skeptisch ob es mit dem Teensy wirklich klappt. Eigentlich alle Beispiele mit dieser Octo2811 Library arbeiten mit Matrix Bildern, wo berechnete Effekte oder gestreamte Bilder zur Anwendung kommen. Ich will jedoch jeden Pixel einzeln ansteuern. Aktuell sehe ich das jedoch als einzigen Ausweg. Ich suche bereits seit Januar nach einer funktionierenden Lösung. Hätte nie geglaubt, dass das so schwierig wird. :disappointed_relieved:

Mit 6000 LED werde ich die Leistungsaufnahme auf ca. 900 Watt reduzieren. Die Bruttoberechnung von Uwe stimmt zwar. Doch weil nicht alle LED gleichzeitig leuchten und vor allem selten in Weiss, wird sich der Verbrauch entsprechend reduzieren.

Nein da liegst Du etwas falsch.
Da die 3 verschiedenfarbigen LEDs in PWM angesteuert werden gibt es keine sichere momentane Leistungsreduktion wenn man statt weiß eine Farbe aus den 3 Grundfarben darstellt. Die Durchschnittsleistung ist weniger aber nicht die Momentanleistung, die das Netzteil für die kurze Zeit liefern muß ohne daß ein Spannungseinbruch passiert. Wenn Du die WS2811 auf 50% dimmst brauchst Du dennoch ein Netzteil das 360A liefern kann.
Eine Leistungsreduktion hat Du wenn wirklich nur die Hälfte der WS2812 gleichzeitig eingeschaltet sind.

Wie bekommst Du die LED Pixel wetterfest?

bezüglich Kosten. Ok wenn Du Dir der Kosten bewußt bist dann kanns ja nicht schief gehen.
Rechne das aber mal auch mit Netzteilen, Kabel und Montagematerial durch.

Grüße Uwe

hi,

naja, die bisherige weihnachtsbeleuchtung war ja sicher auch nicht billig. und wenn's ein hobby ist...
wenn man schaut, was da manche amerikaländer aufführen...

wegen der netzteile mußt Du wirklich immer für volle leistung rechnen, auch wenn die dann nur jeweils kurz benötigt wird. aber ich würde sowieso auf etliche netzteile aufteilen, das reduziert auch die kabelquerschnitte.

ich hab' schon einiges mit den 2812er gemacht, bei der okto2811 seh' ich keinen großen unterschied, außer daß Du mehr leds ansprechen kannst und die teensies viel schneller liefern. mit einem 3.1 könntest Du sogar mit 6000 leds einigermaßen flüssige animationen hinbekommen. deshalb würde ich von beginn weg mit allen 8 lines arbeiten, auch wenn das für eher "statische" bilder wie Deine nicht nötig ist.

beim teensy 3.1 brauchst Du eventuell diesen adapter,
https://www.pjrc.com/teensy/td_libs_OctoWS2811.html
weil manche 2812B mehr spannung auf der data-leitung brauchen. das ding sieht aber ohnehin sehr praktisch aus, so mit den steckern gleich drauf.

gruß stefan

Ein Farbübergang zwischen 2 Bildern ist nichts statisches sondern etwas sehr dynamisches.
Grüße Uwe

naja, uwe, ein bildwechsel alle paar minuten rechtfertigt den ausdruck statisch in anführungszeichen ein wenig...

ganz liebe grüße ins tirolerische vom bären

ups, hatte die Gänsefüßchen übersehen
Schöne Grüße nach Wien (mußte schon mal wieder dahinfahren).
Grüße Uwe

hi,

Wien (mußte schon mal wieder dahinfahren).

naja, wenn man mal was anderes braucht als butter und rüben... 8)

gruß stefan

Uwe, ich sass nun die letzte Stunde an meinem Testaufbau und machte ein paar Strommessungen :slight_smile:

Das mit dem Strom muss ich ja schon genauer wissen. Ich war schon etwas erleichtert als sich meine Schätzung als ganz OK zeigte.

Was mich erschreckte: Mit 100% Weiss, wurden die letzten 50 LED immer dunkler, ich habe beim Eingang und nach 50 Pixel die 5V gespiesen. Als ich nach 100 Pixeln auch noch eine Einspeisung machte, klappte es. Und natürlich musste ich mit der Messung nochmals von vorne beginnen :~

Was auch noch anzumerken ist: Die Lichtintensität ist subjektiv wahrgenommen nicht linear! Resp. die digitale Skala vom FastSPI_LED2 ist nicht linear? So empfand ich bei der Hälfte die Lichtintensität etwa als 75% hell! Bei einem Viertel wurde es dafür recht dunkel.

Ich denke, dass eine Aussenhelligkeitsabhängige Lichtregelung durchaus Sinn macht um noch mehr Strom zu sparen. Also beim Eindunkeln etwas heller und wenn es ganz dunkel ist draussen, werde ich etwas mehr dimmen.

Natürlich werde ich die Netzteilleistung grosszügig aufrunden. Die Netzteile sollen ja nicht am Anschlag laufen und nach 2 Wochen ausfallen.

Weitere Messungen bezüglich Spannungsabfall und Leitungsverlust werden noch in meinem Blog folgen. Da schreibe ich sporadisch über mein Projekt. Für heute ist aber Feierabend.

Mit welchem Meßgerät hast Du gemessen?

Beim Hochrechnen von 144 LED auf 6000 LED machst Du große Fehler.

Laut Deinen Berechnungen haben die Netzteile einen Wirkungsgrad von ca 44% und verheizen so über 850W.
Fehlerquellen: Leistungsfaktor und schlechter Wirkungsgrad bei sehr geringer Auslastung. (sind das die Netzteile die Du später verwenden willst?) Meßfehler ...

Grüße Uwe

Nochmal besser nachgeschaut und gerechnet.

144WS2812
3 auf 100% -> 3,25A
2 auf 100% -> 2,73A Durchschnitt
1 auf 100% -> 1,89 A Durchschnitt
Theoretisch müßte ein 100%, 66%, 33%, 0% Verhältnis ergeben.
Praktisch mißt Du 100%, 84%, 58%, 4,6%.
Da ist etwas falsch in der Messung.

Ansteuerung bei 3 LED von 144 WS2812
100% -> 3,25A
50% -> 2,27A
25% -> 1,36A

Das sind laut Strom
100%, 70%, 41%

Grüße Uwe

So, ich habe nun eine Lieferung mit 6'000 Stk. WS 2811 erhalten. Dazu habe ich direkt in Amerika drei Teensy 3.1 mit dem Spannungsadapter bestellt. Die sind leider noch nicht eingetroffen. Des weiteren bestellte ich 5 Stk. 5V 60A Netzteile.

Am Wochenende nun der nächste Tiefschlag in meinem Projekt. Eigentlich wusste ich es ja, aber ich wollte es nicht glauben.
Ein Test mit einem 20 Meter Anschlusskabel mit 1mm2 Querschnitt 'bewies' mir mal wieder das Ohmsche Gesetz. Entsprechend lag der Spannungsabfall je nach Farbmuster bei ca. 0.4 Volt am Kabel. Genug, dass die WS2811 nicht mehr richtig funktionierten.

Ich hätte besser die Speisung auf 24 Volt ausgelegt und am Ende jeweils einen DC - DC Konverter genommen der die Spannung von 24 auf 5 Volt regelt.

Wer also an ähnlichen Projekten rumwerkelt sollte die Problematik mit langen Speisungsleitungen sehr ernst nehmen.

PS: So sieht es aus wenn 6'000 LED an einem Haufen liegen: Redirecting...

Du brauchst sowieso einen höheren Querschnitt. Die Faustregel ist 1-1,5mm² pro 10A. Wobei das die Leitungslänge eben nicht berücksichtigt.