MAX7219 64x8 scrolling issues

I'm having an issue getting a 64x8 LED matrix display running right. I have multiple 32x8 boards, and they all work when they are run as 32x8 units, but when they are connected together only the first one runs.

I have tried google (my google-foo has failed it seems), and found other posts on the forums with similar issues and no post showing if/when/how it was fixed

The lib I am using is LedControl (MaxMatrix won't work in my situation) and the code is based on the following attachment(only changes were to the device count, pins, and text).

I think the program might have been hard-coded for 4 max matrices, and I really don't know how to change that.

Scrolltest.ino (15.1 KB)

Note that if you write data to a chain longer than the number of units that you specify to the library, the units beyond that number will echo older data from the first group.

If they do not do that and in fact show nothing at all, then you clearly have them connected incorrectly.

They only have an issue with const int numDevices = 8. Changing 8 to 1, 2, or 4 causes both modules to echo the same thing. And I expected that 5, 6, and 7 would give me a weird display. Using 8 only displays on matrices 0, 1 ,2 and 3.

The connections are as follows:
pin 12 - DIN
pin 11 - CLK
pin 10 - CS/SS
GND - GND
5V - VCC (Same behavior whether it's Arduino powered or external powered.)

Board to board connections:
VCC - VCC
GND - GND
DIN - DOUT
CS - CS
CLK - CLK

boston419:
Changing 8 to 1, 2, or 4 causes both modules to echo the same thing.

OK, so your connections are correct.

That's the extent of my knowledge on this!

I think I found part of the issue...

Old code:

// Display Buffer on LED matrix
void printBufferLong(){
  for (int a=0;a<7;a++){                    // Loop 7 times for a 5x7 font
    unsigned long x = bufferLong [a*2+1];   // Get high buffer entry
    byte y = x;                             // Mask off first character
    lc.setRow(3,a,y);                       // Send row to relevent MAX7219 chip
    x = bufferLong [a*2];                   // Get low buffer entry
    y = (x>>24);                            // Mask off second character
    lc.setRow(2,a,y);                       // Send row to relevent MAX7219 chip
    y = (x>>16);                            // Mask off third character
    lc.setRow(1,a,y);                       // Send row to relevent MAX7219 chip
    y = (x>>8);                             // Mask off forth character
    lc.setRow(0,a,y);                       // Send row to relevent MAX7219 chip
  }
}

Changed code:

// Display Buffer on LED matrix
void printBufferLong(){
  for (int a=0;a<7;a++){                    // Loop 7 times for a 5x7 font
    unsigned long x = bufferLong [a*2+1];   // Get high buffer entry
    byte y = x;                             // Mask off first character
    lc.setRow(7,a,y);                       // Send row to relevent MAX7219 chip
    x = bufferLong [a*2];                   // Get low buffer entry
    y = (x>>56);                            // Mask off second character
    lc.setRow(6,a,y);                       // Send row to relevent MAX7219 chip
    y = (x>>48);                            // Mask off third character
    lc.setRow(5,a,y);                       // Send row to relevent MAX7219 chip
    y = (x>>40);                            // Mask off third character
    lc.setRow(4,a,y);                       // Send row to relevent MAX7219 chip
    y = (x>>32);                            // Mask off third character
    lc.setRow(3,a,y);                       // Send row to relevent MAX7219 chip
    y = (x>>24);                            // Mask off third character
    lc.setRow(2,a,y);                       // Send row to relevent MAX7219 chip
    y = (x>>16);                            // Mask off third character
    lc.setRow(1,a,y);                       // Send row to relevent MAX7219 chip
    y = (x>>8);                             // Mask off forth character
    lc.setRow(0,a,y);                       // Send row to relevent MAX7219 chip
  }
}

(Sorry for the slight mess, trying some edits)

Now the display works on matrices 0, 1, 2, and 7, and skips 3, 4, 5, and 6.

I also get the following errors (from my edit) that now I need to figure out how to fix

C:\Users\Winbox\Documents\Arduino\Scrolltest\Scrolltest.ino: In function 'void printBufferLong()':

C:\Users\Winbox\Documents\Arduino\Scrolltest\Scrolltest.ino:957:13: warning: right shift count >= width of type [enabled by default]

     y = (x>>56);                            // Mask off second character

             ^

C:\Users\Winbox\Documents\Arduino\Scrolltest\Scrolltest.ino:960:13: warning: right shift count >= width of type [enabled by default]

     y = (x>>48);                            // Mask off third character

             ^

C:\Users\Winbox\Documents\Arduino\Scrolltest\Scrolltest.ino:962:13: warning: right shift count >= width of type [enabled by default]

     y = (x>>40);                            // Mask off third character

             ^

C:\Users\Winbox\Documents\Arduino\Scrolltest\Scrolltest.ino:964:13: warning: right shift count >= width of type [enabled by default]

     y = (x>>32);                            // Mask off third character

             ^