Ich habe ein Projekt, mit dem ich bis zu 1152 WS2812B über DMX ansteuern möchte. Alles läuft genau so, wie ich es will, doch jetzt muss ich feststellen, dass der Nano zu wenig Speicher hat...
Mit meinem Wissen kann ich leider nicht herausfinden, wie viel Arbeitsspeicher benötigt wird, da die Arduino IDE die nicht korrekt berechnet...
Ich verwende diese Bibliotheken: #include <Arduino.h> #include <DMXSerial.h> #include <Adafruit_NeoPixel.h> #include <EEPROM.h> #include <LiquidCrystal.h>
Damit bekomme ich in Verbindung mit dem Nano nichtmal 288LEDs hin.
Welcher Controller kann das stämmen und ist mit der Arduino IDE programmierbar, bzw gibt es den Core zum installieren, denn selber kann ich den auch nicht schreiben
es kommt auch ein wenig darauf an, wie festgelegt du auf Libs wie die Adafruit Neopixel bist.
Manche größere Boards haben eigene Libs. Hier z.B. für die Teensy Boards https://www.pjrc.com/teensy/td_libs_OctoWS2811.html https://www.pjrc.com/non-blocking-ws2812-led-library/
eventuell läuft da auch die Adafruit Lib oder ein Fork davon, muss man halt schauen, sie wird zumindest in der Doku der non blocking Lib oben erwähnt.
Da würde wohl schon der kleine Teensy LC reichen (Low Cost), von der Leistung her wie ein Arduino mit SAMD21 aber günstiger.
Nach oben hin scheint keine Grenze zu sein:
How many and how fast? That's a hard question. The short answer is 1.065 million WS* LED updates per second, spread across 32 channels. Give or take. To put that in more practical terms, that's 32 channels of 1000 LEDs per channel at 33 frames per second. Or 32 channels of 100 LEDs per channel at 330 frames per second. You get the idea.
69A schon Mal irgendwo gesehen?
Mit ordentlich Puffer-Kondensatoren wirst Du das Netzteil an die entnommene Leistung annähern können, trotzdem muß das Netzteil zumindest diese Menge bringen.
Dort wird Strom langsam echt gefährlich - den 5V ist es relativ egal, wie dünn der Draht ist, Der gerade weggesprengt wird und ob Du Das nur als Branding in Erinnerung behältst, oder ob's Dich dabei wort-wörtlich mit zerlegt.
Eine Sicherung hilft Dir nur insoweit, daß der Strom, Den das Netzteil liefern kann, diese Sicherung sicher auslöst - also besagte Klingeldrähte könnte man beruhigt mit wenigen Ampere absichern und kann davon ausgehen, daß die Hütte nicht beim ersten Problem abbrennt.
Wenn das Monster am Leben ist, stünde ich einem Bild nicht abgeneigt entgegen.
Als RAM brauchst du 3,5kB für die LED Pixeldaten und 0,5kB für ein DMX-Frame. Dann kommt noch zusätzlicher RAM dazu, den die Libraries für die Verwaltung benötigen und was dein Gluecode braucht.
Aber ich seh noch ein anderes Problem: Die Ws2812 werden häufig per Bitbanging angesteuert. D.h. Interrupts werden deaktiviert um das Timing richtig hinzubekommen.
DMX jedoch wird extern gesteuert. D.h. du willst das vermutlich mit Interrupts lösen.
Ich sehe da folgende Möglichkeiten:
Wechsel zu LEDs mit getrennten Clock und Data (z.B. APA102), damit eine Aktualisierung pausiert werden kann
Einsatz von mehr RAM um die Bitmuster vorzuberechnen und dann per SPI rauszuschieben
Rintin:
Aber ich seh noch ein anderes Problem: Die Ws2812 werden häufig per Bitbanging angesteuert. D.h. Interrupts werden deaktiviert um das Timing richtig hinzubekommen.
Das betrifft die Adafruit Lib und wohl auch ähnliche wie FastLED. Die oben verlinkten Teensy Libs arbeiten alle drei mit DMA. Auch für ein über I2C oder SPI gebundenes Display gäbe es auf dem Teensy DMA basierte Alternativen zu den Standard Libs.
Damit wäre der Prozessor frei für DMX und die Inhaltsberechnung für Display und LEDs.
Für JEDE Einspeisung eigene 2,5mm² an die Stripes führen!
Mindestens beidseitig einspeisen, die Leiterbahn auf dem Stripe kann nicht wirklich viel Strom leiten.
Die 40A kommen auch, wenn Du was falsches miteinander verbindest!!
Habe selber mit einem 60A Netzgerät eine Kroko-Strippe sterben lassen (ok, noch Mal die Hälfte mehr, zugegeben) ... so schnell kannst Du nicht gucken, wie der Mist wegbrennt!!
Wie schnell willst Du die LED ansteuern?
Die reine Datenübrtragung zu 1152 Ws2812 braucht 34,56 mS. Dazu ist die Datenübertragung des DMX dazuzurechnen.
Ich habe mir mal den Arduino Nano Every bestellt, er sollte das auch schaffen... Allerdings muss ich jetzt feststellen, dass er dafür nicht kompiliert... Es scheint an einer inkompatibilität mit der DMX library zu liegen:
C:\Program Files (x86)\Arduino\libraries\DMXSerial\src\DMXSerial.cpp:361:52: error: 'RXENn' was not declared in this scope
_DMXSerialInit(Calcprescale(DMXSPEED), (1 << RXENn), DMXFORMAT);
^~~~~
bekommt man das irgendwie ans laufen? Beim Anpassen bin ich leider überfordert...
heißt das du willst einen DMX Empfänger für 1152 WS2812B machen?
Wie hast du dir das mit 512 DMX Adressen für 1152 LEDs vorgestellt? Fasst du da was zusammen? Mehrere Universen? Neuere Version von DMX?
Kanal X = Adresse
Kanal X bestimmt den Modus, gehen wir mal von Adresse 1 aus:
Kanal 1 = 0 (LICHT Kaltweiß)
Alle LEDS voll an
Kanal 1 = 1 (LICHT Warmweiß)
Alle LEDS Rot 255
Alle LEDs Grün 150
Alle LEDs Blau 60
Kanal 1 = 2 (Lichtorgel)
Man kann in einem Menü festlegen, wie viele LEDs installiert sind
Man kann in einem Menü festlegen, in wie viele Gruppen diese unterteilt sind
Man legt also fest 80 LEDs und 4 Gruppen, dann werden die zu 20LEDs pro Gruppe zusammen gefasst
Dann folgendes:
Kanal 1 Modus
Kanal 2 Helligkeit
Kanal 3 Rot Gruppe 1
Kanal 4 Grün Gruppe 1
Kanal 5 Blau Gruppe 1
Kanal 6 Rot Gruppe 2
Kanal 7 Grün Gruppe 2
Kanal 8 Blau Gruppe 2
Kanal 9 Rot Gruppe 3
Kanal 10 Grün Gruppe 3
Kanal 11 Blau Gruppe 3
Kanal 12 Rot Gruppe 4
Kanal 13 Grün Gruppe 4
Kanal 14 Blau Gruppe 4
Also braucht man da 14 Kanäle, mit 5 Gruppen wäre das entsprechend 17 Kanäle usw.
Das funktioniert aber schon alles, ich kann mit dem Nano aber nichtmal 144 LEDs kontrollieren...
Mit einem Mega klappt es mit den 1152LEDs, aber jetzt habe ich natürlich schon eine Platine für den Nano anfertigen lassen, die müsste ich in den Müll schmeißen und neue für den Mega bestellen, die aber auch größer und teurer wären...
Deswegen würde ich lieber einen Controller nehmen, der die Nano Form hat, aber genügend RAM zum Kontrollieren der LEDs