Hallo,
Ich habe eine WS2811LED 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:
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
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.
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 ?
@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
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.
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.
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.
Moritz Bust schrieb:> Ich habe eine WS2811LED 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?