Hola a todos
llevo varios dias, con un problema en un codigo de ccs
por mas que lo miro en el depurado con proteus no encuentro el error..
el caso es como narro a continuación:
el master envia un dato al esclavo al pulsar boton,
los datos se los paso mediante un vector y los envio por el puerto i2c .
he intentado ponerle retardo por si se atascaba el receptor ... pero
no funciono nada....no encontre remedio
con esta funcion envio desde el master por i2c al esclavo
..
void escribe_i2c_01(int8 pic, int8 dato ){
i2c_start(); // Condicion Inicio
i2c_write(pic);// Direccion dispositivo
//delay_ms(3); // *** Necesario ***
i2c_write(dato);// dato
//delay_ms(3); // *** Necesario ***
i2c_stop(); // Stop
//delay_us(20);
//delay_ms(1000);
}
....
los datos los tengo en un vector:
envio[]=(2,3, 0, 99);
el cual lo cargo con otra funcion:
...
//angulo, inclinacion, envio, posicion de v1,v2 estdo de motor
void pasa_giro(int8 *v1[], int8 *v2[],int8 *v3[], int8 pos_v, int8 m_on){
v3[0]=v1[pos_v];
v3[1]=v2[pos_v];
v3[2]=m_on;
v3[3]=99;
}
...
la funcion que uso para el envio es esta:
//S1, envio,rango
void envia_sv(int8 PIC, int8 *v[]){
int8 e;
for(e=0;e<4;e++){
printf("\n\r dato envio: %d" v[e]);
escribe_i2c_01(PIC,v[e]);
delay_ms(250);
}//fin for
delay_ms(1000);
}
desde el main uso:
...
..
pasa_giro(angulo, inclina, envio, 0, 0);
envia_sv(S1, envio);
...
pasa_giro(angulo, inclina, envio, 1, 1);
envia_sv(S2, envio);
....
..
con este vector (2, 3, 0, 99);
parece que funciona
pero si le envio algun dato del vector con 1
no envia mas desde ese dato y el master se bloquea, tambine he notado que el sda y el scl
se pone azul en el proteus si printeo lo que sucede despues
del envio del 1 me saca la direcion del esclavo.
tambien conecte el scl y sda al osciloscopio para ver las señales.. pero aun asi..
Necesitaria alguna ayuda por parte del foro,
no logro encontrar el problema o problemas.
gracias por adelantado,..