Monster Moto Shield - close to giving up

I have ordered two separate Sparkfun Monster Moto Shields from two different suppliers. Both of them seem to show the same issue whether used as a shield on an Uno or via a nano with jumper leads.

Each controller has two drivers and two outputs. One motor driver will work very well turning a motor at half full then half speed clockwise then alternate and do the same counter clockwise, but when the code starts requesting the same of the second driver it goes clockwise but won't do counter clockwise, the direction LED just flickers - this is with no motors connected. If I connect a motor it just goes red and won't turn the motor.

I'm using a 2C lipo and separate supply for the arduinos which have a common ground in each configuration.

I would really appreciate some advice as I am close to binning both of these chips and searching out a different chip. The motors I am using are a test motor which draws 500mA @ 6V and a pair of Dagu Wild Thumper motors connected in parallel.

Shield:

Code:

#define CW 0  // Clockwise motor direction
#define CCW 1 // Clockwise motor direction
#define BREAK_GND 2 // Break motor to GND
#define BREAK_VCC 3 // Break motor to GND

#define MOTOR1 0 // Used to select motor output 1 (A1-B1)
#define MOTOR2 1 // Used to select motor output 2 (A2-B2)

#define INA1 7 // DIO pin used for motor A1 control
#define INB1 8 // DIO pin used for motor B1 control
#define INA2 4 // DIO pin used for motor A2 control
#define INB2 9 // DIO pin used for motor B2 control
#define PWM1 5 // DIO pin used for motor 1 PWM speed control
#define PWM2 6 // DIO pin used for motor 1 PWM speed control


void setup()
{
  /* Set control pins to outputs */
  pinMode(INA1, OUTPUT); // Motor 1 control A
  pinMode(INB1, OUTPUT); // Motor 1 control B
  pinMode(INA2, OUTPUT); // Motor 2 control A
  pinMode(INB2, OUTPUT); // Motor 2 control B
  pinMode(PWM1, OUTPUT); // Motor 1 PWM speed control
  pinMode(PWM2, OUTPUT); // Motor 2 PWM speed control
 
  /* Set both motor outputs to stop */
  MotorState(MOTOR1, BREAK_GND);
  MotorState(MOTOR2, BREAK_GND);
}

/* Main program */
void loop()
{
  
  MotorState(MOTOR1, CW); // Set motor to clockwise direction
  MotorSpeed(MOTOR1, 128); // Set motor 1 to half speed
  delay(500);
  MotorSpeed(MOTOR1, 255); // Set motor 1 to full speed
  delay(500);
  MotorSpeed(MOTOR1, 128); // Set motor 1 to half speed
  delay(500);
  MotorState(MOTOR1, BREAK_GND); // Stop the motor
  delay(500);
 
  MotorState(MOTOR1, CCW); // Set motor to counter clockwise direction
  MotorSpeed(MOTOR1, 128); // Set motor 1 to half speed
  delay(500);
  MotorSpeed(MOTOR1, 255); // Set motor 1 to full speed
  delay(500);
  MotorSpeed(MOTOR1, 128); // Set motor 1 to half speed
  delay(500);
  MotorState(MOTOR1, BREAK_GND); // Stop the motor
  delay(500);
 
 
   MotorState(MOTOR2, CW); // Set motor to clockwise direction
  MotorSpeed(MOTOR2, 128); // Set motor 1 to half speed
  delay(500);
  MotorSpeed(MOTOR2, 255); // Set motor 1 to full speed
  delay(500);
  MotorSpeed(MOTOR2, 128); // Set motor 1 to half speed
  delay(500);
  MotorState(MOTOR2, BREAK_GND); // Stop the motor
  delay(500);
 
  MotorState(MOTOR2, CCW); // Set motor to counter clockwise direction
  MotorSpeed(MOTOR2, 128); // Set motor 1 to half speed
  delay(500);
  MotorSpeed(MOTOR2, 255); // Set motor 1 to full speed
  delay(500);
  MotorSpeed(MOTOR2, 128); // Set motor 1 to half speed
  delay(500);
  MotorState(MOTOR2, BREAK_GND); // Stop the motor
  delay(500);
}


/* Sets the state of one of the motors where Motor is either
   MOTOR1 or MOTOR2 and State is one of 4 options:
   CW = Motor turns in clockwise direction
   CCW = Motor turns in counter clockwise direction
   BREAK_GND = Breaks the motor to GND
   BREAK_VCC = Breaks the motor to VCC */
   
void MotorState(byte Motor, byte State)
{
  switch(State)
  {
    case CW:
      digitalWrite(Motor ? INA2 : INA1, HIGH);
      digitalWrite(Motor ? INB2 : INB1, LOW);
    break;
 
    case CCW:
      digitalWrite(Motor ? INA2 : INA1, LOW);
      digitalWrite(Motor ? INB2 : INB1, HIGH);
    break;
   
    case BREAK_GND:
      digitalWrite(Motor ? INA2 : INA1, LOW);
      digitalWrite(Motor ? INB2 : INB1, LOW);
    break;
   
    case BREAK_VCC:
      digitalWrite(Motor ? INA2 : INA1, HIGH);
      digitalWrite(Motor ? INB2 : INB1, HIGH);
    break;
  }

}

/* Sets the motor speed where Motor is either MOTOR1 or MOTOR2
   and Speed is a number between 0 and 255 where 0 = stopped
   and 255 = full speed. */
void MotorSpeed(byte Motor, byte Speed)
{
  if (Motor)
  {
    analogWrite(PWM2, Speed);
  }else
  {
    analogWrite(PWM1, Speed); 
  }
}

I have ordered two separate Sparkfun Monster Moto Shields from two different suppliers. Both of them seem to show the same issue whether used as a shield on an Uno or via a nano with jumper leads.

At ~$70 each, you might contact sparkfun and have them evaluate your situation. I would suspect that if one of the h-bridges works, then there might be a hardware or wiring issue on the other. You might swap the control wiring from the working h-bridge over to the non working h-bridge to see if it will work. Have you tried the code from the sparkfun site?

I see some similarities to this recent thread (click !).
Perhaps you guys can team up to find out what's going on with these shields.