Go Down

Topic: testbericht zum WS2812 (Read 32 times) previous topic - next topic

uwefed


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

dischneider

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
using arduino leonardo
--
tomorrow today will only be yesterday, so live your life today!

AgentTil

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

There are only 10 types of people in the world: Those who understand binary, and those who don't.

Eisebaer

hi,

kein problem, du mußt dann nur das:
Code: [Select]
         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

uwefed


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

Ich glaube nicht, daß die Bibliothek zur Ansteuerung des WS2812 mit dem Arduino DUE funktioniert.
Du mußt Dir wahrscheinlich eine Ansteuerung selbst schreiben. Auf alle Fälle mußt Du den 3,3V Ausgang des DUE auf 5V bringen.

Die Max mögliche Länge des Strips hängt einzig von der gewollten Wiederholrate ab. Bei 30 neuen Daten pro Sekunde sind ca 1000 LEDs möglich. Wenn Du 2400 in einem Strang verwendest dann kannst Du ca alle 80mSec neue Daten auf die Strips schreiben. Bei einer Wohnzimmerbeleuchtung ist ein dynamische Lichtgestaltung mit schnellen Wechseln eigentlich nicht erforderlich.

Du weißt schon, daß 2400 Stück WS2812 144A brauchen und das bei 5V 720W sind wenn alle LED weiß leuchten. Es sind natürlich weniger wenn nur ein Teil oder nur bestimmte Farben leuchten.
Dir ist schon bewußt, das das eine Stadion-Tageslicht-Beleuchtung in Deinem Wohnzimmer wird?

Grüße Uwe

Go Up