Trouble with MAX7219 8x8 LED Matrix

Hey, so I've been building an 8x8 led matrix with white LEDS, I figured the schematic was rather straightforward but when i made my PCB and soldered everything, there seems to be some issues, particularly with the data addresses i use: if i use the display test mode, not all the leds light up (which seem to indicate some soldering issues), but when i light up a specific LED (that works with the display test mode), the coordinates I give him don't seem to match the actual LED on the board.

Before creating the final schematic, I had worked with a 8x8 matrix module and that worked, and still does, perfectly.

As you can see from the attached picture of the schematic ( there's more stuff but they are not connected to the led matrix + driver ), i have connected the Segments outputs of the MAX7219 as rows in the matrix, and the digits outputs as the columns. I REALLY hope i didn't somehow fuck up these connections as I already have made the PCB at home and don't really want to make it again.

So, in short, do you think this schematic can work? If so, that'd be a relief and I could start looking for the issues elsewhere. What I could have done better was making sure that it worked BEFORE making the pcb... stupid me i guess.

Sorry if there's a stupid mistake somewhere, but I just can't figure this out, im lost at the moment :frowning:

I'm using the LEDControl library for arduino if that helps... If needed, I can provide the full sch + brd.

.

As you have already taken a lot of interest and pain to build the LED-Matrix display unit, I would like to suggest you to carry out the following steps for testing the active condition of each and every LED. If test does not pass, you can work a bit on re-soldering. If the matrix co-ordinates do not match with what has been given in the third-part library, that will not matter much; you will always be able to program your LED-Matrix Unit.

You may take the following conventions for you:
1. LEDA Line is R0 Line (Row-0); LEDB Line is R1; .....; LEDDP) Line is R7.
2. LED0 Line is C0 Line (Colun-0); LED1 Line is C1; ....; LED7 line is C7.
3. The following co-ordinates could be recorded for all the LEDs:
LED01 has the co-ordinate : L00 (LED at R0/C0)
LED02 has the co-ordinate : L01 (LED at R0/C1)
....................................................................
LED08 has the co-ordinate : L07 (LED at R0/C7)

//----------------------------------------------------------------
LED09 has the co-ordinate : L10 (LED at R1/C0)
LED10 has the co-ordinate : L11 (LED at R1/C1)
....................................................................
LED16 has the co-ordinate : L12 (LED at R1/C7)
//------------------------------------------------------------------

.......................................................................................

//-------------------------------------------------------------------
LED57 has the co-ordinate : L70 (LED at R7/C0)
LED58 has the co-ordinate : L71 (LED at R7/C1)
....................................................................
LED64 has the co-ordinate : L77 (LED at R7/C7)
//-------------------------------------------------------------------

You can edit your schematic and re-designate the LEDS' legends; so, they logically agree with your co-ordinates. This will make the programming very friendly.

The solution that you proposed is something very similar to a previous couple of tests i had done on the 8x8 modules... i attached 4 module together ( DOUT ---> DIN ) and for design reasons, the modules had to be rotated 90° each time, creating a 16x16 matrix altogether. When programming it normally, ofcourse the internal logic wouldn't know that each module was rotated, resulting in missplaced coordinates most of the time. What I did was create a 16x16 array in the software, and mark as 1 each cell that i wanted to light up, viewing it as the final product would appear ( without the rotation in mind ). then i would use a double for cycle to scan each cell of the array, and check in which module it would appear ( first or second or third or fourth module) in the final product. When that was clear, use some math to make the rotation and light up the correct LED.

By the way, spending a few more hours testing the PCB, it appears i have somehow missed that the DP row is supposed to go as the first row, instead of the last. This means that if i tell the MAX7219 to cycle through each row and light them up with a for cycle from 0 to 7, it firsts light up the DP row, which is located at the bottom of the PCB, and then it goes and lights up A, which is at the top, then goes normally through B, C, D... oops. I assume that means I have to manually cut some of the traces and "slide them" one bit, so DP would connect to the first one at the top, A to the second one from the top and so on... pretty hard to explain it lol, and my crappy english doesnt really help, its not my main language!

The following structure belongs to an 8x8 LED Matrix display unit, and it has been taken from the IDE example. The layout and LED orientation of this matrix agrees with the architecture of MAX7912 where SEGDP has been placed (you have also discovered it) to the left-most position and then SEGA and then SEGB and so on. Your matrix seems to have the arrangement as: SEGP to the left-most (could be considered) and then SEGG and then SEGF, and so on. You are correct in your diagnosis that the matrix has to be aligned by cutting the PCB tracks in order to be compatible with MAX7219 architecture.

BTW: I have a sample of the following MAX7219 driven 8x8 LED Matrix Module and it works fine with the IDE example under MAX7219.h Library

Thanks for your answer, that was really helpful as confirmation of my theory. Shame I didn’t find that picture before.
I believe the issue sprouted from the fact that I used a custom made component symbol for the max7219 with the pins placed the way they are at the moment in the schematic, and I followed it blindly without a second question. Learnt some for the next time I guess! Will make the necessary changes in the upcoming days and let you know if it all works