Introduction: 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
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)
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 HUB75driver.zip 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
avr-objdump -S ..\code\Streaming\Streaming\applet\Blablabla1234567890.elf > Blablabla1234567890_assembler.txt