Shiftbrite 4x4 Matrix, last 4 SBs are not working

Hi Arduino users, specially those with experience in interfacing macetech's Shiftbrites,

I am having a problem trying to implement my project with arduino and Shiftbrites....

What i want to do:

I want to do something like the Coffee Table , but instead using 81 SBs (9x9), i am using 16 SBs (4x4) and 16x 19" Cables.

What i have already done:

I have connected the SBs in a row and to the arduino and bypassed the power supply V+ and Ground each 4 SBs and at the end of the row, just like in coffeetable_diagram | Watch our Live Twitter LED Table on Us… | Flickr but each 4 instead each 9.

I am using a 7.5V/DC @ 2400mA power supply. this should be enough to power the Sbs and the arduino

i am powering both the arduino and the LED Stripe from the same power supply and connected the SBs ground to the arduino's Gnd pin, see http://roborover.files.wordpress.com/2010/03/arduino.jpg (Gnd under Power Pins.)

The problem

Only 12 of the 16 SBs are responding to the code correctly the last 4 on the row are not responding , if i tell all of them to light red the first 12 are doing it but the last 4 they not being light up or are just showing another color?

So, what am i doing wrong? i double checked that they are working so there is nothing wrong with them, it seems for me like they are not receiving the commands that the other 12 receive.

Have you guys experienced something like this? what could i do to fix this?

Thanks...

The code is quite simple:

#define clockpin 13 // CI
#define enablepin 10 // EI
#define latchpin 9 // LI
#define datapin 11 // DI
 
#define NumLEDs 16
#define NumChannels 3
 
int LEDChannels[NumLEDs][NumChannels] = {0};
int SB_CommandMode;
int SB_RedCommand;
int SB_GreenCommand;
int SB_BlueCommand;

int globalC =0;
boolean inc = true;

void setup() {
 
   pinMode(datapin, OUTPUT);
   pinMode(latchpin, OUTPUT);
   pinMode(enablepin, OUTPUT);
   pinMode(clockpin, OUTPUT);
   SPCR = (1<<SPE)|(1<<MSTR)|(0<<SPR1)|(0<<SPR0);
   digitalWrite(latchpin, LOW);
   digitalWrite(enablepin, LOW);
 
 
}
 
void SB_SendPacket() {
 
    if (SB_CommandMode == B01) {
     SB_RedCommand = 120;
     SB_GreenCommand = 100;
     SB_BlueCommand = 100;
    }
 
    SPDR = SB_CommandMode << 6 | SB_BlueCommand>>4;
    while(!(SPSR & (1<<SPIF)));
    SPDR = SB_BlueCommand<<4 | SB_RedCommand>>6;
    while(!(SPSR & (1<<SPIF)));
    SPDR = SB_RedCommand << 2 | SB_GreenCommand>>8;
    while(!(SPSR & (1<<SPIF)));
    SPDR = SB_GreenCommand;
    while(!(SPSR & (1<<SPIF)));
 
}
 
void WriteLEDArray() {
 
    SB_CommandMode = B00; // Write to PWM control registers
    for (int h = 0;h<NumLEDs;h++) {
        SB_RedCommand = LEDChannels[h][0];
        SB_GreenCommand = LEDChannels[h][1];
        SB_BlueCommand = LEDChannels[h][2];
        SB_SendPacket();
    }
 
    delayMicroseconds(15);
    digitalWrite(latchpin,HIGH); // latch data into registers
    delayMicroseconds(15);
    digitalWrite(latchpin,LOW);
 
    SB_CommandMode = B01; // Write to current control registers
    for (int z = 0; z < NumLEDs; z++) SB_SendPacket();
    delayMicroseconds(15);
    digitalWrite(latchpin,HIGH); // latch data into registers
    delayMicroseconds(15);
    digitalWrite(latchpin,LOW);
 
}
 
void loop() {
   
  allRed(NumLEDs);

}

// 0 - All red
void allRed(int n){
  for (int i=0;i<n;i++){
   LEDChannels[i][0] = 1023;
   LEDChannels[i][1] = 0;
   LEDChannels[i][2] = 0;
  } 
  
  WriteLEDArray();
} 

   
}

Try swapping out some of the last ShiftBrites in the chain. It's possible that a bad module or cable would exhibit this behavior. Also, please take a couple of well lit, clear photos that show the wiring methods between ShiftBrites and to the Arduino.

OK, i discovered that the SB number 11 was not transmitting the signals correctly to the next one so (but was reacting correctly) i swapped it and now i have 14 of the total of 16 working, sadly i have also discovered that the last 2 have also some kind of problem.

i will keep you informed...

Thanks for the support.

Any ShiftBrites you discover are definitely bad we'll replace. Please keep in mind if you short power to any of the outputs (by accidentally draping a bare wire or screwdriver over the contacts, or letting a loose chain of ShiftBrites touch each other) it'll destroy that output driver. It's a general rule for logic chips. You may just have a manufacturing error, too.