This is the prototype of a circuit that was commissioned by kees_s. He wants a 10x10 LED matrix (with high-brightness blue LEDs) to display during an outdoor event. The matrix has to be controller through software running on a laptop.
There are more people interested in LED matrices, so this was an excellent excuse to start work on a circuit to drive LED matrices. I did think the design through some, and fidgetted a bit with the layout. In due time, this will turn into a PCB (ha!), but for now I wanted to be a bit more flexible.
A LED matrix works according to the principle of multiplexing. The anodes ('+') of the columns are all connected, while the cathodes ('-') of the rows are connected. By putting a voltage on a column and allowing current to flow to the ground on a row, you can make a particular LED light up. If you go through all rows at a frequency higher than 50Hz, the persistance of vision will make you see a solid picture -- just like TVs work.
So here's the controller board:
This is the driver circuit. To the right are two shift registers. The PIC doesn't have enough pins to drive the 10 pins of the columns directly, so I had to use shift registers. The shift registers drive the LEDs directly -- I added header pins next to the resistors so that I can easily connect the matrices to the driver board. The second shift register has only two pins -- I could have used two spare pins on the PIC, but with this set-up I have the choice to drive LED matrices with up to 16 rows.
On the top left of the board are the ten transistors that serve to multiplex the rows. The collectors are connected to the 2 x 5 pinheaders to the right -- again, for easy connection to the LED board.
The transistors are driven by the 4017 below the transistors, a chip that simply counts to ten. Each pin drives a transistor, thereby allowing current from the LED board to flow to the ground.
Below that is the trusty PIC 16F628A. It drives the shift register train and the 4017 -- 6 pins in all of the available 15 pins. Two more pins are used for the hardware USART, which is connected to...
The MAX232 (not installed yet) is below the PIC. The MAX232 converts RS232 level signals (-12V and +12V) to TTL level (0V and 5V, which is what the rest of the circuit operates on). The MAX232 requires four external elco's. There is also a pinheader to connect to the serial port of a computer.
All in all, I'm pretty satisfied with the board as it is. It scales up to LED matrices of 22x10 LEDs, or even more if I add another shift register. But it can also be used for smaller matrices -- an excellent platform for development of the driver software.
In due time, when it is time to produce the final design, I will create a layout and etch the board, of course!