hi, uwe,
Auf die Idee von WS2801 auf WS2811 auszubesser wäre ich nie gekommen.
in der bibliothek ist WS2811 definiert, nur im beispielsketch haben sie drauf vergessen...
gruß stefan
hi, uwe,
Auf die Idee von WS2801 auf WS2811 auszubesser wäre ich nie gekommen.
in der bibliothek ist WS2811 definiert, nur im beispielsketch haben sie drauf vergessen...
gruß stefan
Ja, die Bibiothek hab ich mir auch nicht genau angeschaut.
Grüße Uwe
Aber manchmal hilft lesen, Eisebaer hat das schon im ersten Post dieses Threads geschrieben
LG
Dirk
Hallo,
ich habe letztens beim Arduino Open Space bei uns in Dresden ein paar Sachen gesehen, die ein paar Leute mit den WS2812 LEDs angestellt haben. Es waren 2 Arrys dabei. Einer hatte Stripeabschnitte als Matrix verschaltet. Die Datenleitungen linear, also quasi zickzack und Die Versorgungsspannung E-förmig in die Stripes eingespeist, so das die Stücke parallel geschaltet sind.
Ein 5V 30A Netzteil lief permanent an der "Kotzgrenze"
Das Ganze hat er mit der Glediator-Software gefüttert. Sieht jedenfalls gigantisch aus. Am brilliantesten sehen Streifen mit Siliconbeschichtung aus. Das sieht wie eine Lackierung aus. Werde mir bei Gelegenheit auch mal welche bestellen
Gruß Gerald
dischneider:
Aber manchmal hilft lesen, Eisebaer hat das schon im ersten Post dieses Threads geschrieben
LG
Dirk
Ihr habt mich ertappt.
(hoffentlich war das ein Teil meiner 0,36733% Fehlerrate )
Grüße Uwe
hi,
kein problem, uwe, das war kein fehler, sondern eine unachtsamkeit. nachdem ich nicht Deine frau bin, wird das einfach übergangen...
gruß stefan
hi,
frage an uwe:
ich hab' eine bibliothek gefunden, die diese streifen mit 8MHz ansteuern kann, habe aber keine möglichkeit (chip), das hier auszuprobieren. hast Du sowas herumliegen?
ich baue gerade für einen freund so einen streifen mit atmega328P und quarz auf 16MHZ. wär praktisch, diesen quarz nicht verbauen zu müssen. muß mir gleich attiny85er bestellen, nur blöd, daß guloshop nicht nach ö liefert.
gruß stefan
noch eingefallen:
wenn ich diese biblothek richtig verstehe, kann man auch bis zu 8 streifen unabhängig ansteuern. ist zwar momentan nicht mehr interessant, die idee von oben hab' ich verworfen, aber prinzipiell natürlich paktisch.
noch ein gruß, noch ein stefan
Eisebaer:
hi,frage an uwe:
ich hab' eine bibliothek gefunden, die diese streifen mit 8MHz ansteuern kann, habe aber keine möglichkeit (chip), das hier auszuprobieren. hast Du sowas herumliegen?ich baue gerade für einen freund so einen streifen mit atmega328P und quarz auf 16MHZ. wär praktisch, diesen quarz nicht verbauen zu müssen. muß mir gleich attiny85er bestellen, nur blöd, daß guloshop nicht nach ö liefert.
gruß stefan
Hallo Stefan.
Soweit ich das Datenblatt studiert habe, gibt es 2 Betriebsmodi beim 2811 wobei beim 2812 nur der langsamere möglich ist da das Pin zur auswahl nicht herausgeführt ist und fix verschaltet ist.
Ein Bit ist immer 2,5µS bzw 1,25µS lang. Da Verhältnis im langsamen Modus von H zu L ist für ein 1-Bit 0,5 zu 2,0 und für ein 0-Bit 1,2 zu 1,3µS. Alle Zeiten auf eine Genauigkeit von 0,15µS.
Da kann ich mir nicht vorstellen wie den WS2811/12 schneller ansteuern zu können.
ich hab' eine bibliothek gefunden, die diese streifen mit 8MHz ansteuern kann,
Welche Bibiothek ist das?
Grüße Uwe
Ähm, wenn der PIN nicht herausgeführt ist und fix verschaltet, dann gehen nur die 800 kbaud, oder?
Und ob der uC mit 8 oder 16 MHz läuft dürfte doch nur für das Timing spannend werden, arbeiten die Bibliotheken mit Zeiten oder Taktzyklen?
Bei ersterem sollte der Takt doch egal sein?
Nur wie empfindlich gegen Taktschwankungen ist das Ganze, wenn man einen ATTiny mit internem Takt fährt?
Wollte auch testen, bin noch nicht zum bestellen gekommen ...
Liebe Grüße
Dirk
hi, uwe,
ich wußte nicht, ob's Dich interessiert, und ich muß da noch was dazu erklären.
erstmal:
http://rurandom.org/justintime/index.php?title=Controlling_WS2811_led_strings_at_800kbit/s_without_external_oscillator
hab die ws2811_8.h-datei in die libraries gelegt und in einem leeren sketch includiert.
fehlermeldung: no _delay_us declared in this scope oder so ähnlich. diese funktion hab ich in einer delay.h im arduino-verzeichnis gefunden (gibt 2). die delay.h ins sketch-verzeichnis gelegt und auch includiert (mit " -zeichen). jetzt läßt es sich kompilieren, aber wie gesagt, kein chip zur hand. außerdem muß ich mir noch ansehen, ob dieses struct CRGB dort genauso funkt wie in der fast_SPI.
gruß stefan
jetzt wo ich's nochmal lese, uwe. ich meinte einen 8MHz chip verwenden, die Ansteuerung muß natürlich gleich schnell bleiben.
gruß stefan
dischneider:
Ähm, wenn der PIN nicht herausgeführt ist und fix verschaltet, dann gehen nur die 800 kbaud, oder?
Und ob der uC mit 8 oder 16 MHz läuft dürfte doch nur für das Timing spannend werden, arbeiten die Bibliotheken mit Zeiten oder Taktzyklen?
Bei ersterem sollte der Takt doch egal sein?
Nur wie empfindlich gegen Taktschwankungen ist das Ganze, wenn man einen ATTiny mit internem Takt fährt?
Wollte auch testen, bin noch nicht zum bestellen gekommen ...Liebe Grüße
Dirk
Ich glaube mich zu erinnern daß es 400kBaud sind.
Grüße Uwe
Eisebaer:
hi, uwe,ich wußte nicht, ob's Dich interessiert, und ich muß da noch was dazu erklären.
erstmal:
Driving the WS2811 at 800 kHz with an 8 MHz AVR - Just in Time
hab die ws2811_8.h-datei in die libraries gelegt und in einem leeren sketch includiert.
fehlermeldung: no _delay_us declared in this scope oder so ähnlich. diese funktion hab ich in einer delay.h im arduino-verzeichnis gefunden (gibt 2). die delay.h ins sketch-verzeichnis gelegt und auch includiert (mit " -zeichen). jetzt läßt es sich kompilieren, aber wie gesagt, kein chip zur hand. außerdem muß ich mir noch ansehen, ob dieses struct CRGB dort genauso funkt wie in der fast_SPI.gruß stefan
Heute (Nacht) interssiert es mich nicht mehr; nach dem Wochenende geren.
Grüße Uwe
Eisebaer:
jetzt wo ich's nochmal lese, uwe. ich meinte einen 8MHz chip verwenden, die ansteuerung muß natürlich gleich schnell bleiben.gruß stefan
Da habe ich Dich wirklich falsch verstanden.
Ich weiß nicht wie kritisch der WS2811/12 auf Timingungenaugikeiten reagiert. Ein interner RC-Taktgenerator ist viel ungenauer als ein Resonator oder ein Quarz.
Grüße Uwe
uwe, Du treibst gerade Deine (natürlich immer noch lächerlich geringe) fehlerquote hoch. die 2812er laufen mit 800.
ich hab' mir jetzt 20 attiny85 bestellt, schlimmstenfalls nehm' ich sie als streusel für kekse.
bestenfalls verwende ich einen für meinen arbeitskollegen, dann bleiben mir immer noch 19 für die kekse. ich kann einfach nicht einen um 2€ kaufen, wenn ich 20 um 22€ krieg'. Ihr solltet mich mal im puff erleben...
gruß stefan
Eisebaer:
uwe, Du treibst gerade Deine (natürlich immer noch lächerlich geringe) fehlerquote hoch. die 2812er laufen mit 800.
auch wenn ichs so unbestimmt formuliere?
Ich glaube mich zu erinnern daß es 400kBaud sind.
Kann man den ATtiny85 wenns sein muß nicht auch mit externen 16 Mega Quarz betreiben?
Gute Nacht nach Wien.
Ist ganz klar mein Fehler, nicht Uwes!
Ich hätte ja dazuschreiben können, dass ich dein vage formulierten Einwand 800kbaud aus dem Datenblatt entnommen habe und mir daher eigentlich ziemlich sicher war ...
Liebe Grüße
Dirk
Hallo zusammen,
erstmal vorweg, vielen Dank für diesen hilfreichen Thread.
Habe mir ebenfalls 2m WS2812 Strips bestellt also 120 LEDs.
Will diese mit dem Arduino Due verbinden. Hab dazu schon extrem viele Seiten gelesen, Interesannt ist für mich das Thema ob ich nicht mehrere Pins für verschiedene Strips verwenden kann.
Für mein Projekt "Wohnzimmerbeleuchtung" brauch ich über 40m Strips. Was dann folglich über 2400 LEDs sind.
Diese an einem Pin zu betreiben erscheint mir ein Ding der Unmöglichkeit. Da ich mit dem Due eine höhere Taktrate habe, müsste ich die Strips doch bei 800kHz auf mehreren Pins parallel betreiben können, oder sehe ich das falsch?
Ich bin ein absoluter Anfänger in Sachen Mircocontroller. Und würde mich echt freuen, wenn Ihr mir bei dem Projekt unter die Arme greift.
Lieben Gruß
Til
hi,
kein problem, du mußt dann nur das:
LD __tmp_reg__, %a[dataptr]+" "\n"
" LSL __tmp_reg__" "\n"
" LDI %[bits], 4" "\n"
" BRCC L13" "\n"
" RJMP L5" "\n"
" H1: NOP" "\n"
" NOP" "\n"
" OUT %[portout], %[downreg]" "\n"
" NOP" "\n"
" RJMP END" "\n"
" L1: SUBI %[bits], 1" "\n"
" BREQ M2" "\n"
" NOP" "\n"
" NOP" "\n"
" OUT %[portout], %[downreg]" "\n"
" LSL __tmp_reg__" "\n"
" OUT %[portout], %[upreg]" "\n"
" BRCC L8" "\n"
" NOP" "\n"
" L15: NOP" "\n"
" NOP" "\n"
" NOP" "\n"
" RJMP L9" "\n"
" M4: LDI %[bits], 4" "\n"
" LD __tmp_reg__, %a[dataptr]+" "\n"
" OUT %[portout], %[upreg]" "\n"
" NOP" "\n"
" NOP" "\n"
" SUBI %[bytes], 1" "\n"
" BREQ H1" "\n"
" LSL __tmp_reg__" "\n"
" BRCS L9" "\n"
" NOP" "\n"
" L16: OUT %[portout], %[downreg]" "\n"
" NOP" "\n"
" L13: OUT %[portout], %[upreg]" "\n"
" LSL __tmp_reg__" "\n"
" OUT %[portout], %[downreg]" "\n"
" BRCC L10" "\n"
" SUBI %[bits], 1" "\n"
" BREQ M4" "\n"
" NOP" "\n"
" NOP" "\n"
" NOP" "\n"
" LSL __tmp_reg__" "\n"
" OUT %[portout], %[upreg]" "\n"
" BRCS L15" "\n"
" NOP" "\n"
" L8: NOP" "\n"
" NOP" "\n"
" NOP" "\n"
" RJMP L16" "\n"
" M2: LDI %[bits], 4" "\n"
" OUT %[portout], %[downreg]" "\n"
" NOP" "\n"
" OUT %[portout], %[upreg]" "\n"
" LD __tmp_reg__, %a[dataptr]+" "\n"
" SUBI %[bytes], 1" "\n"
" BREQ H1" "\n"
" LSL __tmp_reg__" "\n"
" BRCC L16" "\n"
" NOP" "\n"
" L9: OUT %[portout], %[downreg]" "\n"
" NOP" "\n"
" L5: OUT %[portout], %[upreg]" "\n"
" LSL __tmp_reg__" "\n"
" BRCS L1" "\n"
" SUBI %[bits], 1" "\n"
" BREQ M1" "\n"
" NOP" "\n"
" NOP" "\n"
" NOP" "\n"
" OUT %[portout], %[downreg]" "\n"
" LSL __tmp_reg__" "\n"
" OUT %[portout], %[upreg]" "\n"
" NOP" "\n"
" OUT %[portout], %[downreg]" "\n"
" BRCC L4" "\n"
" NOP" "\n"
" L12: NOP" "\n"
" NOP" "\n"
" NOP" "\n"
" RJMP L5" "\n"
" M3: LD __tmp_reg__, %a[dataptr]+" "\n"
" OUT %[portout], %[upreg]" "\n"
" LDI %[bits], 4" "\n"
" OUT %[portout], %[downreg]" "\n"
" SUBI %[bytes], 1" "\n"
" BREQ H2" "\n"
" LSL __tmp_reg__" "\n"
" BRCC L16" "\n"
" NOP" "\n"
" RJMP L5" "\n"
" L10: SUBI %[bits], 1" "\n"
" BREQ M3" "\n"
" NOP" "\n"
" NOP" "\n"
" LSL __tmp_reg__" "\n"
" OUT %[portout], %[upreg]" "\n"
" NOP" "\n"
" OUT %[portout], %[downreg]" "\n"
" BRCS L12" "\n"
" NOP" "\n"
" L4: NOP" "\n"
" NOP" "\n"
" NOP" "\n"
" RJMP L13" "\n"
" M1: LD __tmp_reg__, %a[dataptr]+" "\n"
" OUT %[portout], %[downreg]" "\n"
" LDI %[bits], 4" "\n"
" OUT %[portout], %[upreg]" "\n"
" NOP" "\n"
" OUT %[portout], %[downreg]" "\n"
" SUBI %[bytes], 1" "\n"
" BREQ H2" "\n"
" LSL __tmp_reg__" "\n"
" BRCS L9" "\n"
" NOP" "\n"
" RJMP L13" "\n"
" H2: NOP" "\n"
" NOP" "\n"
" NOP" "\n"
" NOP" "\n"
" END: NOP" "\n"
so umschreiben, daß es zur taktfrequenz des DUE paßt, und dann natürlich auch noch an die anzahl der verwendeten strips anpassen.
was ich damit sagen will:
das ist KEINE sache, die Du mit einem sketch lösen kannst, und Du wirst hier im (deutschsprachigen) forum niemanden finden, der das kann. nimm Dir zwei UNOs, lass die beiden miteinander reden und zwei streifen steuern. einer davon ist der "master". dann nimm den anderen, den "slave", aus dem UNO raus, steckst ihn auf ein breadboard, und einen neuen ATMega328 mit bootloader um 3€ in den sockel des uno. dann kannst Du drei miteinander reden lassen. wenn Du dann, sagen wir mal, fünf hast, bist Du fertig. fünf chips, die zusammen 2400 rgbLEDs steuern können. anders wirst Du das nicht lösen können.
gruß stefan