Sunday, 22 May 2011 20:45

16x32 RGB LED Matrix Technical Details

Written by 
Rate this item
(4 votes)

This first entry in the 16x32 LED Matrix blog series will introduce the display module and explain how it works. We will look at all of the components onboard and break it down so it is easy to understand what is going on.

For this explanation, we are using a 16x32 P7.62 RGB LED Matrix with 3-in-1 Pixels. What does all of that mean? 16x32 means that there are 16 rows of 32 pixels for 512 individual pixels. P7.62 means that it has a 7.62mm pixel pitch, or 7.62mm between pixels. Common indoor display values are P6 and P7.62. The smaller the value, the closer you can view the display and still get a “nice” image. Indoor displays of P6 & P7.62 have around a 3.5 or 4m viewing distance. Typical outdoor displays are P16 or P20 which have a minimum viewing distance of around 15-20m. 3-in-1 means that each pixel is a tri-color Led encapsulated in the same package (3528 package in our module). There are also 3-in-3 units out there where 3 individual SMD LEDs (0805 typically) are soldered closely together to make a “single” pixel on the board. I haven’t tested any of those, but certainly will in a future blog entry.

The following pictures shows a P6 (Top) and P7.62 (Bottom) LED Matrix.  You can see how just 1.62mm makes a huge difference in size.

Imagine a large Jumbo Tron display that can show a 320x240 display (not huge I know). With this module, that would be 150 of these modules and would be about 8’x6’. A 640x480 display would be twice that size and 600 modules.

Ok…enough of the dreaming…I want to figure out how these things work so I can drive a couple of them with a microcontroller development board like the Arduino or EasyPIC6 (hopefully).

Looking at the back with my magnifying glass, I am able to pick out the following chips (Links to datasheet):

74HC245D - Bus Tranciever (Non-Inverting)
CYT62726B - Constant Current LED Driver
APM4953 - Dual P-Channel Mosfet
74HC138 - 3to8 Line Decoder (ABC)
74HC04D - HEX Inverter

I have pointed out where each of these chips can be found in the following picture.

Now, what does each of them do. I’m going to attack this explanation in three sections and talk about the module enable, rows and columns separately.

The chip closest to the connector is the 74HC245D (RED) which is a Non-Inverting Bus Tranciever. OK…what is that. In this case, the 74HC245D is a parallel bus transceiver, so data present on a pin on the left side is transmitted to a pin on the right side. Sometimes bus transceivers are used to boost a signal on a bus as well as provide on demand isolation. In this case, I believe its just being used to boost the signal and provide distribution of the signal to different places in the circuit.

One important function of the module and one that will make the module look like it isn’t working at all is the Output Enable (OE). You will find that in the bottom left hand corner of the connector. OE needs to be held LOW for the module to display anything. Basically when you change OE, the signal passes through the 74HC245 on A6/B6 and connects to pin 4&5 (G2A/G2B) of the 74HC138 which is the enable function. When G2 is driven high, it turns off all outputs from the 74HC138 which means none of the rows are active.

Lets move on to rows. Rows on this device address the anodes (+ side) of the LEDs. We know from the supplier where we purchased this module that it is an 8:1 scan module. That means that you must scan each of 8 rows to get a picture. But wait…there are 16 rows. We can guess that we must light up two rows at a time. Lets look further at the connector interface. We see 3 pins labeled A, B and C. Doing some google research shows that those indeed are the control pins for the row scanning. These three lines control the 74HC138 which is a 3to8 line decoder. Meaning that there are effectively 3 input bits select one of 8 outputs. When you pass that 3 bit binary combination, the proper line is lit up. So ‘000’ lights up row zero, ‘100’ lights up row 4, ‘111’ lights up row 7 and so on through 8 combinations. Looking a little further, we can see that the APM4953 Dual P-Channel Mosfets are controlled by the 74HC138 which in turn provide current INTO the LEDs.

Last, we need to talk about Columns…or the REAL data. The rows just blindly strobe one by one and continue over and over again. The columns, or the individual pixels in each row is what carries the data. Each row consists of 32 pixels with 3 colors each. We know that we are going to light up two rows at a time (0:8, 1:9, etc.). Looking at the chip list, we see there is a CYT62726B (GREEN)…OK what the heck is that. It’s a 16 bit constant current LED driver. This driver SINKS the proper amount of current from the cathode (- side) of the LEDs. The amount of current is adjusted by resistors so that it is consistent for the LED you are addressing. Looking at the board, we see 3 chips in each corner of the board (in the picture you only see 2 on the bottom left and right due to the angle of the picture). Each of those chips represents a single color for a 16x8 quadrant (1 row at a time). The CYT62726B is pin-out and function compatible with the MBI5026 and TB62726 chips. You will find similar boards utilizing those different chips but they should all act the same. The R1, R2, G1, G2, U1, U2 pins on the input connector are the data lines for each color (U = Blue). The 1s correspond to the top and the 2s correspond to the bottom. Each set of chips on the top and bottom are cascaded horizontally to form a 32-bit line. I will talk more about how to clock data in, in my next blog post dealing with the protocol.

Hopefully this has given you some insight into how these things are designed.  In upcoming blog entries, we will learn how to drive these things from several different sources.  The article index for this series can be found in the blog entry: 16x32 RGB LED Matrix Blog Series.

Feel free to leave me a comment or question and I will get back with you as soon as I can.


Read 9849 times Last modified on Sunday, 22 May 2011 21:19


  • Comment Link LED Display Manufacturer Wednesday, 07 December 2011 06:45 posted by LED Display Manufacturer

    Exceptionally well information you have shared here. We really impressed with your great information

  • Comment Link Jim Saturday, 01 October 2011 19:49 posted by Jim

    When can you get back to this? It has been three months and I am anxious to go ahead with this project.

  • Comment Link Paul Chappell Thursday, 18 August 2011 10:14 posted by Paul Chappell

    Great article. When are you going to be posting the next article on this theme? I am trying to build an RGB LED matrix with a total of about 1000 RGD LEDs and similar components that you have mentioned in your first article. Do you think the Arduino will be able to cope with a display of this size? If not, what do you suggest I use to drive it?

  • Comment Link Patrick Sunday, 10 July 2011 15:01 posted by Patrick

    Thanks i will be waiting to have the clue so as to solve the big challenge i am having.

  • Comment Link Curtis @ Friday, 01 July 2011 21:55 posted by Curtis @

    Patrick, I will be posting the next part of this blog series in a couple weeks which will talk about how I control the unit. Stay tuned, hopefully it will help you figure out whats going on.

  • Comment Link Patrick Friday, 24 June 2011 16:47 posted by Patrick

    I have a similar display module but instead of CYT62726 it uses 74HCT(sinking), APM4953(sourcing) and 74HCT138 for selecting the the rows. i am getting trouble on how to clock for scrolling right to left and wiping up and down

Login to post comments