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

hi,

naja, til hat geschrieben, daß er schon viel zu dem thema gelesen hat, also ist ihm hoffentlich klar, daß er auch 10.000 WS2812 mit einem uno steuern kann. wenn er also meint, 2400 nicht mit einem zu schaffen, will er wohl verläufe regeln, und das wird mit nur einem uno nicht flüssig laufen.
til, ich hab' hier eine biblothek, die bis zu acht pins ansteuern kann, aber Du machst einen denkfehler: das timing bein WS2811 ist so eng, daß das rausschicken der befehle "in einem rutsch" erfolgen muß. also erst alles, was dieser braucht, an den ersten pin, dann wird der zweite pin abgearbeitet usw..
also der gleiche effekt, als ob Du gleich alles in einem rausschreibst.
der DUE ist etwa fünfmal so schnell, also schickt er die daten fünfmal so schnell, und das versteht der WS2811 nicht, der muß die daten fast mikrosekundengenau kriegen. also eine library für einen DUE suchen, oder eine für den raspberry.

gruß stefan
Logged

Europe / Germany
Offline Offline
Sr. Member
****
Karma: 11
Posts: 345
keep it simple
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hi,

hat von Euch jemand schonmal mehr als 1m eine Weile weiß leuchten lassen?
Wieviele Meter lassen sich ohne Spannungseinspeisung "unterwegs" am Stück betreiben?
Logged

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

hi,

hab ich noch nicht probiert, und momentan keinen uno zur hand. um das berechnen zu können, müßte man die stärke der leiterbahn kennen.

gruß stefan
Logged

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

Hi,

Danke für die Tipps. Arduino Due hab ich schon lange bestellt.

Irgendwo hab ich auch gelesen, dass die Signalspannung beim ersten LED auch 3.3V betragen kann, die Strecke zwischen den DUE und dem ersten LED darf wohl nur nicht zu lang sein. Ansonsten kommt halt n Pegelwandler rein.

Hab euch mal n Bild von dem Wohnzimmer angehangen.

Ist warscheinlich nicht nötig alle LEDs gleichzeitig mit weiss zu beschalten. Sondern dann halt nur jedes zweite oder dritte.
Allerdings strahlen die LEDs nach oben. Und das Licht kommt nur aus einem 4-6cm großem Spalt.

Die Bildrate für Farbübergänge sind nicht sooo wichtig, natürlich will ich einen flüssigen farbverlauf sehen.

Meint ihr es könnte klappen die 40m an einen Strang zu bauen?

Ein typisches Anwendungsbeispiel in meinem Wohnzimmer wäre abends zum Beispiel:
- Leinwand unten, Licht in Abschnitt III wird nicht gebraucht
- Abschnitt II leuchtet weiß (jede 5. LED)
- Abschnitt I leuchtet weiß (jede 3. LED)

Meine Frau will dann was lesen, dann muss Abschnitt I heller werden, da hier die Couch steht. also Leuchtet jede 2. LED.

Beispiel 2:
ein Farbwechsel soll von Abschnitt I über die Mitte in Abschnitt II bis in Abschnitt III laufen. Also von Links nach Rechts.

Lichtprogramm technisch mach ich mir dazu weniger gedanken, das bekomm ich hin. Nur die Ansteuerung der LEDs, wie am sinnigsten, das macht mir gedanken.

Die Ansteuerung über 3 unterschiedliche PINs würde mir hier am logischsten erscheinen.

Gruß

Til











* wohnzimmer-stip-count.png (65.5 KB, 1590x664 - viewed 96 times.)
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: 1894
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

hi,

Quote
Die Bildrate für Farbübergänge sind nicht sooo wichtig, natürlich will ich einen flüssigen farbverlauf sehen.

diese beiden aussagen widersprechen sich. mit 2400 WS2812 kannst Du die werte nur 12mal in einer sekunde ändern. wenn Du jetzt also zb fließend von rot auf blau ändern willst, wird das deutlich "ruckeln".

flüssig wird das erst ab drei UNOS, aber ist dann unter umständen nicht trivial. ein lauflicht, das von einem bereich in den nächsten übergeht, muß überlegt programmiert werden. wenn so etwas nicht nötig ist, ist es leicht.

gruß stefan
Logged

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

hi,

was sind wir doch für deppen.
keiner denkt an den speicherbedarf. pro LED 3 byte. das wird ein uno nicht schaffen, auch drei nicht.
ein ATmega1284 müßte gehen. 5€.

gruß stefan
Logged

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

es scheint als habe ich das Loesungsproblem gefunden.
schaut mal hier:
http://www.pjrc.com/teensy/td_libs_OctoWS2811.html

bis zu 8 Strips an einem Teensy 3.0. Der Due hat ebenfalls DMA. Könnte ich das evtl. portieren?

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: 1894
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

ja, das hab' ich auch gefunden, wie ich ws2811 und raspberry gesucht habe. eine schöne lösung, und mit der arduino IDE zu programmieren. am günstigsten hab' ich's hier gefunden:

http://www.ebay.de/itm/Teensy-3-0-USB-Entwicklungs-Board-32bit-ARM-Cortex-M4-MK20DX128VLH-Original-PJRC-/261116450779?pt=Wissenschaftliche_Ger%C3%A4te&hash=item3ccbc0d7db

auf dem DUE kann diese library nicht laufen.

gruß stefan


Logged

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

Ich hab noch immer keine WS bestellt smiley-sad

Aber: die Bibliothek kann doch Ports initialisieren, hat das jetzt schon mal jemand *getestet*?

Code:
  FastSPI_LED.setPin(PIN);
    FastSPI_LED.init();
  FastSPI_LED.start();

initialisiert das Ganze, also kann der PIN übergeben werden
Was passiert, wenn man im Sketch mit

Code:
FatsSPI_LED.stop();

das ganze beendet und auf einem anderen Port neu initialisiert??

Eventuell noch mit verschiedenen Längen diese anpassen (FastSPI_LED.setLeds).

Das einzige Problem könnte die Verzögerung sein, die dann zwischen den Strängen entsteht, aber ist das ein Problem?

Und @Til: Wenn du deine Beleuchtung zonenabhängig machst, willst du dann die LED einzeln ansprechen können? Ansonsten könnte man ja auch Stränge parallel betreiben?

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

Hi, das ist glaub ich auch ne Idee.
Kannst du abschätzen wie lange die Umschaltzeit ist?
Die LEDs sollen natürlich einzeln steuerbar sein.
parallel wird wohl nicht klappen, wie soll denn dann ein farbwechsel laufen?

Aber nochmal ne Frage, warum soll man OctoWS2811 nicht auf den DUE portieren können? der DUE kann doch ebenfalls DMA.

Til
Logged

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

Offline Offline
Edison Member
*
Karma: 21
Posts: 1419
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

diese beiden aussagen widersprechen sich. mit 2400 WS2812 kannst Du die werte nur 12mal in einer sekunde ändern. wenn Du jetzt also zb fließend von rot auf blau ändern willst, wird das deutlich "ruckeln".
Wieso sollte das denn Ruckeln? Am Ende ist doch die Zeit für den Farbverlauf entscheidend. Der größte "Abstand" bei einer Grundfarbe sind 256 Schritte (von 0 auf 255), das wäre dann in 21,3 Sekunden zu machen. Bei einer immer noch vertretbaren Schrittweite von 2 kommt man schon auf knapp 10 Sekunden.
Problematisch wird es also erst bei sehr schnellen Farbwechseln, die nicht "springen" sollen.

Der Hinweis mit dem Speicher ist allerdings gut.
Logged

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

hi,

Du hast noch nicht verstanden, wie die WS2811 arbeiten.

man schickt bits an die chips, und zwar in dieser form:
entweder
0,25 mikrosekunden strom ein,
1 mikrosekunde strom aus, das heißt 0.
oder
0,6 mikrosekunden strom ein,
0,65 mikrosekunden strom aus, das heißt 1 (toleranz 150 nanosekunden).

und das muß in Deinem fall ohne pause in einem rutsch für alle 2400*3 leds passieren. daher auch die berechnung der zeit, die man braucht, um einen streifen mit 2400 rbgLEDs zu beschreiben:
2400* 3 * 8Bit * 1,25 mikrosekunden = 72.000 mikrosekunden, also 13,8mal pro sekunde
der arduino läuft mit 16 millionen takten pro sekunde, er muß also alle paar takte den strom ein- oder ausschalten. und mittendrin auch noch die richtigen bits an die richtige stelle weiterschieben. das geht nur, wenn man direkt mit diesen takten arbeitet, und das ist der code, den ich oben reingeschrieben hab.
 
Code:
"            LDI %[bits], 4"    "\n"
"            BRCC L13" "\n"
"            RJMP L5" "\n"
"    H1:   NOP" "\n"
"            NOP" "\n"
"            OUT %[portout], %[downreg]" "\n"

manche dieser assemblerbefehle brauchen einen takt, manche mehrere. NOP heißt, daß er einen takt nichts machen soll (sind also reserven da smiley-razz).
BRCC und RJMP sind sprungbefehle, mit OUT schreibt er wohl den inhalt eines prozessorregisters in einen bestimmten port(pin).
alleine wegen der unterschiedlichen taktgeschwindigkeit der beiden prozessoren kann man nicht einfach umschreiben. außerdem sind es zwar beides ARM-prozessoren, aber ob der assembler-befehlssatz gleich ist, ist auch nicht sicher.

gruß stefan
Logged

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

Quote
Wieso sollte das denn Ruckeln

weil man bei einer frequenz von 13,8 eben ein ruckeln sieht, oder man macht diese wechsel sehr langsam. 10 sekunden für einen farbwechsel sind eben sehr viel, stell Dir als beispiel so ein nightrider-licht vor.

gruß stefan
Logged

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

Hallo Eisbaer,

wieso 16MHz?
Der DUE rennt doch mit 84MHz?
genuegend Zeit die Pins zu wechseln, und wieder zurueckzuschalten, oder?

Til
Logged

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

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

Nein, genau das eben nicht.
Das Timing muss passen, die Daten müssen an die Kette im 125us-pro-Bit-Rhytmus, ohne Pause bis zum Reset (anzeigen).
Da passt ein umschalten in sauberen Prozessorzyklen kaum, es sei denn, du programmierst das in Assembler selbst.

Mein Ansatz war: Daten komplett an Kette raus, falls möglich Port wechseln, nächste Kette.
Oder eben, wenn die Wechsel immer gleich von links nach rechts gehen, parallel laufende Ketten gleichzeitug versorgen.

Dirk

Logged

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

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