Der LED-Strip enthaelt den WS2811. Dieser Chip bedarf ein eigenes Protokoll, dass nicht ohne weiteres auf einem Arduino implementiert werden kann. Ein LED-Strip mit WS2801 koennte mit SPI an den Arduino angebunden werden und deutlich einfacher und schneller angesteuert werden. Dieser Bus braucht aber eine Leitung mehr.
Verwendet wird ein FTDI Morphic-II board. Dieses besteht aus einen kleinen Altera Cyclone II FPGA mit 4000 LEs und einem USB interface IC FT2232HQ.
Code fuer den FPGA kann mit Altera Quartus II Web Edition aus Verilog erzeugt werden. Bei der Compilation/Synthese wird eine Netzliste und eine RBF Bitstream-Datei erzeugt.
Die RBF Datei kann ueber ein Serielles Protokoll ueber USB von einem Computer in den RAM des FPGA geladen werden. Gluecklicherweise existiert eine free software implementierung um den FT2232H Chip anzusteuern (libftdi) und es hat auch schon jemand den Code geschrieben, um eine RBF Datei auf den MorphicII hochzuladen: http://idle-logic.com/wp-content/uploads/2011/03/passiveSerial.zip. Da der FPGA nur RAM enthaelt muss die Firmware bei jeden Powercycle erneut hochgeladen werden. Libftdi enthaelt keine binaeren Blobs und kann somit ueberall ausgefuehrt werden. Insbesondere sollte kann ein RaspberryPI oder eine Wlan Router diese Aufgabe uebernehmen.
Als naechster Schritt muss der Verilog Code zur Ansteuerung des WS2811 implementiert werden. Dabei ist die Schnittstelle zum FT2232H das wesentliche Problem. Dieser Chip emittiert die Daten ueber eine parallele Schnittstelle mit 60MHz, waehrend wir die Daten mit 800kHz an die WS2811 ausgeben wollen.
Eine gute Beschreibung fuer ein aehnliches Problem gibt es hier: http://www.fpga4fun.com/digitalscope_hdl1.html
Hier ist das Repository: https://github.com/plops/led-strip
Das folgende Bildschirmfoto zeigt das generierte 800kHz Signal auf einem Logic Analyzer.