WS2812 Matrix als HDMI Monitor

Dieser Beitrag wurde am 05.01.2022 aktualisiert.

WAK-LAB Matrix
WAK-LAB Matrix

Das WAK-Lab hatte die Idee von einer LED Matrix als Event Leinwand oder andern Nerd Kram. Das Ganze 2m x 1,3m groß mit 60×33 Pixel. In dem Zusammenhang sind zwei Ansteuerungselektroniken entstanden. Die erste Variante benutzt einen ESP32 um über UDP und DMA die LED’s anzusteuern. Details dazu liegen auf Github. Soweit alles prima.

Nun kam die Frage auf, ob man das direkt als Monitor an einen PC oder andere Videoquelle anschließen kann. Der erste Gedanke war VGA + AD Wandler. Jedoch als das Design fast fertig war, kommt ein Bekannter um die Ecke und sagt “nimm doch HDMI, ist doch eigentlich ganz einfach”. LOL. Okay, das Datenblatt “TMDS Video Interface in the Spartan-6 FPGA” (Xilinx xapp495) beschreibt HDMI sehr gut. Ich hatte zufällig ein Spartan 6 Bord da und das passte prima zu diesem Projekt.

Damit das Ganze auch an jeder Grafikkarte funktioniert, braucht man noch ein elektronisches Datenblatt (EDID) was man mit einem 2k EEPROM über I2C Adresse 0x50 liefert. Damit das nicht zu schwierig wird, gibt es später noch ein Python Script um das Datenblatt zu erstellen.

PISLX16 Spartan 6 LX16 FPGA Board
PISLX16 Spartan 6 FPGA Board
HDMI-Shield
das entwickelte HDMI-Shield

Im oben genannten Paper wird das Spartan-6 DVI SP601 Board beschrieben. Aus den Schaltplänen ging gut hervor, wie man ein passendes Shield designt. Auf dem Shield sind nun 4 Kanäle für WS2812 und ein Anschluss für ein HUB75 RGB LED Panel. Das ist einfach zum testen mit drauf gekommen.

Umsetzung

Wir suchen uns zunächst die Belegung des HDMI Ports, zu beachten ist, dass HDMI-A anders belegt ist als Mini und Mikro. Für die Terminierung sollten 50 Ohm pro Leitung verwendet werden. Da das FPGA Bord jeden Eingang mit 33 Ohm schützt, habe ich einfach noch 17 Ohm in Reihe dazu gesetzt. Die Signale werden differentiell übertragen und sollen einen Wellenwiderstand von 100 Ohm haben. Deshalb habe ich auch das Layout entsprechend aufgebaut (zumindest soweit ich das beeinflussen konnte). Für das Material JLC7628 habe ich 8mil Leiterbahnbreite und 8mil Abstand bei einem Laminat von 7,1mil und einem Er von 4,6.

HDMI-FPGA und EEPROM Anschluss
HDMI-FPGA
Impedanz 100 Ohm
Impedanz 100 Ohm

Das elektronische Datenblatt EDID

Ken Shirriff hat auf gist ein edid.py erstellt ich habe dieses für Python 3 modifiziert und dann ein Script gen-edid.py erstellt, um selbst ein EDID erstellen zu können.

00 FF FF FF FF FF FF 00 30 22 2F 03 01 00 00 00 
2D 1F 01 03 A1 2F 1A A0 04 CA FF A3 57 47 99 23 
11 4C 4C 21 08 00 71 40 01 01 01 01 01 01 01 01 
01 01 01 01 01 01 66 21 00 40 41 00 19 30 2C 58 
36 00 DC 0C 11 00 00 1E 00 00 00 FD 00 3C 3C 1E 
53 09 00 0A 20 20 20 20 20 20 00 00 00 FF 00 30 
38 31 35 0A 0A 0A 0A 0A 0A 0A 0A 0A 00 00 00 FC 
00 4D 79 20 53 63 72 65 65 6E 0A 0A 0A 0A 00 E0 

Jedenfalls kommt das Datenblatt (EDID) in einen seriellen EEPROM (24AA02) mit Adresse 0x50 an die I2C Schnittstelle des HDMI.

DER ARTIKEL WIRD NOCH WEITERGEFÜHRT. EINFACH SPÄTER NOCHMAL VORBEI KOMMEN.

Kommentar hinterlassen

Deine E-Mail-Adresse wird nicht veröffentlicht.




Enter Captcha Here :