Seit ein paar Jahren beschäftige ich mich mit FPGAs, was die Kurzform für Field-Programmable-Gate-Array ist. Während Mikrocontroller fest aus in Silizium gegossenen Schaltkreisen bestehen, können FPGAs so ziemlich alles sein, was man sich digital vorstellen kann: ein einfaches Logikgatter (UND, OR, XOR, NOR, etc.), über etwas komplexere Lookup-Tabellen bishin zu höchstkomplexen digitalen Filtern wie FIR- und IIR-Filter für die Audiosignalverarbeitung mit einer kürzestmöglichen Latenz.
Auch für die Lichttechnik kann man FPGAs gut einsetzen. So habe ich vor einiger Zeit einen DMX512-Sender in VHDL entwickelt, der nahezu beliebig oft in einen günstigen FPGA eingesetzt werden kann. Die Logik gibt dabei ein USITT-kompatibles DMX512-Signal aus. Die DMX512-Timings können über die generischen Parameter angepasst werden. Die Standard-Timing-Parameter lauten dabei gemäß der USITT-Vorgaben wie folgt:
| Description | Parameter |
|---|---|
| Breaktime (t_min) | 88 µs |
| Mark after Break | 8 µs |
| Inter-Byte-Time | 0 µs |
| Mark before break time | 0 µs |
| Refresh-Rate | 44 Hz |
Da einige Geräte nicht mit der kurzen Inter-Byte-Zeit oder anderen schnellen Parametern kompatibel sind, gibt es eine Reihe von Parametern, die kompatibler und weniger anspruchsvoll sind:
| Description | Parameter |
|---|---|
| Breaktime (t_min) | 242 µs |
| Mark after Break | 100 µs |
| Inter-Byte-Time | 40 µs |
| Mark before break time | 12 µs |
| Refresh-Rate | 23 Hz |
Bei mir haben die folgenden Einstellungen auf allen Geräten sehr gut funktioniert:
| Description | Parameter |
|---|---|
| Breaktime (t_min) | 96 µs |
| Mark after Break | 9 µs |
| Inter-Byte-Time | 0 µs |
| Mark before break time | 21 µs |
| Refresh-Rate | 44 Hz |
VHDL-Logik und Realisierung im FPGA
Hier findet ihr den gesamten VHDL-Teil zum Download: DMX512 Transmitter
Bislang habe ich gern das Arduino MKR Vidor 4000 Board als Grundlage verwendet. Hier hat das Arduino-Team einen FPGA von Intel (Cyclone 10LP) zusammen mit einem ESP32 und einem Microchip/Atmel SAMD21 Cortex-M0-Prozessor auf einem Board vereint. Das hat die ganze Sache recht einfach gemacht. Leider wurde das Board abgekündigt und kann wohl in naher Zukunft nicht mehr bezogen werden. Es gibt aber Alternativen von Trentz-Electronics (das CYC1000) oder andere Boards mit einem Lattice FPGA (z.B. das Lattice iCE40UP5K FPGA Development Board).

Die eigentliche Elektronik ist dabei unglaublich einfach umzusetzen: es braucht lediglich einen SN75176 RS485-Treiber-IC, drei Widerstände und eine XLR-Buchse – das wars. Die gesamte Magie, das RAM für die einzelnen Kanalwerte und die Timingerzeugung geschieht dabei im FPGA.
Wer Interesse an diesem Projekt hat, kann auf meiner GitHub-Seite zum X/FBAPE-Projekt mehr Informationen finden: X/FBAPE

