Blinkenlights

Nachdem ich ja bekanntermaßen schon lange Blinkedinger baue, hier nun die moderne Variante davon: Blinkenlights.
Die Technik schreitet ja unaufhaltsam voran, die LEDs werden bunter, die Controller können immer mehr und für etwas Geld kann man sich auch die Arbeit ersparen, eine 32x32 RGB-LED Matrix zu fädeln, also was bleibt da als Konsequenz übrig: ich mußte mal wieder Blinkedinger bauen.

Die kleine Matrix

Man nehme also eine fertige 32x32 RGB-LED-Matrix und einen passenden Controller. Hier ein STM32F407 auf einem Discovery-Kit. Anzuschliessen ist das ganze auch recht einfach, man muß nur ein paar Portbits vom Controller auf die Eingänge der Matrix legen. Den Rest macht die Software (und die DMA-Einheit des Controllers). Verwendet habe ich nur den Port E, welches Bit auf welchen Pin der Matrix geht, kann man der "config.h" aus dem Quelltext entnehmen. Für die Firmware habe ich den Compiler und ein Demoprojekt von der Webseite von Freddie Chopin verwendet, einen Teil der Initialisierung habe ich mir von dem Projekt Peridiummm abgeschaut. Besonders praktisch an dem STM32F407: da ist ein Hardware-Zufallsgenerator mit drin, optimal für so ein Blinkeding.
Hier also der Quelltext für den STM32F407: Sourcecode
Die "Fischchen" im Video sind übrigens eine reine Erfindung der Kamera, in Echt sieht man die nicht.

Die große Matrix

Weil das ja so einfach geht, hab ich 4 von diesen Modulen (die etwas größere, dafür kostet es weniger, Ausführung) zu einer 64x64-Matrix zusammengeschraubt. Testweise funktioniert das auch mit dem Controller von der kleinen Matrix, wie hier in den Bildern zu sehen. Da der aber nur für eine 32x32-Matrix gemacht ist, sieht man damit erstmal nur 4 mal das gleiche Bild. Da der STM32F407 mit dem Multiplexen der kleinen Matrix (immerhin 64 Graustufen pro Farbe sind da drin, also 256K Farben) ziemlich ausgelastet ist, plane ich den Controller für die große Matrix mit einem FPGA zu realisiern. Ist aber noch nicht fertig, daher der Testaufbau mit dem kleinen Controller.

Inzwischen ist auch die "richtige" Version (mit FPGA) fertig:

Da ist auch ein Ethernet-Anschluß dran, irgendwann einmal will ich damit nicht nur die eingebaute Demo laufen lassen können, sondern auch über Ethernet den Framebuffer beschreiben, damit kann man dann z.B. Filmchen abspielen oder einfach nur bequem (ohne ständig den Controller flashen zu müssen) eine neue Demo programmieren.

Als Controller-Board verwende ich hier das Xynergy-Board, mit einem Spartan-6 und einem STM32F217 drauf.

Von den Ressourcen des FPGA ist hier nur sehr wenig benutzt, dafür macht es dem FPGA auch keine Mühe, die LED-Matrix mit 8 Bit pro Farbe zu betreiben. Auf dem Board ist der externe Adress- und Datenbus des STM32F217 direkt an das FPGA angeschlossen, so ist es auch ziemlich einfach, den Bildspeicher zu beschreiben.
Hier die Quelltexte: C-Sourcecode, VHDL-Code
Diese Version ist auf der Basis eines vom STM32CubeMX generierten Projektes entstanden, wie ich an anderer Stelle schon gemeckert habe, ist dieser generierte Code nicht immer voll funktionsfähig: Es ist schon LwIP und FreeRTOS drin, aber es läuft noch nicht. Hier habe ich inzwischen eine neue Variante der LwIP-Integration (diesmal mit ChibiOS) liegen, diese funktioniert sogar. Es kann sich also nur noch um einen Zeitraum von mehreren Jahren handeln, bis ich mal den Framebuffer per Ethernet-Verbindung beschreiben kann.

nochmal die Bilder in groß
hier die Videos zum selber probieren
Zurück ... und ein Zaehlpixel hab ich auch :-)