Go Down

Topic: (not another) LED Matrix project (Read 16058 times) previous topic - next topic


Kicking off soldering tonight on an RGB matrix project. Here's the schematic. Will post back when done.



Now THAT is what I would like to try.  There are a lot of projects that are using these Maxim parts that are ridiculously expensive; I don't want to spend over $10 each cathode for R G B matrices.  You're using four 74HC595 packages, which are (in DIP form) about $0.60 each.

The layout of your schematic is a bit odd, but it looks like you're shifting in the bits for each row of cathodes in parallel.  Then you are using one more shift package to drive one anode at a time.

No support for dimming the board, as far as I can tell, but if you can tune the right resistors, it should look great.

Going to do more than one matrix?


Some decent progress made tonight, should easily finish tomorrow assuming I haven't screwed something up.

To answer your questions though:

Let me preface with : I'm a complete noob, this is my 2nd project and am learning as I go.

I'm using an RGB 8x8 common anode matrix from LedSee (only $10 on ebay). I agree I think the matrices available out there are way overpriced at $35++ and then you have another $30 for the driver boards. And what's the point? For me I wouldn't have learned much from using those.

I've already roughed this up in a prototype which you can see here:

I was able to get fading implemented using some code from this guy:

Basically I'm building the same project as him only he knew what he was doing. It's fun though and I'm learning a lot.

The reason for the layout is to try to squeeze everything underneath a single matrix (6cm X 6cm). One of the shift registers will be on the outside but no biggie. As will the arduino.

Here's a snap of the PWM working in mockup.

more tomorrow probably.




well done!

being told that 'I knew what I was doing' doesn't happen too often  :D
be sure to post more of it when it is up and running.




If you want to implement PWM brightness control for the entire display at once, you can connect the /OE pins not to ground but to an I/O pin on the Arduino.  If you choose one of the PWM pins, just remember that it's /OE, that is, it's enabled when the pin is LOW and the analogWrite() function will work backwards (0 = full bright, 255=off).


Jan 03, 2009, 04:48 pm Last Edit: Jan 03, 2009, 04:49 pm by FrancisShanahan Reason: 1
Robert, thanks for the help so far. You may recall on Youtube I commented that I couldn't light more than one color in a given LED at a time. The ISR code was a great help to me and the fact that you got everything working made me realise it was possible and that I had something wrong in my wiring. It turned out to be that I was not accounting for RED's forward voltage being lower than green and blue in the matrix, hence RED was always on and at a specific voltage green would turn on, as opposed to and even fade from red to green. I've accounted for this with 330 and 220 ohms resistors which seem to be a good match.

Anyway thanks again, you definitely know what you're doing (at least relative to me  ;) )




well I got it working after clearing up a few shorts. I must say it looks great but very hard to photograph or video tape.

Here's a link to the finished product.

and the gallery is here:

Next step will be to make a nice enclosure and program a few cool animations.

I've tried linking to it interactively from Processing but seems like the refresh rate is pretty slow. Any idea what the quickest way to send down 3x64 bytes of data would be?


"the fool is proud of the one thing he knows"


any chance you could post the processing code you used in the video along with the arduino code?


Any chance of turning it into a shield and open sourcing the boards?  Especially if you put together a good library.


Haven't had a good look at it, but I guess you can make a PCB the right size using only SMD components ^^
Gonna give it a try right now ^^


A shield can be bigger than the Arduino (like the danger shield is).  Though if you can fit the parts, it's amazing how tightly you can route things with 2 layers.


(I think) I finished routing a board, using SMD packages. Everything fits under the display.
Not really sure that all the connections are good, as I don't have the display here and therefore cannot test pinspacing and such.
PDF : http://melka.one.free.fr/temp/74HC595_RGB_MATRIX_DRIVER_BOARD.pdf
EAGLE : http://melka.one.free.fr/temp/74HC595_RGB_MATRIX_DRIVER_BOARD.zip



melka, looks awesome.  I like the attractive X style placement.

Why'd you put all components on the "bottom" of the board in Eagle, though?  You could have built it all with components on the top as usual, keeping in mind the reversed pinouts of the headers only.  Many places charge extra for silkscreening on the "bottom" and you can't just swap bottom for top.

Have you run the SparkFun set of rules?  Any traces too close or too far?  They look for 8 mil spacing and paths.


melka, I hope you don't mind I started with your schematic and did some of my own adjustments.  Besides flipping the components so they nestled on the "top" layer between the PCB and matrix, I made these changes.

(1) I corrected the pin spacing for the GYXM-2388AURPGB parts that I got from LEDsee.com.  You were slightly off the grid left/right for a couple of the pin spots.  The two rows are 1.9" or 19 pins apart.

(2) I reordered the anode pins so the rows are in QA,QB,QC,...,QH order from the anode driver.

(3) I took Anachrocomputer's suggestion, and tied the R, G and B chips' "G" aka "/OE" pin to a sixth input called DIM on the jumper.  I did it on the cathodes and not on the anodes, because I might want to fine-tune RGB balance with separate PWM inputs sometime (not in this revision).  If the user doesn't want any PWM support, they can supply GND connections offboard.

I'll supply EAGLE files back after I take a little more time for review.


Sorry for answering so late ^^

Why'd you put all components on the "bottom" of the board in Eagle, though?  You could have built it all with components on the top as usual, keeping in mind the reversed pinouts of the headers only.  Many places charge extra for silkscreening on the "bottom" and you can't just swap bottom for top.

I was originaly going to route a single sided board, so that it can be easily home-etched, but well, that didn't work. I went for the double sided PCB but I forgot to switch the component to the top side. Sorry guys ^^

melka, I hope you don't mind I started with your schematic and did some of my own adjustments.

No problem at all, everything I did is free to use. Well, I didn't do much, but use it as you want ^^

I have a little question : what is the wiggly line inside the board edge ?

Nota bene : I used resistor networks in a QSOP package, but those don't really come cheap.
R220 = 2.35$ : http://search.digikey.com/scripts/DkSearch/dksus.dll?Detail&name=VSSR16-220-JI-ND
R330 = 1.89$ : http://search.digikey.com/scripts/DkSearch/dksus.dll?Detail&name=VSSR16-330-JI-ND
It might be interesting to use 0603 resistors instead, to cut the price down.

In addition, if someone wants to use several boards+display side to side, maybe we should add a row of headers, with the DIM / SCK / SCI / VCC / GND shared with the already existing 6 pins header going to the arduino, and taking the SERIAL OUT of the 4th 74HC595 and wiring it to the SER pin of the "outgoing" header". Not sure if I'm clear here ^^

Nice to see that this board might be useful to someone.

Go Up