After trial and error, I have successfully created an LED matrix prototype using a Maxim MAX6958 four digit segment display driver. Normally these drivers are used with 7-segment displays, up to four, with a few extra LEDs to display information. A good example is the typical alarm clock you may have next to your bed. I’m using it to drive 36 discrete LEDs which will light up the inserts in my playfield and other features.
MAX6958 LED Matrix
The first step, of course, is to work up a schematic to wire to. The MAX6958 is a fairly complex device to get wired up, especially when used with discrete LEDs instead of 7-segment displays. From the datasheet on page 5, there is a table that shows how the LED matrix should be wired but it is worded assuming you’re using 7-segment displays.
This table was confusing for me at first. You can see in the first four columns have labels for Digit 0 through 3, but the rows are also labeled as digits 0 through 3. Then again on the column labels, there is segment 0 through 9 but within in the table, there is another segment 0 through 7. So what’s what?
Well, if we look at page 18 we’ll find the pinout of the MAX6958. Comparing that pinout to the column labels in the table we can surmise that the column labels are the pins of the MAX6958. So with this knowledge, we know that each of these pins will have four signals going to it.
The other bit of information we can get from this table, and the rest of the datasheet is that the MAX6958 supports four digits. We also know it can support 36 discrete LEDs. 36 divided by 4 gives 9 LEDs for each digit. Lastly, we know that the MAX6958 requires common cathode digits and highlighted right there in the wiring table is four CC signals. CC, Common Cathode, got it!
With all that decoded, we’re ready to wire this LED matrix!
Now that we understand the datasheet, the schematic becomes far easier to create. In fact, I have it right here!
Now, if you’ve read the datasheet you’re probably wondering why on Earth do I have 100Ω resistors in series with the DIG0 through DIG3 signals? Well, if you read my previous post you know that I was having trouble with the MAX6958 entering shutdown if I tried to have more than 2 LEDs on with any digit. Some google searching though led me to a forum post where someone had a similar problem and that adding resistors to the common cathodes fixed it for them.
With my breadboard setup though I hadn’t wired it in such a way that it would be very easy to only have the resistors on the common cathodes, so I just have all four signals on those pins going through the resistor. Since the MAX6958 is a constant current driver, it shouldn’t have any effect on the brightness of those LEDs that would go through two resistors but does lead to more power loss. I will have to experiment further with this to iron out a final design.
But why are these necessary, the datasheet doesn’t mention it at all? That’s a very good question, and one I don’t have an answer to. What I suspect is that it’s because I’m using LEDs with a 3.2 volt forward voltage which is quite a bit higher than your typical 7-segment display. As I mentioned previously, these drivers really are tailor-made for those display rather than discrete LEDs. I do have a support ticket in with Maxim and will update if I get a resolution or explanation of why it wasn’t working and why the resistors were needed.
Up next I will make a post detailing and explaining the source code I wrote to get this LED matrix working on the Teensy 3.6.