Richtig. Man muß alle 1250ns einen Puls von entweder 400ns oder 850ns erzeugen. Die aufgeschriebenen Toleranzen von 150ns sind recht großzügig, Das mit Bitbanging zu erzeugen, ist aber sportlich. Man muß ja nicht nur das Timing erzeugen, sondern auch noch die Bits aus den Bilddaten extrahieren.
Da kommt die Idee ins Spiel, die SPI-Hardware zu benutzen, um die CPU zu entlasten. Wenn man als SPI-Clock 2,5 MHz benutzt, dauert ein Bit 400ns. 3 Bits sind dann 1200ns, gut in der Toleranz der 1250ns. Um ein Bit als 0 zu kodieren, schickt man binär 100, für eine 1 binär 110. Diese Bitfolgen muß man dann natürlich vorher berechnen und dabei 2 2/3 Farbbits in ein Byte packen. Das ganze macht aber nur dann Sinn, wenn man Hardware-SPI verwendet, besser ist es noch, wenn SPI über ein FIFO verfügt oder DMA verfügbar ist. Vom SPI wird hier nur MOSI benutzt.
Software SPI macht gar keinen Sinn, da kann man auch gleich das richtige Protokoll erzeugen.
Was man auch noch überlegen könnte, ist ein Protokollbit in 4 SPI-Bits zu kodieren. Wenn man die Erfahrungen von Siro berücksichtigt, das eine Bitzeit auch größer als 1250ns funtioniert, sollten auch 1600ns passen. Eine 0 wäre dann 0b1000, eine 1 0b1100. Diese Kodierung könnte man möglicherweise live erzeugen, während die Hardware-SPI läuft.
Das macht keinen wirklichen Sinn. Man hat schon Mühe genug, einen SPI-Controler mit Daten zu füttern. Da man die WS2812 hintereinander schalten kann, ist es auch nicht nötig. 100 Neopixel und mehr sind kein wirkliches Problem, wie andere Projekte zeigen. Das sind dann 12 und mehr Digits.Wenn es dir im mehrere Anzeigen geht könntest du dir einen Atmega oder Atxmega mit mehreren SPI Controllern suchen und damit parallel die Daten raushauen.
MfG Klebwax
Lesezeichen