Pages: 1 2 [3] 4 5 ... 15   Go Down
Author Topic: testbericht zum WS2812  (Read 30487 times)
0 Members and 1 Guest are viewing this topic.
Wien
Offline Offline
Edison Member
*
Karma: 28
Posts: 1928
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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
Logged

Wien
Offline Offline
Edison Member
*
Karma: 28
Posts: 1928
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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
Logged

Forum Moderator
BZ (I)
Online Online
Brattain Member
*****
Karma: 271
Posts: 21879
+39 349 2158303
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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.
http://www.nooelec.com/files/WS2811.pdf

* When the refresh rate is 30fps, low speedmodelc
ascade number are not less than 512 points, high
speed mode not less than1024 points.
* Send data at speeds of up to 400 Kbps and 800
Kbps two patterns

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.

Quote
ich hab' eine bibliothek gefunden, die diese streifen mit 8MHz ansteuern kann,
Welche Bibiothek ist das?

Grüße Uwe
« Last Edit: February 22, 2013, 12:22:36 pm by uwefed » Logged

northern germany
Offline Offline
Jr. Member
**
Karma: 2
Posts: 94
Ausbildung: Funkmechaniker, Systemadministrator
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ä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
Logged

using arduino leonardo
--
tomorrow today will only be yesterday, so live your life today!

Wien
Offline Offline
Edison Member
*
Karma: 28
Posts: 1928
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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
Logged

Wien
Offline Offline
Edison Member
*
Karma: 28
Posts: 1928
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

jetzt wo ich's nochmal lese, uwe. ich meinte einen 8MHz chip verwenden, die Ansteuerung muß natürlich gleich schnell bleiben.

gruß stefan
« Last Edit: February 22, 2013, 06:07:20 pm by uwefed » Logged

Forum Moderator
BZ (I)
Online Online
Brattain Member
*****
Karma: 271
Posts: 21879
+39 349 2158303
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ä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
Logged

Forum Moderator
BZ (I)
Online Online
Brattain Member
*****
Karma: 271
Posts: 21879
+39 349 2158303
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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
Heute (Nacht) interssiert es mich nicht mehr; nach dem Wochenende geren.
Grüße Uwe
Logged

Forum Moderator
BZ (I)
Online Online
Brattain Member
*****
Karma: 271
Posts: 21879
+39 349 2158303
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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
« Last Edit: February 22, 2013, 06:07:45 pm by uwefed » Logged

Wien
Offline Offline
Edison Member
*
Karma: 28
Posts: 1928
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Logged

Forum Moderator
BZ (I)
Online Online
Brattain Member
*****
Karma: 271
Posts: 21879
+39 349 2158303
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

northern germany
Offline Offline
Jr. Member
**
Karma: 2
Posts: 94
Ausbildung: Funkmechaniker, Systemadministrator
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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
Logged

using arduino leonardo
--
tomorrow today will only be yesterday, so live your life today!

Westerwald
Offline Offline
Newbie
*
Karma: 0
Posts: 12
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Logged

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

Wien
Offline Offline
Edison Member
*
Karma: 28
Posts: 1928
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

hi,

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

Forum Moderator
BZ (I)
Online Online
Brattain Member
*****
Karma: 271
Posts: 21879
+39 349 2158303
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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
Logged

Pages: 1 2 [3] 4 5 ... 15   Go Up
Jump to: