Esfera POV con 48 leds multiplexados

Hola

Estamos haciendo una esfera Pov con 48 leds multiplexados por medio de un 4017, pero estamos teniendo problemas con el multiplexado de los leds, y no se nos ocure cuàl puede ser el problema, tal vez tendrìamos que encarar con otro enfoque el programa.

unsigned char dato0, dato1, dato2, dato3, dato4, dato5; //Variables de salida
unsigned char pin0 = 7; //Asignacion de los pines de salida
unsigned char pin1 = 6;
unsigned char pin2 = 5;
unsigned char pin3 = 4;
unsigned char pin4 = 3;
unsigned char pin5 = 2;
unsigned char pin6 = 1;
unsigned char pin7 = 0;
unsigned char i,j; // auxiliares de loops
unsigned char ck = 9; //Asignacion del PIN de Clock
unsigned char rst = 8; //Asignacion del PIN del reset
int d = 500; //Delay auxiliar

// Declaracion de la funcion encargada de llevar el clock al 4017
void clock(void){
digitalWrite(ck, 1);
//delay(1);
digitalWrite(ck, 0);
}

//Declaracion de la funcion que resetea al 4017.
void reset(void){

digitalWrite(rst,1);
//delay(1);
digitalWrite(rst,0);
}

//Para asegurar que las variables se encuentren inicializadas
void clr(void){
dato0 = 0;
dato1 = 0;
dato2 = 0;
dato3 = 0;
dato4 = 0;
dato5 = 0;
}

void limpia(void) {
digitalWrite ( pin0, 0);
digitalWrite ( pin1, 0);
digitalWrite ( pin2, 0);
digitalWrite ( pin3, 0);
digitalWrite ( pin4, 0);
digitalWrite ( pin5, 0);
digitalWrite ( pin6, 0);
digitalWrite ( pin7, 0);
}

void escribeDato(void){

//se aplican mascaras de apagado para volcar las variables datoX a cada pin respectivo
reset();
digitalWrite ( pin0, (dato0 & 1));
digitalWrite ( pin1, (dato0 & 2));
digitalWrite ( pin2, (dato0 & 4));
digitalWrite ( pin3, (dato0 & 8));
digitalWrite ( pin4, (dato0 & 16));
digitalWrite ( pin5, (dato0 & 32));
digitalWrite ( pin6, (dato0 & 64));
digitalWrite ( pin7, (dato0 & 128));
delay(d);
clock();
digitalWrite ( pin0, (dato1 & 1));
digitalWrite ( pin1, (dato1 & 2));
digitalWrite ( pin2, (dato1 & 4));
digitalWrite ( pin3, (dato1 & 8));
digitalWrite ( pin4, (dato1 & 16));
digitalWrite ( pin5, (dato1 & 32));
digitalWrite ( pin6, (dato1 & 64));
digitalWrite ( pin7, (dato1 & 128));
delay(d);
clock();
digitalWrite ( pin0, (dato2 & 1));
digitalWrite ( pin1, (dato2 & 2));
digitalWrite ( pin2, (dato2 & 4));
digitalWrite ( pin3, (dato2 & 8));
digitalWrite ( pin4, (dato2 & 16));
digitalWrite ( pin5, (dato2 & 32));
digitalWrite ( pin6, (dato2 & 64));
digitalWrite ( pin7, (dato2 & 128));
delay(d);
clock();
digitalWrite ( pin0, (dato3 & 1));
digitalWrite ( pin1, (dato3 & 2));
digitalWrite ( pin2, (dato3 & 4));
digitalWrite ( pin3, (dato3 & 8));
digitalWrite ( pin4, (dato3 & 16));
digitalWrite ( pin5, (dato3 & 32));
digitalWrite ( pin6, (dato3 & 64));
digitalWrite ( pin7, (dato3 & 128));
//delay(d);
clock();
digitalWrite ( pin0, (dato4 & 1));
digitalWrite ( pin1, (dato4 & 2));
digitalWrite ( pin2, (dato4 & 4));
digitalWrite ( pin3, (dato4 & 8));
digitalWrite ( pin4, (dato4 & 16));
digitalWrite ( pin5, (dato4 & 32));
digitalWrite ( pin6, (dato4 & 64));
digitalWrite ( pin7, (dato4 & 128));
delay(d);
clock();
digitalWrite ( pin0, (dato5 & 1));
digitalWrite ( pin1, (dato5 & 2));
digitalWrite ( pin2, (dato5 & 4));
digitalWrite ( pin3, (dato5 & 8));
digitalWrite ( pin4, (dato5 & 16));
digitalWrite ( pin5, (dato5 & 32));
digitalWrite ( pin6, (dato5 & 64));
digitalWrite ( pin7, (dato5 & 128));
delay(d);
clock();
}

void setup()
{

//Setea los pines 0 a 7 como salidas
for(i=0;i<10;i++){
pinMode(i, OUTPUT);
}

clr();
reset();

}//setup

void loop()
{

dato0 = 1;
dato1 = 2;
dato2 = 4;
dato3 = 0;
dato4 = 8;
dato5 = 16;
escribeDato();

}