# LED Display

LED display @ Maker Faire

Last year I mentioned a long term project I'm working on: A huge LED display built out of 32x32 LED RGB matrix modules driven by a BeagleBone Black, which could drive the display like a usual monitor using a framebuffer driver. After many months and just right before Maker Faire 2015 in Hanover I managed to bring the project in a presentable state. This article shall give an overview over the project.

As already described in my article about the BeagleBone Black the project consists of several steps which all must work together to bring the display to life. The first step was to develop an hardware interface which was able to drive the LEDs from content generated by the BeagleBone Black. I decided to use an FPGA which acts like a memory device towards the BeagleBone Black so I could use its general purpose memory controller (GPMC). This is a very fast interface and also rather simple to implement on the FPGA side as I am using the FPGA's block RAM modules as a dual-port RAM. Using this approach no clock synchronisation is needed between the two devices. The FPGA then sends the pixel data using the HUB75 protocol towards the LED matrices. As a first prototype I used the LOGI-Bone, but then built my own PCB. With this first revision of the PCB, which was very similar to the LOGI-Bone, I managed to display data on 4 LED matrices and could show that my approach works.

The next step was to decide the final size of the LED display. I opted for 8 × 5 modules of 32 × 32 pixels each with a 5 mm pixel pitch, which results in a resolution of 256 × 160 pixels and an aspect ratio of 16:10. The determining factors where

Super Mario

• At least 160 × 144 pixels resolution to be able to run a GameBoy emulator with native resolution
• A 16:10 or 16:9 aspect ratio for movies
• A manageable physical display size
• Less than 1k€ for LED modules
• Pixel data should fit into the FPGAs block RAM and the FPGA should be affordable and available in single quantities

As the 40 modules will need 80 kB of block RAM I choose a Xilinx Spartan 6 XC6SLX25-FTG256, which provides 52 block RAM modules of 18kbit each. As the I/O banks of the FPGA will run from 3.3V, but the ICs on the LED modules run from 5V, I added SN74ACT244 drivers to each output to have better voltage levels when using high frequencies on the HUB75 interface. This was one major thing I learnt from playing around with my first prototype. The XC6SLX25-FTG256 comes in an 256-pin BGA package and I had to use at least four layers for the PCB. You can find the complete schematics and gerbers for the PCB at the hardware repository.

First light with the second PCB

After receiving the PCBs the next challenge was to migrate the VHDL code from the old prototype board to the new version. Getting to run the old code on the new FPGA was rather easy, but as I wanted to use one HUB75 interface per row so that I could achieve higher framerates, almost everything of the code had to be rewritten to be scalable. As I only had four modules so far, testing the new code was trickier than thought, but at the end I was pretty sure that everything should work with 40 modules. The FPGA now gets its data as RGB565 pixel data (16bit) from the BeagleBone Black and then does a gamma correction to get a 10bit hardware depth with is then done using a time-dithered PCS for brightness with additional global brightness by changing the blanking times. The global settings can be configure via an I²C connection between the FPGA and the BeagleBone Black.

Copper busbar

Before ordering the 40 modules I also had to think about powering them. The modules I already had drew up to 2.2A when all LEDs were lit up at full brightness. So I estimated that I will need about 90A to supply everything not accounting for any losses in the cabling. 90A is a rather huge current, where you have to start thinking about losses in your cabling. To reduce those to a minimum I decided to use a big copper busbar at the backside of the display. To be able measure the power used by the LED screen I ordered an LEM HO 100-S current transducer. As a power supply I chose a cosel PLA600F-5 5V 100A power supply.

Mounting all modules

Now I ordered 40+2 modules from Aliexpress. As it is difficult to get the exact same modules later on I ordered two modules as a spare. Three weeks later and only two weeks before the Maker Faire I finally received the modules. As I wasn't sure about the exact dimensions and positions of the mounting holes of the modules I wasn't able to design the exact mounting parts before, so I started immediately and then went to the local fablab, Die Werke, the next week-end to built it up. I took me around 8 hours of laser cutting to build two layers of 5mm MDF, which assure the perfect alignment of the modules. The add additional stability and especially torsion-resistantancy I mounted a framework of OpenBeam aluminium extrusion profiles.

Everything wired up

After everything was built up I applied power, booted the BeagleBone Black and everything worked! But after five minutes the power supply started doing weird noises and died a few seconds later. What a bummer! I did some analysis and was pretty sure that everything was fine with my display and I was able to run it partly (one row at a time) from my bench power supply. So I ordered an MSP-600-5 5V 120A power supply from MeanWell as a spare part. I received it two days before the Maker Faire and with that power supply everything run fine.

First test of the final setup

The next steps will be to fix minor issues (e.g. some ghosting) and improve the design (power supply supervision, measure power consumption, even more sturdiness, maybe HDMI input, ...).

## 8 thoughts on “LED Display”

1. Hi Tobias

great project and great work done by you.

I am also designing the same project but with some different approach, I think that it would be better to have some chat with you in this regard as you have done this project so I think you know all problems you encountered in advance and would be a lot of help for me.

hope you would accept my invitation please reply me with your response in this regard.

Thanks

Piyush Pandey

• Hi Piyush!

Thanks for your comment! I'm happy to answer your questions regarding the project. Please feel free to ask here, so that anybody can profit from it, or send me an email (twamtwam.info) or pn on facebook/twitter. I spotted a similar project on 32C3 (https://wiki.hackerspace.pl/projects:q3kled) and this was motivation for me to continue on this project. So I actually started with a new approach to control with HDMI.

Tobias

• Hi Tobias

First of all very much thanks for your reply 🙂

Actually I am doing this project from last year August month and till now I have completed a very small percentage of it.

But after having a look at your project I am very much hopeful that I will be able to finish this one as early as possible.

Please can you call me at my mail piyush.pandey.013@gmail.com

regards
Piyush Pandey

2. Hello Tobias

I am looking into making a LED display myself, and was wondering how much of the logic cells on the FPGA was used. thinking LUTs and flipflops since incorporating a Artnet receiver core take up a substantial amount of Logic cells in it self.

Thanks
Alexander

• Usage statistics for the XC6SLX25-FTG256 are:

BUFG=3
BUFG_BUFG=3
BUFIO2=1
BUFIO2_BUFIO2=1
CARRY4=62
DCM=1
DCM_DCM=1
DSP48A1=1
DSP48A1_DSP48A1=1
FF_SR=111
HARD0=13
HARD1=2
INVERTER=1
IOB=102
IOB_IMUX=24
IOB_INBUF=24
IOB_OUTBUF=95
LUT5=179
LUT6=1418
LUT_OR_MEM5=2
LUT_OR_MEM6=4
PAD=102
RAMB8BWER=80
RAMB8BWER_RAMB8BWER=80
REG_SR=618
SELMUX2_1=374
SLICEL=432
SLICEM=1
SLICEX=176

3. Hello Tobias,
I have interest in experimenting with your exact design so how much does it cost to make your prototype spartan board and which pcb company made it for you?

Thanks

• The PCB was made by OSH Park and IIRC was around 100 \$ (without components).

4. Hello Tobias,
Thanks, you are far too kind though as a fresh hobbyists I will have to explore options of avoiding 256 pins BGA package assembly but any advice will be very much welcome.
Thanks once again

Edogwu