We designed an universal controller board for steering 16x8 RGB LEDs. Each color has 8 bit resolution resulting in 24 bit (true color) per Pixel/LED. However, internally we even work with 12 bit pulse-width modulation. The on-board microcontroller (ATmega328) transforms the incoming 8 bit color values to 12 bit using an exponential function. This is called gamma correction and tries to compensate for properties of human vision. The board is working with a line frequency of about 250 Hz which is absolutely flicker-free. For testing those boards we build once again a LED matrix but now a TrueColor Matrix.
The board uses three TLC5940 (each has 16-channels) with constant-current sink. With only one interchangeable resistor one is able to control the global brightness of the matrix. In addition, each LED (channel) can be regulated individually. Hence, even with low quality LEDs one is able to achieve perfect white light.
For data communication the board uses UART with a fixed baud rate of 1MBit/s. For simplicity, we decided to use standard Ethernet cable to transfer data between boards. We used Cat6 cable but in principle the category doesn't matter. Every board has one data-in and one data-out port (RJ45 jacks) and the boards can simply be daisy chained for larger matrices. In principle the total size is unlimited. Data is fed in pixel-wise (like for the famous WS2801) and the controller takes the first incoming 384 bytes (128 Pixel x RGB), all further incoming data is directly sent to the next board.
The total size of one controller board is 11.5 cm x 8.0 cm. The layout and schematics can be found in the download section. You can also find the firmware there.
Update: 2012-12-16 - A new SMD version of these controller boards with all (SMD) parts pre-soldered is now available in the web shop of agile-hardware. See description added below.
|Description||Part on PCB||Quantity||Supplier||Order-Nr. (URL)|
|HEXFET IRF7314||Q1, Q2, Q3, Q4||4||Reichelt||IRF-7314|
|TLC5940NT||IC3, IC4, IC5||3||RS||422-283|
|28 Pin IC-Socket 300mil||IC1, Ic3, IC4, IC5||4||Reichelt||GS 28-S|
|Resistor SMD 0,25W 1% 10K||R3, R8, R9, R12, R13, R16, R17, R20, R21, R26||10||RS||679-1765|
|Resistor SMD 0,25W 1% 2K2||R10, R11, R14, R15, R18, R19,R22,R23||8||RS||679-1989|
|Resistor SMD 0,25W 1% 2K||R2, R4, R6||3||RS||679-1982|
|Resistor SMD 0,25W 1% 220R||R24, R25||2||RS||223-2164|
|Resisitor SMD 0,25W 1% 1K||R1, R5, R7||3||RS||679-1844|
|ATMega 328P||IC1||1||Reichelt||ATMEGA 328P-PU|
|Ceramic Capacitor 22pF, 20%||C2,C3||2||Reichelt||KERKO-500 22P|
|Oscillator 16,0 MHz||OSZ1||1||Reichelt||16,0000-HC49U-S|
|Pinheader 2x8 Pitch 2.54mm||CON_RED, CON_GREEN, CON_BLUE, CON_ROWS||4||Reichelt||MPE 087-2-016|
|Jumper||JP1/JP2, JP3/JP4, JP5/JP6||3||Reichelt||JUMPER 2,54GL RT|
|Pinheader 1x2 Pitch 2,54mm||JP1, JP2, JP3, JP4, JP5, JP6, Terminator||7||Reichelt||MPE 087-1-002|
|Modular Jack||DATA_IN, DATA_OUT||2||Reichelt||MEBP 8-8G|
|Ceramic Capacitor 100N, 20%||C1, C4, C5, C6, C7||5||Reichelt||Z5U-5 100N|
|Electrolytic Capacitor 680uF||C9||1||RS||572-079|
|LED 5mm blue||DEBUG||1||Reichelt||LED 5MM BL|
|LED 5mm green||PWR_LED||1||Reichelt||LED 5MM GN|
|Screw terminal 5.08mm||PWR||1||Reichelt||AKL 101-02|
As mentioned above in principle you can daisy chain endless boards and thus build huge matrices. However, you have to consider that with a data transfer rate of 1MBit/s the maximum frame rate of your matrix will decrease with increasing size.
For standard realtime / video play back a frame rate of 25 FPS is fine. This is also the default frame rate that our Glediator software uses. Well, with 1 MBit you can easily calculate how many boards you can daisy chain before breaking below 25 FPS:
Yes, the magic number is 8.
That means a matrix size of 32x32 or 64x16 or 128 x 8, respectively.
If you intent to go for bigger matrices but still what to have a frame rate of 25 FPS you will need to have your data spread via net work. In this case you should read this article.
If you decide to go the traditional way of data feeding via UART (not more than 8 boards daisy chained) you will need an USB-UART-Converter capable of delivering 1 MBit UART. Many of those you can buy on ebay for 3 bugs or less. However, many of them are using cheep chips that can not handle 1 MBit. So we strongly recommend to use these guys (because we know that the will work).
For all who don't want/can buy all the parts by themselves and/or don't like to solder: There is a SMD version of these boards available in the web shop of agile-hardware. This board comes with all SMD parts soldered! You just need to solder jacks and pin headers (all included).
Note: Please note that these boards are electrically identical to the original version. Nevertheless, there is an important point to consider: The spacing of the pin headers was choosen to fit exaclty to our ready-to-go LED-Panels. Thus the spacing between the pin headers and the RJ45-Plugs became very narrow. So if you intent to use this SMD version of the board to drive your self-made matrix you should take really care on wether your connectors will fit in between the two RJ45 jacks or not! If not, we just recommend you to mount the pin headers face down on the PCB! Standard ribbon wire connectors will not fit and you will need to mount the pin headers from the bottom side.
To connect these boards to an LED matrix you can use the following schemes as Guidelines.
First you need RGB-LEDs with common Anode (+). We used these Guys:
The next point is to build a matrix of them. It's straight forward, just connect all anodes in a each row and all colors in each column.
Next point is to hook the matrix to the controller board. Also that's straight forward processing. We recommend to use ribbon wire.
Now hook up the "Data In" connector to an USB-UART-Converter of your choice.
That's it, start Glediator on your PC and have a lot of fun.