Need help: How to make my own 24x16 LED Matrix display

Everytime I search for how to make a 24x16 or 32x16 LED Matrix display, I stumble upon some post or the other which has a well known component by sure electronics using the HT1632C driver.

Now, I'd like to make my own plug and play display to use with an arduino board. One option would be to use shift registers like the 595. But for a 24x16 display made with 6 standard 8x8 LED Matrix displays, that would come to about 12 shift registers - 2 per matrix viz., one for the rows and one for the columns. But I've read mixed reviews about this approach, mainly regarding flickering and the MCU not being able to update it fast enough once you've got too many shift registers.

Another option is the MAX7219 driver which can single-handedly drive an 8x8 matrix. But that would again result in 6 of them for a 24x16 display. Also, the price of the MAX7219 is like 10 times the price of a 595, so I'm not too keen on that.

I've tried looking up the HT1632C driver, but it doesn't look like it's available easily as a separate part. Also, I don't think it's a standard breadboard size IC.

I'm sure this is a standard problem which has been solved lots of times, but can't find a standard solution other than buying the part from Sure Electronics. Any help will be appreciated.

You can wire all the rows together (making an 8x48 matrix) and use a single shift register to drive the rows. That means 7 more for the columns or 8 shift registers total. SPI can output at about 8 megabit per second so you can update the registers about 143,000 times per second. That means all 8 rows at almost 18 kHz.

That's an interesting idea, putting them all together in a single row which would reduce the number of shift registers. But I'd really like it to be at least 16 pixels in height. I'm actually trying to recreate the DotKlok from scratch, but would like to build the screen in parts rather than buy it whole.

I'm not familiar with SPI, so I'll take a look into it and see how it works. For POV, I would basically require something around 100Hz. So, if this gives me 18KHz, that's more than what I need. From what you've just said, I'm inclined to believe that I can definitely get more than 100Hz using 12 shift registers as well.

Hi plastygrove,
For such a large monochrome matrix display I would really recommend something like the MAX7219. You can pick them up on eBay cheaply about a UK pound per chip and you have zero problems with flicker as scanning is performed on chip. The main potential drawback is you cannot adjust the brightness of individual LEDs but you do have 16 brightness levels that effect all the LEDs. They can be stacked so you only need 3 arduino pins to program all 8 chips.
Another potential options is stacked Rainbowduinos but the LED matrix may be to big for your needs.
Lastly, I know you want to build it yourself but consider this (http://www.sureelectronics.net/goods.php?id=1095). I have not seen or used one but it seems very good value for money considering they are duel colour LEDs.

That's the exact display board I'm trying to create, in monochrome of course :). I'd probably go with that if I mass produce my product at some point, but otherwise it defeats the purpose of what I'm trying to do. And besides, I'm not paying $10 to ship a $20 product! :astonished:

But good call on the ebay thing. Just checked ebay.com and they're selling 20 pieces of 7219 for $10 which is brilliant. And free shipping to boot. Only issue is that it'll probably take a month to reach me.

I built my first wordclock using components ordered from Mouser and the final cost was about $120. If I had thought to ordered the components from eBay I would have save about $30. There is a lot of work in soldering LED matrix boards and because I built mine on stripboard a lot more track cutting and wire soldering. I have built 2x wordclocks now but don't intend on doing any more soon.

I would recommend looking on instructables for LED Matrix display. There are numerous amounts of instructables on that very topic, at least last I checked.

plastygrove:
I'm not familiar with SPI, so I'll take a look into it and see how it works.

plastygrove:
I'd really like it to be at least 16 pixels in height.

Even if you wire them as 8 rows of 48 you can place them as 16 rows of 24.

That's the exact display board I'm trying to create, in monochrome of course

The schematic is publicly available, and it uses the HT1632C (which you can buy on ebay for $4 or so).

plastygrove:
I've tried looking up the HT1632C driver, but I don't think it's a standard breadboard size IC.

You're right on that one. It would be hard to connect to a 52-pin Quad Flat Pack without a custom circuit board and some surface-mount soldering experience.

funkyguy4000:
I would recommend looking on instructables for LED Matrix display. There are numerous amounts of instructables on that very topic, at least last I checked.

I did look around the instructables, but didn't find any that involved building a 24x16 display. I'll take another look around.

Thanks for the link! I really love the detailed explanation. :slight_smile:

johnwasser:
Even if you wire them as 8 rows of 48 you can place them as 16 rows of 24.

Now that's a very neat idea. Instantly reduced the number of bit shift registers. The more I think about it, the more I think that bitshifts are the way to go, rather than use the 7219. I'll try to decide by the weekend.

But on that note, how do I ensure that I have enough current to be able to light up 16x24=384 LEDs? I know that the arduino's 20mA limit won't be enough. How would I use an external power source to power up the LEDs? Is it as simple as plugging in a higher power source into the arduino?

plastygrove:
Is it as simple as plugging in a higher power source into the arduino?

No.

The good news is that each of the 48 columns will only have one LED turned on at a time. The row outputs will need to drive up to 48 LEDs at a time so that's nearly 1 Amp (0.96) if each draws 20 mA. A resistor per column will be needed to limit current.

johnwasser:
No.

The good news is that each of the 48 columns will only have one LED turned on at a time. The row outputs will need to drive up to 48 LEDs at a time so that's nearly 1 Amp (0.96) if each draws 20 mA. A resistor per column will be needed to limit current.

Correction, max current supplied by the arduino is 40mA. But with fast switching, wouldn't the net power usage be the same as powering them all together? I've used an HCF4094 with an 8x8, it doesn't do very well when an entire column of 8 LEDs are lighted together. I guess the 595 allows more current through the pins than the 4094.

But even the way you say it, assuming each LED requires about 3mA (1.3 V drop across LED, 1K res, 5v Power supply), 48 LEDs goes to 144mA which is more than the 40mA supplied by the arduino. How do I fix this? I don't want the LEDs working with some of them dimmed out.

Going at it the hardway.
Use 5 shift registers - 3 to make the 24 bits, and 2 to make the 16 bits.
I just did a 12x8 that way (didn't need 16 x 8), will post the schematic when I get home.
Simple to expand it 1 more part high and 1 more across.
Concept is simple - resistors pull up individual anodes, shift register at the bottom pulls down common cathode for column to turn on - shift register at the side pulls anode low if an LED is to be off.
No mucking around sourcing current from PNP or P-channel MOSFETs.

CrossRoads:
Use 5 shift registers - 3 to make the 24 bits, and 2 to make the 16 bits.

That's a very cool idea. So effectively join the anodes in the columns and cathodes in the rows. So 3 shift registers for the columns and 2 for the rows. But with this circuit also, wouldn't the current drag be more than the arduino can provide? It's possible to have all 384 LEDs switched on at the same time by making the columns high and the rows low. How do I power it?

"It's possible to have all 384 LEDs switched on "
Only if you screw up! The idea is that no more than 1 column is turned on at a time, the column whose cathode is pulled low.
Here's the start of the array, 5x16 shown so far.
The Anodes get there current via the pullup resistor.

The cathode are all driven high.
The anode are pulled high/low.
ONE cathode is turned on, the LEDs with Anodes not pulled low turn on.
the cathode is turned off.

The anode are pulled high/low.
ONE cathode is turned on, the LEDs with Anodes not pulled low turn on.
the cathode is turned off.

repeat.

What I did was out put the array in memory, and every 500uS read out the anode info, turn off the current cathode, write out the anodes, and turn the next cathode on.
Then during the 500uS, read the serial port, buttons, do math, whatever to update the array as needed.

For a first matrix I really would recommend the MAX7219 chip for simplicity as it deals with all the scanning for you. As you want 24x16 just use 6 chips daisy chained together (1 chip = 8x8 matrix). This shows how to wire them up Arduino Playground - MAX72XXHardware and attached is the schematic I did for my first arduino project. I would use a 10uF/100nF per chip if your driving 6 of them.

Clock5013.pdf (67 KB)

CrossRoads:
What I did was out put the array in memory, and every 500uS read out the anode info, turn off the current cathode, write out the anodes, and turn the next cathode on.
Then during the 500uS, read the serial port, buttons, do math, whatever to update the array as needed.

Thanks! Let me try this out. I've attached a schematic of the display based on your input. Once I can get it to work on the simulator, I'll probably try to get a PCB manufactured for the 8x8 displays and for the bit shifts. Pretty hard to fit all of them on a breadboard. Btw, really like the boards you have on your website, esp the Bobuino :).

Riva:
For a first matrix I really would recommend the MAX7219 chip for simplicity as it deals with all the scanning for you.[/url] and attached is the schematic I did for my first arduino project. I would use a 10uF/100nF per chip if your driving 6 of them.

That was my first impulse. I've even ordered one to play around with. But, it's way cheaper with bit shifts at least where I'm staying. I've been able to wire a single 8x8 to a bit shift register already, so I have a basic understanding.

Looks like a good start. Hard to tell which are anodes & which are cathodes.