Hallo ,
hätte mal eine Frage , möchte mehr als 800 Leds ansteuern (WS2801).
Der Code den ich auch mit euerer Hilfe :) geschrieben habe kann ich nur
254 Leds ansteuern.
Hat jemand eine ahnung wie ich mehr als 255 ansteuren kann.
LED King schrieb im Beitrag #6025504:
> SetLEDGroup(startIndex, endIndex, CRGBBlue);
Ich kenne deine Funktionen zwar nicht, aber reicht es nicht die Indexe
zu erweitern? BTW mach mal aus deinen ganzen "if"-Abfragen lieber
"else-if"-Abfragen oder besser switch (case), das wird
übersichtlicher...
LED King schrieb im Beitrag #6025504:
> mehr als 255
Kaskadieren? Salamitaktik? Ein kluger Bauer legt nie alle Eier in einen
Korb. Reicht denn die Leucht-Zeit überhaupt um diese multiplex zu
bedienen?
Arduino Fanboy D. schrieb:>> Warum?
Ist doch irgendwie auch logisch. Wenn die Eingangsimpedanz der WS2812
pro LED Baustein 50k Ohm beträgt, dann ergibt das bei 800 LED's einen
Gesamteingangswiderstand von nur 62,5 Ohm. Das wird der Arduino nicht
ohne zusätzliche Transistorstufe schaffen.
Rebecca und Larissa schrieb:> Ist doch irgendwie auch logisch. Wenn die Eingangsimpedanz der WS2812> pro LED Baustein 50k Ohm beträgt, dann ergibt das bei 800 LED's einen> Gesamteingangswiderstand von nur 62,5 Ohm. Das wird der Arduino nicht> ohne zusätzliche Transistorstufe schaffen.
die WS2812 haben aber eigene Digitalausgänge mit Signalverstärkung.
Input und Output sind entkoppelt die lesen ein, und geben alles nach den
ersten 24bit hinten wieder aus. Der µC muss also keinen 10m langen Bus
mit 800 Teilnehmern treiben, sondern nur bis zum 1. Teilnehmer und nur
dessen Input.
Rebecca und Larissa schrieb:> Ist doch irgendwie auch logisch. Wenn die Eingangsimpedanz der WS2812> pro LED Baustein 50k Ohm beträgt, dann ergibt das bei 800 LED's einen> Gesamteingangswiderstand von nur 62,5 Ohm.
Die befinden sich üblicherweise in einer Daisy-Chain, jede LED treibt
die nachfolgende.
Die einzigen Gedanken die man sich bei einer solchen Zahl von LEDs
machen muss ist wie bekommt man die allesamt auf die ganze Länge mit
halbwegs gleichen und satten 5V versorgt bei den nicht unerheblichen
Strömen die da fließen werden.
Bernd K. schrieb:> satten 5V versorgt
Wird interessant. z.B. 800x10mA=8A 800LED*0=fast 0
Die Aufgabe wird etwas komplexer. Wahrscheinlich hilft Salamitaktik
lange, dicke Kupferschienen und Lastsprünge zu vermeiden.
Zur Info sind WS2801 und es gehen ja nicht alle 800 LEDs gleichzeitig
an.
Habe es jetzt hinbekommen und funktioniert alles sauber.
Dank Sebastian R , klar byte geht ja nur bis 255 somit kommt nur int
infrage.
Danke euch P.s Netzteil ist ein 5A mit 5Volt
Bernd K. schrieb:>> Die befinden sich üblicherweise in einer Daisy-Chain, jede LED treibt> die nachfolgende.>
Ok, jetzt wird es klara.
Hier haben die Jungs 643 LED's mit 45 Ampere verbaut. Die haben dann
aber auch bei 8 Meter Kabellänge und 4qmm Querschnitt zwei Netzteile
eingesetzt.
https://youtu.be/3TUjszkS3bY
LED KING schrieb im Beitrag #6025657:
> Habe es jetzt hinbekommen und funktioniert alles sauber.>> Dank Sebastian R , klar byte geht ja nur bis 255 somit kommt nur int> infrage.>> Danke euch P.s Netzteil ist ein 5A mit 5Volt
Mess mal ganz am Ende des Streifens die Spannung wenn die hintersten an
sind. Und lass die mal weiß leuchten, ob das dann immer noch weiß ist
oder nach hinten hin einen Farbstich bekommt je mehr davon an sind.
Ich würde dicke Kabel legen, evtl mehrere Netzteile wenns langgestreckt
ist und an so vielen Punkten wie möglich/sinnvoll einspeisen.
LED King schrieb im Beitrag #6025504:
> Hallo ,>> hätte mal eine Frage , möchte mehr als 800 Leds ansteuern (WS2801).> Der Code den ich auch mit euerer Hilfe :) geschrieben habe kann ich nur> 254 Leds ansteuern.>> Hat jemand eine ahnung wie ich mehr als 255 ansteuren kann.
Dein riesigen if() Abfragen sind totaler Unsinn, das ist verschwendete
Tipparbeit, unübersichtlich und unwartbar. Das kann man DEUTLICH kürzer
und übersichtlicher gestalten.
Irgendwie schein dein Programm unvollständig, denn das Objekt FastLED
ist nirgends deklariert. Vermutlich in #include "FastLED.h, wobei das
dort nicht hingehört.
Der einfachste "Trick" ist, mehrere Ketten von LEDs zu bilden anstatt
alle 800 an eine zu hängen. Das hat viele Vorteile, nicht nur bezüglich
der Software.
Eingangspannung 5,2 Volt
Letzte 40 Leds werden leicht blau wenn alle an sind , da aber immer nur
bis zu 200 an sind leuchten alle kräftig.
An der letzten LED gemessen spannung 4.2 volt
Hört sich gut an schrieb:> Seit wann kann ich so einen Stringvergleich machen?> if (incoming == "LedLeicht") {
Seit man den == Operator überladen kann.
Hört sich gut an schrieb:> Seit wann kann ich so einen Stringvergleich machen?> if (incoming == "LedLeicht") {
Seit es die zarteste Versuchung in Form von C++ gibt.
Falk B. schrieb:>> if (incoming == "LedLeicht") {>> Seit es die zarteste Versuchung in Form von C++ gibt.
und wo ist der Mehrwert gegenüber
if(!strcmp((char *)incoming, "LedLeicht")) {
?
Joachim B. schrieb:> Falk B. schrieb:>>> if (incoming == "LedLeicht") {>>>> Seit es die zarteste Versuchung in Form von C++ gibt.>> und wo ist der Mehrwert gegenüber>> if(!strcmp((char *)incoming, "LedLeicht")) {>> ?
44 gegenueber 30 Zeichen und besser lesbar ;)
Schreib mal ein größeres Programm mit 1000 Zeilen.
Da merkt man schon einen Unterschied.
Gruß
Wam
Joachim B. schrieb:>>> if (incoming == "LedLeicht") {> und wo ist der Mehrwert gegenüber>> if(!strcmp((char *)incoming, "LedLeicht")) {>> ?
Wenn man den nicht erkennt, sollte man mal an die frische Luft gehen ...
Oder war das ironisch gemeint?
Kultmops schrieb:> Wenn man den nicht erkennt, sollte man mal an die frische Luft gehen ...
war ich gerade, der Regen hat ja glücklicherweise aufgehört
also ich kommen von Basic ganz früher und wenn man
if (incoming == "LedLeicht") dem ein $ spendiert und ein = wegnimmt
if (incoming$ = "LedLeicht") then ... :)
Dann lernt man mühevoll C und ist heute wieder fast bei Basic
mir solls egal sein, man muss ja nicht alles mitmachen, ich kann
einigermaßen deutsch, lerne deswegen freiwillig doch nicht alle
Mundarten und Dialekte.
Wers braucht solls machen, z.B. Spätihändler am Prenzelberg ->
schwäbisch.
Joachim B. schrieb:> if (incoming$ = "LedLeicht") then ... :)>> Dann lernt man
... dass man die Warnungen des Compilers liest/behandelt und nicht
unterdrueckt.
leo
Autor: Joachim B. (jar)
>also ich kommen von Basic ganz früher und wenn man>if (incoming == "LedLeicht") dem ein $ spendiert und ein = wegnimmt>if (incoming$ = "LedLeicht") then ... :)>Dann lernt man mühevoll C und ist heute wieder fast bei Basic
Das ist übrigens ein großer Irrtum vieler Informatiker und Techniker,
nämlich das Komplexität etwas Gutes sei.
Nein, so ist es nicht: Die Dinge müssen einfach und verständlich sein.
Nicht umsonst war Basic so erfolgreich ( es wurde übrigens an einer Uni
von Informatikern entwickelt, die es den technisch ahnungslosen
Wirtschaftwissenschaftlern ermöglichen sollte, auch einfache Software zu
schreiben ). Der Erfolg war wie bei Python oder Arduino durchschlagend.
>> if(!strcmp((char *)incoming, "LedLeicht")) {
Vielfach ist diese Art von C-Code ein Tribut an die Mangelhaftigkeit der
Maschinen aus früheren Tagen und diese Tage sollte irgendwann vorbei
sein. Umständlichkeiten wie die Obige sollten in der heutigen Zeit von
der Maschine erledigt werden ( a.k. Compiler ), den darin sind die
Maschinen viel besser als die Menschen.
Ansonsten kann ich dieses Buch empfehlen:
https://www.oreilly.de/buecher/120174/9783897215672-weniger-schlecht-programmieren.html
Dort sagen die besten Programmierer: Code muss so gut lesbar wie ein gut
geschriebenes Buch sein.
Beste Grüße,
euer Softwarearchitekt