Fragen zum Projektstart zu ATtiny85 und WS2812B

Hallo,

ich habe vor eine kleines Netz aus Lampen zu bauen und würde mich über eine Art Hilfestellung freuen :).

Ich möchte jeweils eine Lampe aus mit einem ATtiny85 und ein paar WS2812B bauen. Die Lampen werden über Kabel von einem Master-Controller über einen Bus angesteuert und wandeln quasi nur die empfangenen Daten in Steuersignale für die WS2812B um. Hierzu habe ich ein paar Fragen:

  • Welchen Bus würdet ihr mir empfehlen für die Kommunikation zwischen Master und ATtiny, die Lampen werden wohl Maximal 3 Meter weit auseinander stehen also ist die Übertragungsweite kleine 5 Meter würde ich sagen?
  • Eignet sich der ATtiny85 für mein Vorhaben?
  • Ich habe gelesen das der Attiny85 intern bereits auf 16 MHz laufen kann, das sollte doch für die Nutzung der Fast_SPI Bibliothek langen oder?

Ich würde mich über Tipps für mein Vorhaben freuen.
Beste Grüße,
Nils Minor

Welchen Bus würdet ihr mir empfehlen für die Kommunikation zwischen Master und ATtiny, die Lampen werden wohl Maximal 3 Meter weit auseinander stehen also ist die Übertragungsweite kleine 5 Meter würde ich sagen?

Eine RS-485-Verbindung dürfte sich hier anbieten.

Eignet sich der ATtiny85 für mein Vorhaben?

Ich würde ihn nicht gerade als ideal ansehen, denn er hat keinen UART eingebaut, was die Kommunikation nicht gerade vereinfachen wird. Du kannst zwar eine Software-Emulation laufen lassen, aber das dürfte die sehr zeitkritische Kommunikation mit den WS2812 etwas fest stören.

Ich habe gelesen das der Attiny85 intern bereits auf 16 MHz laufen kann, das sollte doch für die Nutzung der Fast_SPI Bibliothek langen oder?

Intern läuft er mit 1MHz oder 8MHz, wenn Du ihn mit 16MHz takten willst, musst Du einen externen Quarz oder Resonator verwenden. Den würde ich Dir sowieso empfehlen, damit Du das Taktsignal für die WS2812 mit genügender Genauigkeit hinkriegst.

hi,

ich würde zuallererst mal im netz suchen, was es zu fastled und attiny zu finden gibt.

aber überlege doch mal, ob es nicht besser wäre, alles auf "einem streifen" laufen zu lassen. Du brauchst ja eine verbindung zwischen den lampen. das könnte doch gleich eine 3-adrige leitung sein, mit +, -, und dem datensignal des ws2812.

zwischen den lampen baust Du in die leitung jeden meter einen "blinden" ws2812er, der nur das datensignal immer wieder verstärkt. damit brauchst Du nur einen 328er am anfang und sparst Dir die ganze kommunikation.

gruß stefan

Attiny85 und 16MHz geht ohne externe Komponenten. Dabei wird die interne PLL Uhr genutzt. Würde aber defenitv mit einem externen Quarz/Resonator nutzen. Die Timings von den WS2812B sind sehr knapp!

Hast du bereits versucht, die WS2812B direkt anzusteuern? Müsstest aber jedoch das Steuersignal eventuell verstärken.

Eisebaer:
zwischen den lampen baust Du in die leitung jeden meter einen "blinden" ws2812er, der nur das datensignal immer wieder verstärkt. damit brauchst Du nur einen 328er am anfang und sparst Dir die ganze kommunikation.

gruß stefan

Ein blinder WS2812 heißt WS2811. Für jeden blinden Ws mußt Du auch Daten schicken.
Grüße Uwe

hi,

Ein blinder WS2812 heißt WS2811. Für jeden blinden Ws mußt Du auch Daten schicken.

nein, ich meinte einen blinden WS2812. die hat er schon zu hause, und mit blind meinte ich, daß er immer nur mit (0, 0, 0) beschickt wird, also nie leuchtet.

gruß stefan

So schnell kann man sich irren.
Das was Du sagst hat Sinn.
Grüße Uwe

Hi,

erstmal danke für euer Feedback, hetzt weiß ich wo ich dran bin.
Das mit den Blinden LEDs ist eine gute Idee. Langt es wenn man jeden meter eine blinde LED macht oder muss es enger beieinander liegen?

Wie viele LEDs kann ich denn ohne "große" Verlustzeit hintereinander schalten? Also das die Lampen im gleichen moment ihre Farbe ändern?

Ich glaube ich werde es so machen, mir ist die Anzahl der Lampen zwar noch unbekannt, aber sie müssen nur passiv beleuchten da werde ich wohl nicht so viele benötigen.

Danke für euer Feedback und Beste Grüße,

Nils

Die 2812er brauchen 30 µs pro LED.
Ich habe 7,2 ms gemessen, um 240 LEDs einmal komplett zu schreiben. Latenzen < 20ms sind praktisch nicht als solche wahrnehmbar. Dir geht auf jeden Fall der RAM aus, bevor Du Sorgen wegen Latenzen bekommst. :stuck_out_tongue:

edit: Entspricht nicht der Spezifikation, aber ich habe auch schonmal mit 2m ungeschirmten Kabel zwischen den LEDs gearbeitet - ohne Probleme.

Hi,

toll das klingt super so werde ich es auch machen. Wenn ich also nach deinen Angaben gehe kann ich ohne weiteres 500 Stück hintereinander schalten ohne Latenzen zu bemerken? Das würde für mich langen.

Super danke für eure Hilfe.

hi,

denk' dran, daß der UNO nur 2k speicher hat. 500 RGB-leds brauchen 1,5k, dazu das was die fastSPI braucht und auch noch Dein programm. das wird eng und eventuell einen mega erfordern.

gruß stefan

500 LEDs am Uno geht, macht aber nicht wirklich Spaß...

Warum? Früher oder später willst Du schicke Überblendeffekte und Fades zwischen den frames - wofür Du den Bildspeicher mehrfach vorhalten musst, zumindest 2x für Start- und Zielframe. Als nächstes wir dir auffallen, dass vorberechnete Sin und Log Tabellen die Berechnung signifikant beschleunigen - die brauchen auch RAM.

Und faden mit statischen Bildern ist außerdem so eine Sache bei 8 Bit Farbtiefe - wenn es wirklich butterweich aussehen soll, können die frames per second nicht hoch genug sein. Bei 500 LEDs an einer Datenleitung kommst Du theoretisch auf maximal 67 Hz, praktisch vielleicht auf die Hälfte, da Du die Daten für 500 LEDs auch in Echtzeit berechnen musst.

Fazit: Ein Mega mit 8 kB RAM macht auf jeden Fall Sinn. Die aktuelle (schnellere, speichersparendere und flexiblere) Version von FastSPI_LED(2) heißt übrigens FastLED, hier Download und die Community dazu: https://plus.google.com/communities/109127054924227823508

Wenn es richtig schnell gehen soll, empfehle ich Parallelisierung mittels eines Teensy 3.0 + OctoWS2811 lib.
https://www.pjrc.com/teensy/td_libs_OctoWS2811.html

Damit kannst Du parallel mit 8 Datenleitungen die jeweils 1/8 der LEDs speisen gleichzeitig arbeiten = 64 mal so schnell, wie alle an einer Leitung... EDIT 8x schneller
Viel Spaß und Grüße, Helmuth

Helmuth:
Damit kannst Du parallel mit 8 Datenleitungen die jeweils 1/8 der LEDs speisen gleichzeitig arbeiten = 64 mal so schnell, wie alle an einer Leitung...

Das Verstehe ich jetzt nicht wieso die Ausgabe der Daten an 8 Pins (mit konstanter Geschwindigkeit da der WS2812 nur eine Übertragungsgeschwindigkeit kennt) die Daten 64 mal schneller verschicken soll.
Grüße Uwe

Hey Uwe,
danke, sorry, Denkfehler meinerseits.
Ja, die Übertragunggeschwindigkeit ist fix. Man muss jedes Mal den gesamten Strip schreiben, also die Daten für alle LEDs senden. Kürzerer Strip = weniger LEDs = weniger Daten = proportional schneller.
Wenn man nur 1/8 der Daten sendet und das auf 8 Leitungen parallel, verachtfacht sich die Geschwindigkeit.

Gruß Helmuth

Wenn man nur 1/8 der Daten sendet und das auf 8 Leitungen parallel, verachtfacht sich die Geschwindigkeit.

Theoretisch stimmt das, aber kannst Du das enge Timing des WS2812 noch einhalten, wenn Du acht Leitungen gleichzeitig bedienen willst?

hi,

naja, laut beschreibung kann der teensy das...

gruß stefan

Der Teensy ist auch keine AVR, sondern bereits ein AMR :wink: Der Due sollte dabei genauso wenig Probleme haben. Aber bei einem ATtiny85 ohne Quarz mit 16MHz glaube ich da nicht wirklich dran. Speichertechnisch müsste da dann bereits sowieso ein Mega ran. Ich würde aber eher überlegen, ob ich für eine "Hintergrundbeleuchtung" soviele Leds überhaupt brauche.

Ich habe mal ein Bild angehangen, um zu zeigen, wo die Lichtausbeute hingeht. Verbaut sind bei diesem Beispiel 7 WS2812B.

2013-09-17 14.43.08.jpg

not sure if this is relevant here as I dont speak German :slight_smile:

I have been working on a 8mhz solution to drive ws2812 leds

http://forum.arduino.cc/index.php?topic=262594.0