Introduction: Arduino UNO Based HUB75 LED DISPLAY DRIVER

Picture of Arduino UNO Based HUB75 LED DISPLAY DRIVER

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

Picture of 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

Picture of 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

Picture of 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

Picture of Clock Example

THis example uses connected via I2C DS1307 breakout board as RTC

Step 7: Temperature Display Example

Picture of Temperature Display Example

This example using Adafruit libraries and DS18B20 sensor to display temperature

Step 8: References


MichaelS637 (author)2017-04-08

Really nice solution for small matrix.

Is anу possibility to scale it for 32x64 matrix? (Arduino Mega based) Is any possibility to add chaining for two 32x64 panels?


AlexanderS52 (author)MichaelS6372017-04-08

It is Adafruit library that should support 32x64 matrix for Arduino Mega. Of cause to do custom board with Arduino Mega not simple because Arduino Mega surface mounted.

tbursoy (author)2017-02-13


Does this library enable to chain three RGB matrices?

Thank you.

AlexanderS52 (author)tbursoy2017-02-13

No, sorry.

nernoe (author)2016-04-28

Hi , great project .

I have an 1/4 refresh rate JS Industrial 16*32 P10 HUB75 matrix.

Where I can set the refresh rate ? , because e.g the Adafruit projects works only with 1/8 refresh rate display :( . With my 1/4 rate display writes stupid things..

Thank You!

AlexanderS52 (author)nernoe2016-04-29


unfortunately my library as well as Adafruit not supports 1/4 refresh rate. I googled about 1/4 rate panels and it seems like it is lot of different panels with different pixel mappings. If you can get pixel mapping diagram for you panel, possible I will be able to add support to my library. But if you don't have some special reason to use this panel, it better to use standard 1/8 refresh rate panel.


nernoe (author)AlexanderS522016-04-29

Thank You Alex ,

not so important , I have only 1 panel which is...

Later I also bought panels with 1/8 rate :(



About This Instructable




Bio: Analog engineer
More by AlexanderS52:74HC595 Shift Register With Arduino UnoHow to Properly Drive 4 Digit 7 Segment Display Using ArduinoHow to convert toy flashlight to rechargeable flashlight
Add instructable to: