Autor Tema: :: i2c no permite enviar 1 como dato ::  (Leído 1197 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado pajaro

  • PIC24H
  • ******
  • Mensajes: 1121
:: i2c no permite enviar 1 como dato ::
« en: 10 de Agosto de 2012, 17:51:57 »
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
Código: C++
  1. ..
  2. void escribe_i2c_01(int8 pic, int8 dato ){
  3.      i2c_start();    // Condicion Inicio
  4.      i2c_write(pic);// Direccion dispositivo
  5.      //delay_ms(3);    // *** Necesario ***
  6.      i2c_write(dato);// dato
  7.      //delay_ms(3);    // *** Necesario ***
  8.      i2c_stop();     // Stop
  9.      //delay_us(20);
  10.      //delay_ms(1000);
  11.  }
  12. ....

los datos los tengo en un vector:

envio[]=(2,3, 0, 99);

el cual lo cargo con otra funcion:

Código: C++
  1. ...
  2.  //angulo, inclinacion, envio, posicion de v1,v2 estdo de motor
  3. void pasa_giro(int8 *v1[], int8 *v2[],int8 *v3[], int8 pos_v, int8 m_on){
  4.    v3[0]=v1[pos_v];
  5.    v3[1]=v2[pos_v];
  6.    v3[2]=m_on;
  7.    v3[3]=99;
  8.    
  9. }
  10. ...

la funcion que uso para el envio es esta:

Código: C++
  1. //S1, envio,rango
  2. void envia_sv(int8 PIC, int8 *v[]){
  3. int8 e;
  4.        for(e=0;e<4;e++){
  5.          printf("\n\r dato envio: %d" v[e]);
  6.          escribe_i2c_01(PIC,v[e]);
  7.          delay_ms(250);
  8.        }//fin for
  9.        delay_ms(1000);
  10.  
  11. }


desde el main uso:

Código: C++
  1. ...
  2. ..
  3. pasa_giro(angulo, inclina, envio, 0, 0);
  4. envia_sv(S1, envio);
  5. ...
  6. pasa_giro(angulo, inclina, envio, 1, 1);
  7. envia_sv(S2, envio);
  8. ....
  9. ..

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,..



Desconectado jukinch

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 608
Re: :: i2c no permite enviar 1 como dato ::
« Respuesta #1 en: 10 de Agosto de 2012, 18:14:57 »
Pájaro:
mirá este hilo quizá te sea útil:
 http://www.todopic.com.ar/foros/index.php?topic=37028.msg307851#msg307851
          saludos.
            jukinch
"Divide las dificultades que examinas en tantas partes como sea posible para su mejor solución." -René Descartes

Desconectado pajaro

  • PIC24H
  • ******
  • Mensajes: 1121
Re: :: i2c no permite enviar 1 como dato ::
« Respuesta #2 en: 11 de Agosto de 2012, 16:14:08 »
Hola
gracias jukinch.

yo pienso que mi problema no es el vector, a lo mejor estoy equivocado..
pero uso los vectores asi y me han funcionado pero el i2c...

mi problema creo que es que por alguna razon que aun desconozco o no di con ella,
esto es que el envio de datos por i2c desde el master al esclavo se bloquea
y creo que es desde el esclavo ademas
cuando envia un dato el master y ese dato es 1 con el resto de datos no que no es 1,
no se da este comportamineto (si pudiera ver el tramado de SCL
y SDA con alguna grafica en proteus para ver como hacen las señales ...)
no se si es el ccs o el simulador proteus, o algun error muy tonto en el codigo de i2c.

Si pudiera cargar directamente sobre el pic fisicamante y depurar sobre el pic con el ccs
eso seria una maravilla.

Agradezco tu respuesta y el interes que te has tomado, gracias compañero.

Un cordial saludo.




 

anything