Large LED Matrix Display – Part 1

I’ve wanted a digital marquee for a long time. The kind you see at some gas stations or grocery stores that say simple messages like “Have a nice day!”. They tend to be pretty expensive for something pretty small. I think big. I want one that is at least 6 feet long. I was browsing and found this beauty: 12-foot Matrix by Kitesurfer

The interesting thing about this display is he made it large like I wanted, blue like I wanted, and out of simple materials like wood, just like I wanted. The design was incredibly simple. 512 LEDs driven as a matrix row by row. That last part is where it broke down for me.

When you scan a matrix be it by row, column or other trickery you are effectively lowering the max brightness of the display. For simplicity lets say you have 10 rows and 20 columns. Like Kitesurfer you decided to row scan. What you do is pipe in data on the columns to say on or off for each column and then you turn on a row, then you pipe in data for the next row and turn that row on. Think about that for a second. That means you only have 1 row on at any given time. Another way to express that is each row is on for 1/10th of the time. Each LED will look about 1/10th as bright as it would if it were locked on. The phenomenon that allows this to work is called Persistence of Vision. Persistence of Vision doesn’t quite cut it for me. I want to be able to choose my brightness level, or at the very least, get 100% :). So I did what any hacker would do, and started designing my own.

I started with the basis that Kitesurfer used and then modified from there. I put a simple shift register circuit on my breadboard for some proof of concept work. I took 2 74HC595 8-bit serial-in-parallel-out shift registers and chained them, with each output being an LED. I was directly driving the LEDs from the 74HC595s. I was putting more current through them than they are rated for 160ma vs 70ma. (Insert obligatory warning here)

Overloaded 74HC595 Column Driver

Note: I used an IC socket so I could change the resistor values if I changed my mind of LED variety or wanted to make them brighter/dimmer.

This circuit works pretty well functionally. There are 2 problems I noted with this circuit. The obvious one being that I was overloading the 74HC595 which is a big no-no. The second being that when the shift register turns on the outputs are in an unknown state. The second problem is a little more difficult to solve so I’ll skip that for now. To fix the overloading the circuit we can do a couple of things. We could drive transistors or mosfets instead of LEDs, or we can replace the 74HC595 with something else that can handle higher currents. I couldn’t easily find cheap high power shift registers so I went the route of using a Darlington transistor array, specifically the ULN2803A. Now instead of the 74HC595 driving the LEDs, it is only driving a tiny current to the ULN2803A and the ULN2803A is doing the heavy lifting. Now I can control up to 500ma of current per shift register. Here is what the schematic looks like for that. Note I am leaving out resistors that should be between the shift register and the transistor array.

74HC595 Column Driver

Note: I used an IC socket so I could change the resistor values if I changed my mind of LED variety or wanted to make them brighter/dimmer.

This I feel much better about. These are both pretty cheap chips, easy to interface with and widely available. However things start to get messy when we start thinking about the raw numbers.

The LED sign I make I want to be 16×2 just like a standard LCD display. Also like a standard HD78770 display I would like to use 5×8 characters so I can just ‘borrow’ the character design from an existing display. That comes out to an 80×16 matrix. 1280 LEDs will be needed to make this thing work. Each shift register/transistor array combo can only drive 8 LEDs since I want to be able to drive each LED directly. That is 160 shift registers, 160 transistor arrays, 1280 current limiting resistors for the LEDs and of course the missing 1280 current limiting resistors for the Darlington arrays. Since I am making these at home I was planning on using through-hole parts for simplicity. As I start to add these numbers up this no longer sounds simple. I’d be drilling 1000s of holes into PCB which is no fun. What a convincing argument for surface mount technology/devices (SMT/SMD).

So I went back on the search for surface mount versions of the 74HC595 and ULN2803A. I found suitable versions of each. Luckily I also posted on a forum at about this and several people suggested power shift registers which are high current shift registers. I wrote them off during the beginnings of my searches since they seemed pretty expensive. But I started to cost out the 74HC595 and ULN2803A and the resistors between them and the cost was almost the same. However using a power shift register means less holes to drill. And better yet, if I go SMT I don’t need to drill nearly as many holes.

Enter the TPIC6B595. A high current power shift register. This device is basically, if not exactly, a 74HC595 and a ULN2803A combined. And these only cost about a buck. I still need 160 of them but I can drill WAY less holes, and solder much less as well since I can cut out a whole IC and a slew of resistors.

That is basically where I am at right now. I’m still waiting on my laminator to arrive so I can start playing around with the latest iteration of this design. I’ve got the SMT resistors and SMT TPIC6B595 sitting on my desk downstairs.

TPIC Column Driver

Note: I know the schematic says 596 instead of 595. They are pin compatible and the eagle library only includes the 596 because of this.

Please leave comments if you have any ideas as to what could help make this easier or other things I need to think about and/or should consider.

I’ve already thought about the fact that if all my LEDs are on I’m drawing something like 26-27AMPs. That will be discussed a little more as this comes together. I have a couple different ideas as to how to deal with that.

Posted in Electronics Tagged with: , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,
3 comments on “Large LED Matrix Display – Part 1
  1. Bistromath says:

    I’ve been working on a display I intend to expand up to 160 x 144 (it’ll be about a metre square), and hook up to a Gameboy. While designing the 4-brightness level drivers I have discovered that the eyes response is logarithmic: thus an LED must be 10 times brighter to ‘look’ twice as bright. So for the design you’re looking at with each row duty being 1/10, it should only make the display look half the brightness it would do otherwise. Of course, that’s not to say redesigning is a silly thing to do :D

  2. Macka says:

    What are you using for your high-side drivers?

1 Pings/Trackbacks for "Large LED Matrix Display – Part 1"
  1. [...] Here are some pictures of the creation of the test set of driver boards. This is the same process that I posted about before, check it out HERE. [...]

Leave a Reply