I have made three different boards using a matrix and a max7219 (starting from scratch each time). Carefully checking the wires. And a friend of my also checked it. We could not find any errors.
I'll see if I can make a picture of a cleaner version (the current one wires are overlaying each other so a picture will not show anything usefull right now).
But if the wiring was incorrect and shifted the rows, I must have misplaced 50% of the connections, which should be rather easy to spot.
This code fix it:
MyLedControl::MyLedControl(int dataPin, int clkPin, int csPin, int numDevices) : LedControl(dataPin, clkPin, csPin, numDevices)
{
}
void MyLedControl::setLed(int addr, int row, int column, boolean state)
{
LedControl::setLed(addr, row, (7 == column) ? 0 : column + 1, state);
}
void MyLedControl::setRow(int addr, int row, byte value)
{
byte b = (value & 0x01) << 7;
b |= value >> 1;
LedControl::setRow(addr, row, b);
}