The story so far...
Update: Row scanning working.
Known/working:
- Building and loading via JTAG new firmware into the main FPGA. This firmware is starting from scratch, we don't understand much yet about the default Barco firmware, although we've dumped it.
- We understand the majority of how the board works and can display pixels (now on all rows), and communicate via the IN and OUT connectors (various protocols partially done, UART finished and working)
- Scanning out pixels to the main LEDs (and the 3 self-test LEDs on the back)
Unknown
- Don't know anything so far about the native Barco data format for driving the tiles without reflashing them first; this is going to be difficult without having a working Barco rig (controllers and head end) or insider info.
- Don't really know what the CPLD does internally, there's some communications between the Spartan and the CPLD that are captured but not figured out. It may not matter too much.
Unimplemented
- Daisychaining tiles (e.g. via LVDS)
- Temporarily (until powercycle) reprogramming a tile is easy enough with a JTAG interface, but a small amount more work is required to write a permanent image to the parallel flash onboard.
- A variety of housekeeping stuff; fan control, understanding the dot-correction calibration eeproms, and so on.
Panel LEDs
Contributors: @Richard Aplin, @modder_mike
The panel is divided into twelve segments of 16x6. Each segment is driven by three Texas Instruments TLC5941 16-channel LED drivers. Each driver controls one color of the tri-color LEDs. The three drivers have their serial data cascaded, with the first controller in the cascade being Red, then Green, then Blue. Anode voltage is switched to each of the six rows of LEDs in sequence via a transistor controlled by the CPLD.
The 96 LEDs in the segment are controlled by only 16 driver channels by multiplexing the rows' LED anode voltage (TLC5941 switches the cathode side). Each of the 36 rows has a transistor between the panel's +4.5V input and the LED anodes. All like-numbered rows' transistors are connected to a common control pin on the CPLD. The CPLD cycles through them in sequence as instructed by the FPGA, synchronized with the incoming display data.
Take care when rewriting HDL for the FPGA. Because the LEDs are expecting to be run at only 1/6 duty cycle, they may theoretically be damaged if they are not cycled as quickly by user HDL. (For experimenting, consider using the calibration LEDs on the rear of the panel, which are not multiplexed.)
There are three I2C devices on the LED panel, an EEPROM, a temperature sensor and an ambient light sensor used for brightness calibration.
Most of the LED driver control pins are brought out to the data connector by way of two buffers. The remaining signals (SOUT for each driver string) are fed to the CPLD.
... Read more »
@Richard Aplin I'm finally digging into the panels I bought almost a year ago. I'm game to tune up & debug the WS2812B functionality in your OpenNX4 repo (sounds like a fun excuse to brush up on my verilog). I noticed in these comments that you got row scanning working but it doesn't seem to have made it into a git commit. Any chance you'd be willing to push those changes?