Passenden Microcontroller für 1152 WS2812, DMX und LCD Display

Hi,

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 :slight_smile:

LG und danke schonmal

Du brauchst pro WS2812 Pixel 3 Byte, das wären für deine 1152 = 3456 Byte Ram.
Den Rest kann ich nicht raten.

Hallo,

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.

Von der Hardware her gar nicht so aufwändig

Hi

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.

MfG

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
  • Einsatz von interner Hardware
  • Einsatz von externer Hardware
  • Irgendwas mit 2 CPU-Kernen und einem Zeitunkritischem Protokoll zwischen beiden

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.

Habe es mal auf einen Mega 2560 geschoben und getestet, da geht es ohne Probleme...

Mit dem Strom, habe ich es passend berechnet und grade nochmal getestet.

Habe bis jetzt nur 576 LEDs, habe alle mit weiß angesteuert, das zieht gute 17A und mein Netzteil schafft 40A

Man hat ja alle 288LEDs die Möglichkeit nochmal die 5V einzuspeisen, dsa werde ich auch machen, indem ich 2x 2,5mm² Leitung parallel lege.

Mit dem Timing, das macht mich nun etwas misstrauisch, aber soweit funktioniert es ja.

Hi

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!!

MfG

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.

Grüße Uwe

McKaiver:
... doch jetzt muss ich feststellen, dass der Nano zu wenig Speicher hat...

Sieh Dir mal die neuen Nanos an. Z. B. Arduino Nano 33 IoT — Arduino Official Store. 32 kB SRAM :slight_smile:

Gruß

Gregor

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...

1152 WS2812B

#include <Arduino.h>
#include <DMXSerial.h>
#include <Adafruit_NeoPixel.h>
#include <EEPROM.h>
#include <LiquidCrystal.h>

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?

Vorgestellt habe ich mir das so:

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

dann lautet aber deine Frage eher,

"Ich suche einen Nano-PIN-Out kompatiblen MEGA"

oder?
Dass du einen Mega (oder kleinere Bauformen davón ) an deine Platine mit Kabeln oder Zwischenplatine anstecken kann, ist ja eh klar.

Warum wären neue Platinen größer? den Mega gibt es auch in kleinen Bauformen. Suche nach "Arduino Mega pro mini"

ok, habe grade danach gesucht und muss sagen, ich bin entsetzt, wie geil das ist... gleich mal ordern und experimentieren.

Der Boardverwalter findet den nicht, kann ich den mit den Settings für den normalen Mega 2560 bespielen?

liegt ja nur am Bootloader. Wo die Pins physisch rausgeführt sind, sollte der IDE egal sein.

Pass beim kauf auf wegen 3.3V/5V und welche USB Schnittstelle, es gibt da mind. 4 Varianten.
bei Robotdyn bestelle ich gern.

vs. https://s.click.aliexpress.com/e/_dZMaQQB