8×8 RGB LED Matrix
Ok, up until now, I haven’t been using my blog for it’s intended purpose, which is as a project log. What I had been doing was basically using it as a showcase for my completed projects. So, for the very first time, I’ll post on something that’s yet to be completed (and possibly never will).
I’ve mentioned giving my brother my old PICkit 2 clone. He was embarking on a project involving LED matrix displays. I’ve never used these before so I tought it might be fun to play with one. So I got myself the beefiest of LED matrix displays, an RGB 8×8. That’s a total of 192 individual LEDs.
Anyways, as I was submitting my PICkit 2 board design to BatchPCB I hurriedly designed a driver board for the matrix. I obviously wanted to save on the setup fee and postage. I’m kind of regretting that decision. Don’t get me wrong, the board seems to be functioning well enough.
So, what’s wrong with the board? To start off, the drill diameters for the SIL sockets were too small. The good news was that I tried fitting the sockets in before starting to solder everything. The bad news, I broke 4 tungsten carbide drill bits trying to enlarge the holes. I couldn’t use a drill bit that was too big or I’ll destroy the entire pad. Did I mentioned that I was using my PCB drill press? The bits just seem to get caught in the holes and snaps off. What’s worst is that the snapped off bits get stuck in the hole and was a real pain to remove.
I’m going to sidetrack here a little. A while back, I was prototyping some boards and was using my drill press. I was working with fiberglass boards and of course used carbide drill bits. So, as I was drilling holes, the debris covered the board and I couldn’t see where to drill next. I tried to blow it off but it wasn’t good enough so I used my fingers to brush it off.
Repeated this a few times (brushing off debris with my fingers) and as I drilled more holes I became more comfortable with the routine and my speed increased. All the while I had one hand operating the lever and the other securing the board and brushing off the debris. Because I was working so “efficiently”, the drill bit never really moved up very far from the board, sort of just high enough for me to brush off the debris and reposition the board. In case you’re wondering I kept the drill running all the time.
One time, I merely just touched (accidentally) the drill bit from the side, and things went really bad. The fact that the bit was spinning at high speeds plus the sharpness made it slice through my skin like butter. And once the bit got a hold of my skin/flesh, it sort of sucked up my finger (think Archimedes screw). Needles to say the bit went through my finger and there was a lot of mess. I’ll leave your imagination to do the rest of the work.
Now, back to the topic. Where was I? Oh yeah, as I was saying, I didn’t like how my board turned out. I powered the matrix and board with 3.3V. I’ve already experimented before hand to find out how much current to pump into each of the red, blue, and green LEDs to approximate true white when all three colors are on. After everything was soldered on and I wrote a quick and dirty program to test it out, the white didn’t turned out to be white at all. It was a little pinkish. The colors showed up even worse in the pictures, but it’s not really that bad.
The mistake here was using logic shift registers, specifically, the 74HC573. These chips couldn’t sink enough current. You’ll notice that there are no current limiting resistors for green LEDs. Using a constant current source, I determined that at 20mA the green LEDs had a forward voltage of 3.3V, which is exactly the voltage I’m supplying to the board. Even so, the actual current sunk by the chips was less than 10mA per output pin. Fixing the green LEDs at roughly 10mA, I experimented with resistor values for the red and blue LEDs to approximate true white. Despite all the effort, the end result was no good.
In hindsight, I should have opted for constant current LED sink drivers for the columns. These chips have serial input which would have made the board layout simpler and the pin count lower. I also would’ve have been able to easily calibrate the current to achieve the true white that I desired.
I also made another boo-boo by tying the output enable pin of each chip directly to ground. What this means is chaos at the very moment that I turn on the power. This explains the resistors you see on each side of the matrix. The eight resistors pull the data inputs high while the microcontroller booted up and initialized. In fact, I should have pull-up resistors on the latch enable pins as well.
That discovery came at a cost. Whenever I turn on any LED on the fourth row (from the top), the other LEDs of the same color on that row dimly lights up as well. Guess I screwed up the matrix. This is true even when I tried it independent of the board.
Where is this project going? Well, I will probably redesign the board and get a new matrix if I decide to continue playing with this.