Forum: Mikrocontroller und Digitale Elektronik WS2811 RGB Led Signal decodieren.


von Moritz B. (busti)


Angehängte Dateien:

Lesenswert?

Hallo,
Ich habe eine WS2811 LED Strip den ich mit einem AtTiny45 ansteuere. So 
weit so gut...
Nun habe ich aber auch noch einige normale RGB LED Leuchten die ich 
gerne mit in den Strip einbinden würde. Da ich noch einige AtTinys 
herumliegen hatte habe ich mir gedacht, dass man diese doch nutzen 
könnte um das WS2811 Signal zu decodieren um die LEDs anzusteuern.
Um zu testen habe ich erstmal versucht das Signal mit dem Tiny 
weiterzuleiten. Mit eher weniger Erfolg. (Siehe Bilder, oben das Signal 
das von dem ersten Tiny generiert wurde, unten das das das von dem 2. 
Tiny weitergeleitet wurde)
Ich habe dazu diesen Code auf den Tiny hochgeladen:
1
int inPin = 3;
2
int outPin = 4;
3
4
void setup() {
5
  pinMode(inPin, INPUT);
6
  digitalWrite(inPin, HIGH);
7
  pinMode(outPin, OUTPUT);
8
}
9
10
void loop() {
11
  digitalWrite(outPin, digitalRead(inPin));
12
}

Ist es möglich das Signal irgendwie zu decodieren?
Hier ist eine sehr gute Zusammenfassung des WS2811 Treibersignals: 
http://wp.josh.com/2014/05/13/ws2812-neopixels-are-not-so-finicky-once-you-get-to-know-them/

Vielen Dank für eure Antworten
- Busti

von Sascha W. (sascha-w)


Lesenswert?

Hallo,

Also wenn du die WS2811 per per Tiny45 ansteuerst, erzeugst du doch die 
Daten für die LED-Streifen selbst und kennst also auch die RGB 
Ausgangswerte.
Daher verstehe ich nicht, warum du das Signal an den WS2811 jetzt wieder 
decodieren willst? Oder willst du die zusätzlichen LED über das selbe 
Protokoll mit Daten versorgen? Wie werden denn diese LEDs angesteuert?
Das weiterleiten der Daten sollte eigentlich gehen wenn der ATiny nicht 
zu langsam läuft, decodieren dürfte bei den kleinen Zeiten nicht so 
einfach werden. Es wird wohl einfacher sein für die anderen LED einen 
eigenen Bus aufzumachen.

Sascha

von Moritz B. (busti)


Lesenswert?

Ich würde gerne das Verhalten des WS2811 SMD Chips imitieren 
(http://www.adafruit.com/products/1378)
Ich bin nicht besonders gut was SMD löten angeht, der Versand ist teuer, 
ich hatte noch einige tinys und da sie 3 PWM Pins haben wollte ich es 
mal ausprobieren.
Ich könnte sie dann einfach an meinen existierenden LED Strip 
dranhängen.

: Bearbeitet durch User
von Marc V. (Firma: Vescomp) (logarithmus)


Lesenswert?

Sascha Weber schrieb:
> Daher verstehe ich nicht, warum du das Signal an den WS2811 jetzt wieder
> decodieren willst?

 Weil die WS2811 von einem gekauften Kontroller gesteuert werden ?

von ARRRRDUINO! (Gast)


Lesenswert?

Moritz Bust schrieb:
> void loop() {
>   digitalWrite(outPin, digitalRead(inPin));
> }

Sehr subtiler Trollversuch. Das wird eine interessante Diskussion.

von Klaus K. (leo9)


Lesenswert?

@Moritz:
ändere dein Programm mal auf:
void loop() {
  digitalWrite(outPin, 1);
  digitalWrite(outPin, 0);
}

und poste das Ausgangssignal, ich wette die Durchlaufzeit der Schleife 
liegt deutlich über der Bitlänge.

Grüße leo

von Moritz B. (busti)


Lesenswert?

Ja tut sie (~6.5uS)
Mein Denkansatz war, dass wenn man das Treibersignal mit einem AtTiny 
generieren kann könnte man es ja auch mit einem auslesen. Aber selbst 
wenn ich mt Assemblercode arbeite habe ich immernoch eine Zeit von 
62,5nS pro befehl. Das würde wohl nicht ausreichen.

Der Code sollte erstmal nur zeigen ob ich mit dem Tiny überhaupt etwas 
brauchbares erhalte. Und ja ich habe einen gekauften Controller.

: Bearbeitet durch User
von Ben W. (ben_w)


Lesenswert?

die WS2811 sind überraschend tolerant,
ich schaffe die zurzeit sogar mit einem SPI anzusteuern eine Abtastrate 
von 312,5nS sollte doch ausreichen, aber vermutlich ist der tiny dafür 
schlicht zu langsam.

von Cyblord -. (cyblord)


Lesenswert?

Ben W. schrieb:
> die WS2811 sind überraschend tolerant,
> ich schaffe die zurzeit sogar mit einem SPI anzusteuern eine Abtastrate
> von 312,5nS sollte doch ausreichen, aber vermutlich ist der tiny dafür
> schlicht zu langsam.

Da hier von einer Arduino Umsetzung geredet wird, brauchst du dir um die 
native Geschwindigkeit des Tinys noch keine Gedanken zu machen. Das 
wäre, als wenn man über die maximale Geschwindigkeit des Space Shuttle 
reden würde, während es von 100 fußkranken Rentnern mit ihren Rollatoren 
durch die Fußgängerzone geschoben wird.

von Joachim B. (jar)


Lesenswert?

Moritz Bust schrieb:
> Ich habe eine WS2811 LED Strip den ich mit einem AtTiny45 ansteuere.

wenn du den Source hast weisst du was an die LEDs geschickt wird, das 
kannst du per PWM auch an normale RGB LEDs schicken.

Willst du den Bitstrom dekodieren (OK ich kenne mich nur mit WS2812b 
aus, IMHO sind WS2811 die ICs die in WS2812B Leds verbaut sind sollte 
also ähnlich ablaufen) musst du erst den gesammten Bitstrom aufnehmen im 
1,25µs Raster und um die Umschaltung zu erkennen mit min 3-fach 
oversampling könnte knapp reichen, das Ende erkennst du erst nach der 
Pause, Lücke und dann hinterher die 24 Bit Nullen und Einsen rausholen 
für die drei Grundfarben 8 Bit pro Farbe 24 Bit pro LED, von hinten 
versteht sich.

Es müssen wieder genausoviele Bits erkannt werden 0 oder 1 wie 24 x LED 
Anzahl ergibt, dann könntest du Erfolg haben.

Wird aber ne heftige Bitschubserei und Rechnerei, ob dem Tiny da nicht 
die Puste sprich RAM ausgeht?
Die Bits sammeln im Zeitraster von ca. 300-400ns mag ja in ASM noch 
angehen, diese speichern ist RAM abhängig.

Der Rest was für ASM oder C Profis, Echtzeit? eher nicht auf dem Tiny 
oder AVR oder?

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.