Forum: Mikrocontroller und Digitale Elektronik WS2815 mit Arduino ansteuern


von Kevin M. (arduinolover)


Lesenswert?

Hallo liebe Mikrocontroller Gemeinde,

Ich bin Wirtschaftsingenieur im 1. Semester und hobbymäßiger Bastler. 
Ich habe neuerdings etwas mit Arduino rumgespielt und finde das ganze 
sehr interessant. Da ich für unseren Partykeller schon lange etwas bunte 
Beleuchtung haben will habe ich mir überlegt mehrere LED Stripes mit 
ws2815 zu verlegen. Diese würde ich gerne mit dem Arduino ansteuern. Sie 
sollen über Bluetooth gesteuert werden und verschiedene Lichteffekte 
erzeugen (Faden etc.)

Die meisten LED Streifen haben ja 150 LEDs, ich dachte daran 8 von den 
Streifen zu verwenden und würde diese gerne mit 100 Hz aktualisieren. 
Das Ganze soll dann per Handy gesteuert werden und ggf. vielleicht auch 
über die Musik.  Da ich bisher wenig Erfahrung mit solchen Dingen habe, 
und nicht genau weiß wie ich das umsetzen kann würde ich mich über etwas 
Unterstützung freuen.

von chris (Gast)


Lesenswert?

>Die meisten LED Streifen haben ja 150 LEDs, ich dachte
>daran 8 von den Streifen zu verwenden und würde
>diese gerne mit 100 Hz aktualisieren.

Könnte gehen:
1
>> bitProLed=24;
2
>> tBit=1.25e-6;
3
>> anzahlLeds=150;
4
>> cycleTime=anzahlLeds*bitProLed*tBit
5
cycleTime =  0.0045000
6
>> f=1/cycleTime
7
f =  222.22

https://github.com/kitesurfer1404/WS2812FX

von Kevin M. (arduinolover)


Lesenswert?

Schonmal danke für die Antwort, die Bibliothek sieht sehr interessant 
aus. Es ist echt cool das schon so viele Effekte mit dabei sind.

Ich habe jetzt mal etwas rum gespielt deine Rechnung konnte ich soweit 
nachvollziehen allerdings habe ich ja insgesamt dann 1200 LEDs was zu 
etwas unter 30Hz führen würde, wenn ich das richtig sehe?

Wenn ich mich in meinem Programm mit der Zeitmessung nicht ganz blöd 
angestellt habe komm ich auf etwas unter 30Hz und alles in allem scheint 
der Arduino etwas überfordert zu sein. Es kommt zu Aussetzern bei der 
Seriellen Konsole und mein Speicher ist je nachdem ob ich die Streifen 
alle aneinanderhänge oder an einzelne Pins knapp oder überfüllt.

Ich nehme an das mein Programm jetzt auch nicht das beste ist als 
Anfänger, aber gibt es da Erfahrungen in der Community bezüglich des 
Arduinos generell und auch dieser Bibliothek, wenn man so viele LEDs 
damit betreiben möchte?
Schonmal Danke.

von Joachim B. (jar)


Lesenswert?

chris schrieb:
> Könnte gehen:>> bitProLed=24;

richtig, aber:

chris schrieb:
> f =  222.22

kommt nur bei einem Stripe pro Data raus

für

Kevin M. schrieb:
> ich dachte daran 8 von den
> Streifen zu verwenden

hilft nur 8-Kanal Ausgabe

Kevin M. schrieb:
> mit Arduino

muss man überlegen welchen man nimmt!

ein nano wird wohl ausscheiden 8 x 150 = 1200 LEDs brauchen schon mal 
3600 Byte statisch für die RGB Daten es sei denn man will sie zur 
Laufzeit berechnen, ich denke eher an ESP32 oder neuere AVR, aber da 
braucht man noch einen Pegelwandler von 3,3V zu 5V.

Auch muss man sich mal intensiv über die Speisung Gedanken machen, denn 
ein Stripe wird kaum 9A leiten und x8 = 72A will man nicht mit 100mm² 
verlegen.

Also besser auf 24V bis 36V gehen und an den Einspeisepunkten DC/DC 
stepdown auf 5V.

Alles in Allem, ein anspruchsvolles Vorhaben wo Grundlagen mindestens 
URI wichtig sind.

Sorry 2812B gelesen, sonst der Rest gilt wenn man umrechnet.

: Bearbeitet durch User
von Joachim B. (jar)


Lesenswert?


von STM32 FTW (Gast)


Lesenswert?

Hi,
super, dass du dich in die Elektronik einarbeiten willst, aber darf ich 
dir einen Tipp geben?
Arduinos sind für solche Sachen eher blöd, weil sie zwar leicht zu 
programmieren sind, aber sehr langsam sind.

Ich würde dir ein STM32 empfehlen. Den kann man mittlerweile sehr 
einfach mit der HAL von ST programmieren. Schau dir mal CubeMX an, dass 
ist wie ein Baukastensystem. Es gibt sogar schon fertige Beispiel mit 
den WS2815. Da sind soagr mehr als 200Hz drinne wenn du willst.
Besorg die mal eine BluePill Board oder gleich ein Discovery.

MFG

von Joachim B. (jar)


Lesenswert?

STM32 FTW schrieb im Beitrag #5980052:
> Da sind soagr mehr als 200Hz drinne wenn du willst.

wie denn das, der Stripe gibt das Timing vor und die Anzahl der LEDs in 
der Kette, klar mit einer LED kann man mehr Tempo erzeugen aber 1200 
Ports parallel hat auch kein STM, abgesehen davon will keiner die 
Stripes zerschnippeln und 1200 Leitungen ziehen.

von STM32 FTW (Gast)


Lesenswert?

Joachim B. schrieb:
> wie denn das, der Stripe gibt das Timing vor und die Anzahl der LEDs in
> der Kette, klar mit einer LED kann man mehr Tempo erzeugen aber 1200
> Ports parallel hat auch kein STM, abgesehen davon will keiner die
> Stripes zerschnippeln und 1200 Leitungen ziehen.

HI, da habe ich mich falsch ausgedrückt, wenn er die Stripes aufteilt 
meinte ich natürlich.

von Joachim B. (jar)


Lesenswert?

STM32 FTW schrieb im Beitrag #5980111:
> HI, da habe ich mich falsch ausgedrückt

wie war das möglich?

STM32 FTW schrieb im Beitrag #5980111:
> wenn er die Stripes aufteilt
> meinte ich natürlich.

schrieb ich doch oben schon, seine 8 Stripes a 150 LEDs parallelisieren 
und ein STM kann das wohl aber auch andere.

Aber ich fange deswegen keinen Glaubenskrieg an.
Der TO schrieb von Arduino und da ich meine WS2812B vom Nano328p mit der 
Arduino IDE auf den ESP32 gebracht hatte wird das für den TO der 
leichtere Weg sein als STM denke ich.

: Bearbeitet durch User
von Stefan F. (Gast)


Lesenswert?

STM32 FTW schrieb im Beitrag #5980052:
> Arduinos sind für solche Sachen eher blöd, weil sie zwar leicht zu
> programmieren sind, aber sehr langsam sind.

Immerhin sind sie schneller, als der erste PC (Schneider CPC464), auf 
dem ich das Programmieren lernte. Geeignet sind sie ganz sicher - auch 
um den Umgang mit begrenzten Ressourcen zu lernen - was mit Verlaub 
vielen professionellen Programmierern fehlt.

STM32 sind schön und gut, aber für den Anfang meiner Meinung nach zu 
komplex.

> Schau dir mal CubeMX an, dass
> ist wie ein Baukastensystem.

Wo immer irgendein Baustein nicht tut, was er soll. Ich möchte keinem 
Anfänger zumuten, dann in den Quelltext der HAL zu schauen, um sie zu 
reparieren.

von Hans B. (Gast)


Lesenswert?

Stefanus F. schrieb:
> Immerhin sind sie schneller, als der erste PC (Schneider CPC464), auf
> dem ich das Programmieren lernte. Geeignet sind sie ganz sicher - auch
> um den Umgang mit begrenzten Ressourcen zu lernen - was mit Verlaub
> vielen professionellen Programmierern fehlt.

Dass man mit begrenzten Ressourcen klarkommen sollte ist wohl korrekt. 
Allerdings ist es fakt das man für eine gewissen Anzahl an LEDs eben 
entsprechend Speicher braucht und machen wir uns nichts vor die 
Controller auf den Arduino Boards sind jetzt nicht die Speicher Riesen. 
Ich denke das es durchaus möglich ist das mit einem Arduino zu 
realisieren aber wenn er es langfristig auch über Musik oder sonst was 
steuern will dann wird das ganze schon eng.

Stefanus F. schrieb:
> STM32 sind schön und gut, aber für den Anfang meiner Meinung nach zu
> komplex.

In dem Fall muss ich aus meiner Sicht wiedersprechen. Ich finde es 
ebenso wichtig sich mit der Hardware auseinander zu setzen die man da 
verwendet. Das geht meiner Meinung nach beim Arduino fast vollständig 
verloren. Das mag schön für Hobby Bastler sein, wenn er sich aber 
wirklich einarbeiten möchte dann finde ich es nicht verkehrt einen STM 
zu verwenden. Dank CubeMX ist es wirklich einfach geworden die 
Initialisierung zu machen und es gibt mittlerweile so viele Online 
Beiträge dazu. Man kann mich gerne korrigieren und ja ich bin sicher es 
gibt auch Arduino Bibliotheken die das anders machen, aber die die ich 
so kenne verwenden Bitbanging zur Ansteuerung der LEDs und das ist nun 
wirklich nicht Ressourcen effizient. Zumal da nichts mit paralleler 
Ausgabe zu machen ist.

Stefanus F. schrieb:
> Wo immer irgendein Baustein nicht tut, was er soll. Ich möchte keinem
> Anfänger zumuten, dann in den Quelltext der HAL zu schauen, um sie zu
> reparieren.

Ich gebe ja gerne zu das CubeMX am Anfang so seine Probleme hatte, aber 
das tool ist erwachsen geworden. Ich verwende es fast täglich und habe 
eigentlich nie wirklich Probleme damit. Zudem hat man mit der Atollic 
IDE auch ein mächtiges und doch einfach zu benutzendes Tool mit dem man 
auch anständig debuggen kann. Das stellt auch eine schöne Möglichkeit 
dar sich die internen Abläufe klarzumachen. Es mag sein das es nicht so 
einfach ist wie die Arduino IDE aber langfristig hat man mehr davon.

So das wurde etwas länger als gewollt. Aber wenn man ehrlich ist 10 
Leute 10 Meinungen. Es schadet nicht sich beides an zu schauen und dann 
zu entscheiden wie Tief man in die Materie eigentlich einsteigen will.

Zum eigentlichen Problem, Ich persönlich verwende die SPI Schnittstelle 
des STM um die WS28xx anzusprechen. Es gibt aber auch eine schöne Lösung 
mit Timern und DMA die ich mir zeitnah auch mal anschauen werde, da hier 
das Timing noch etwas geauer gemacht werden kann. Da der STM mehr als 
genug Timer und Timer Kanäle besitzt sollte es kein Problem darstellen 8 
Stripes parallel zu aktualisieren und in dem Fall sind wie oben bereits 
berechnet die 200Hz zu machen. Da der DMA den Datentransfer übernimmt 
kann parallel dazu auch schon der neue Puffer berechnet werden und 
Speicher ist in dem Fall kein Problem ;)

LG Hans

von Wolfgang (Gast)


Lesenswert?

STM32 FTW schrieb im Beitrag #5980052:
> Arduinos sind für solche Sachen eher blöd, weil sie zwar leicht zu
> programmieren sind, aber sehr langsam sind.

Warum sollte ein 32Bit Arduino mit 84MHz Clock "sehr langsam" sein?

Es gibt mehr, als nur den Arduino Uno

von Stefan F. (Gast)


Lesenswert?

Hans B. schrieb:
> Allerdings ist es fakt das man für eine gewissen Anzahl an LEDs eben
> entsprechend Speicher braucht

Das stimmt wohl. Dieser AVR ist für diese Anwendung in der Tat zu klein.

von c-hater (Gast)


Lesenswert?

Hans B. schrieb:

> Dass man mit begrenzten Ressourcen klarkommen sollte ist wohl korrekt.
> Allerdings ist es fakt das man für eine gewissen Anzahl an LEDs eben
> entsprechend Speicher braucht

Das ist überhaupt nicht "Fakt". Wer programmieren kann, liefert die 
(berechneten) Daten in Echtzeit in einem Callback. Dann braucht man 
keinen Framebuffer.

Das geht zwar nicht für wirklich jeden Anwendungsfall, für die 
allermeisten aber schon.

Beispiel:
Beitrag "Audio Spektrum Analyzer mit ATtiny85"

In dem Tiny wäre garnicht mehr genug Platz für einen richtigen 
Framebuffer gewesen...

von chris (Gast)


Lesenswert?

Hans schrieb
>Das mag schön für Hobby Bastler sein, wenn er sich aber
>wirklich einarbeiten möchte dann finde ich es nicht verkehrt einen STM
>zu verwenden.

Wo hat der TO geschrieben, dass er sich einarbeiten will?
Er will einen Neopixelstreifen mit Sound und Handy steuern.
Dazu nimmt man einen ESP32 mit der Arduino IDE und den Link auf die 
Beispiele dazu hatte ich oben gepostet.

Man kann aus allem eine Wissenschaft machen.

von Kevin M. (arduinolover)


Lesenswert?

Schonmal danke für die ganzen Anregungen. Ich habe noch ein bisschen rum 
probiert und mit dem Arduino der mir momentan zur Verfügung steht 
scheint das Ganze nicht so wirklich umsetzbar zu sein.

chris schrieb:
> Wo hat der TO geschrieben, dass er sich einarbeiten will?

Explizit habe ich das natürlich nicht geschrieben, ich bin aber in der 
Tat daran interessiert mich tiefer mit der Materie zu beschäftigen.

Ein ESP nützt mir denke ich aber auch nicht so viel auch wenn er 
deutlich mehr Leistung hat, da ich kein WLAN nutzen möchte.

CubeMX habe ich mir mal angesehen und ich muss sagen das ich das Tool 
ganz übersichtlich finde. Ich werde mir von einem Kollegen mal ein 
Nucleo Board leihen und etwas damit rumspielen. Die Sache mit den Timern 
bzw. SPI klingt sehr interessant und ich habe sogar hier im Forum etwas 
dazu gefunden.

von Stefan F. (Gast)


Lesenswert?

Kevin M. schrieb:
> Ein ESP nützt mir denke ich aber auch nicht so viel auch wenn er
> deutlich mehr Leistung hat, da ich kein WLAN nutzen möchte.

Muss du nicht benutzen, die WLAN Schnittstelle kann man abschalten. Was 
übrig bleibt ist ein äußerst preisgünstiger schneller Mikrocontroller 
mit viel RAM und ohne Ende FLASH.

Solange er genug I/O Pins hat, warum nicht verwenden?

Ein paar kleine Macken hat er natürlich, aber die sind kein Problem, 
wenn man sie kennt. Siehe http://stefanfrings.de/esp8266/index.html. 
Andere 32bit Controller haben auch Macken.

von Jochen (Gast)


Lesenswert?

c-hater schrieb:
> Das ist überhaupt nicht "Fakt". Wer programmieren kann, liefert die
> (berechneten) Daten in Echtzeit in einem Callback. Dann braucht man
> keinen Framebuffer.

Ich will mal sehen wie du mit einem 16 MHz Prozessor 800Kbit/s raus 
sendest und das in Echtzeit auf 8 Kanälen in einem Callback berechnest 
und nebenher noch Gott weiß was machst.

Natürlich kann man das machen, man kann aber wenn man "anständig 
programmieren" kann, auch die Hardware nutzen die einem zur Verfügung 
steht. Nicht umsonst arbeiten µC intern mit buffern, Hardwaremodulen und 
DMA. Wenn man den Speicher hat warum soll man dann bitte nicht die CPU 
entlasten und mit sinnvollen Sachen beschäftigen während gesendet wird.

Kevin M. schrieb:
> Explizit habe ich das natürlich nicht geschrieben, ich bin aber in der
> Tat daran interessiert mich tiefer mit der Materie zu beschäftigen.
Freut mich zu sehen das es noch Leute gibt die gewillt sind nicht immer 
den einfachsten Weg zu gehen und sich auch mal genauer mit etwas 
auseinander zu setzen.

von Kevin M. (arduinolover)


Lesenswert?

Nachdem ich jetzt etwas rumgespielt habe ein kleines Update.

Der STM ist wirklich klasse, ich habe relativ schnell die LEDs am laufen 
gehabt. Dank der vielen Timer konnte ich tatsächlich die 8 Kanäle 
realisieren und aktualisiere sie parallel mit Hilfe der DMAs. So konnte 
ich die geforderte updaterate sogar noch übertreffen.

Aktuell habe ich mal eine rudimentäre BT Verbindung über ein HC06 
gemacht, jetzt schaue ich mal was noch so geht.

Nochmal danke für die ganzen Vorschläge.

von Eric S. (Gast)


Lesenswert?

Interessanter Beitrag. Ich arbeite schon seit längerem mit STMs und 
hatte vor einem Jahr ca ein ganz ähnliches Projekt. Im Moment setze ich 
mich etwas mit der DSP Library auseinander. Und dachte mir das es doch 
bestimmt cool aussehen würde einen FFT von dem audio Signal zu machen 
und diese über die LEDs aus zu geben. Hat jemand Erfahrungen mit der 
DSP?

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
Noch kein Account? Hier anmelden.