Introduction: Arduino UNO Based HUB75 LED DISPLAY DRIVER

About: Analog engineer

This is custom 5x5cm Arduino UNO board that allows simple connection to HUB75 interface LED displays.
If you are not familiar with such displays you can buy one from Adafruit 16X32 RGB LED MATRIX PANEL, or from Aliexpress

HUB75 interface LED displays usually comes with flat cable for data and power cable. So after you soldered this PCB all you need to do is to connect power cable to screw terminal. and plug flat cable to PCB and LED display. Pinout compatible with Adafruit "RGB matrix Panel" library, but I wanted to understand how HUB75 interface works. So I wrote my own library. Five free pins can be used to connect sensors or other devices. See examples below. Gerber files for Seeedstudio Fusion PCB service attached. It will cost you 10$ to produce 10 of this PCB.

Also Eagle schematic and board layout files attached so you can also use any other PCB service.

Step 1: Parts List

You will need flowing parts:

1. ATmega328 with Arduino Optiboot (Uno)

2. Resistor 10k

3. Capacitor 22pF x2

4. Capacitor 100nF x5

5. Crystal 16MHz

6. Capacitor 470uF x2

7. DC Barrel Power Jack/Connector like this

8. Two pins screw terminal block 3.5mm pitch like this

9. Switch like this optional if you want reset button.

10. DIP Socket, 28 Contacts optional

11. Two jumpers

12. Break Away Headers 18 pins like this

13. Resistor 330 Ohm x5 (optional)

14. RUEF250U FUSE (optional)

15. Ribbon Cable Connector 2x8 like this probably you also can use one like this You can also solder two rows of headers. It works fine also.

RUEF250U is a 3A fuse. It is optional. You can simply short it connections with wire if you don't want it.

Resistors 300 Ohm also optional. You can solder header before resistors as you can see on photo.

Step 2: The Board

As you can see it is no USB interface on board, so you will need some USB to serial cable to upload sketches. I am using SparkFun FTDI Basic Breakout - 5V

Using jumpers board can be configured for panels with 3 bits of row address (A,B,C) usually 16x32 or for panels with four bits of address (A,B,C,D) usually 32x32 panels or larger

For panels with 3 bits of row address you need to short NOD1,NOD2 jumper as you can see on picture

For panels with 4 bits of row address you need to remove jumpers from NOD1,NOD2 and put them on USED1,USED2 headers.

It is no voltage regulator on board. Please use good 5V power supply. For 16x32 panel you will need about 2A power supply. For 32x32 panel you will need about 3A power supply.

Connect 5V power supply only to Barrel Power Connector. The connector in lower left corner is for connected external devices as RTC, sensors etc. Traces on board for this connector too narrow for 2A needed to power LED matrix!

Step 3: HUB75 Interface

HUB75 interface used for lot of LED displays. It is couple of links below if you want to learn about it.

It is slight differences between panels, but for panels used by Adafruit and many others basically you need is to do flowing to operate the display:

1. Clock in data for entire row (use R1,G1,B1,R2,G2,B2 for data and CLK for clock)

2. OE high

3. Select line address (A,B,C,D)

4. LAT high

5. LAT low

6. OE low

Repeat for each line

Step 4: My Library

As I wrote before, this board will work just fine with Adafruit "RGB matrix Panel" library. But it was interesting to write my own. So I did. You can download latest version from GitHub HUB75driver or you can download attached zip file.

This library will work with normal Arduino Uno as well.

HUB75driver library parameters

Supports 16x32 1/8 refresh rate panels

Frame rate 125FPS

12bits of clolors, 4 bits per color (RGB)

3500 bytes of program memory

RAM: 40 bytes + 768 bytes if no double buffering and 1536 bytes if double buffering used

It takes 7ms to fill all matrix using draw_point() function (512 times)

Step 5: Usage Examples

Example how to use my library to scroll text

Step 6: Clock Example

THis example uses connected via I2C DS1307 breakout board as RTC

Step 7: Temperature Display Example

This example using Adafruit libraries and DS18B20 sensor to display temperature

Step 8: References