Autor Tema: Duda con i2c  (Leído 3062 veces)

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

Desconectado Vala220805

  • PIC10
  • *
  • Mensajes: 18
Duda con i2c
« en: 05 de Diciembre de 2016, 18:54:18 »
Buen dia a todos.
Estoy trabajando en un proyecto donde debo mover unos servos por medio de un imu, para esto se que debo hacer uso de la comunicación i2c. Pero es aqui donde tengo problema, al momento de simular la i2c, me da ruido el i2c, adjunto mi codigo por si me pueden ayudar, muchas gracias. Por cierto uso mikroc como compilador

* Captu2ra.PNG
(22.44 kB, 784x456 - visto 484 veces)


Despues de haber agregado las interrupciones, ocurrio esto

* debug.PNG
(23.84 kB, 784x448 - visto 491 veces)
« Última modificación: 06 de Diciembre de 2016, 14:40:44 por Vala220805 »

Desconectado colotron

  • PIC12
  • **
  • Mensajes: 73
    • Canal de YouTube
Re:Duda con i2c
« Respuesta #1 en: 06 de Diciembre de 2016, 07:45:15 »
¿Las lineas de datos y clock del I2C tienen resistores de pullup?

Desconectado Vala220805

  • PIC10
  • *
  • Mensajes: 18
Re:Duda con i2c
« Respuesta #2 en: 06 de Diciembre de 2016, 13:43:12 »
Gracias por tu respuesta, si los pullups estan activados

Desconectado colotron

  • PIC12
  • **
  • Mensajes: 73
    • Canal de YouTube
Re:Duda con i2c
« Respuesta #3 en: 06 de Diciembre de 2016, 14:23:25 »
Ok... ahí no me dejaste otra opción que mirar el ćodigo :P

Aparentemente en el main() pusiste código de prueba, porque veo que hay funciones de lectura y escritura de registro que no están siendo llamadas.

Cuestiones:

1) Adentro del while(1) usas _start(), _Wr(), _Stop() cosa que no haría nada porque la acción solo sería tomar el bus i2c, escribir dirección del esclavo, y parar. Habría que mandar otro dato que sería la dirección del registro a leer. Quiero decir, que la secuencia sería (sacado de http://download.mikroe.com/documents/compilers/mikroc/pic/help/i2c_library.htm ):

Para leer un registro:
I2C1_start();
I2C1_Wr(direccionEsclavo);
I2C1_Wr(direccionRegistro);
I2C1_Repeated_Start();
I2C1_Wr(direccionEsclavo + 1);
valorRegistro = I2C1_Rd(0);
I2C1_Stop();

Para escribir un registro:
I2C1_start();
I2C1_Wr(direccionEsclavo);
I2C1_Wr(direccionRegistro);
I2C1_Wr(valorAEscribirEnRegistro);
I2C1_Stop();

1.1) Hacen falta los delay() entre las funciones que mencioné arriba?, creería que son funciones no asíncronos, o síncronas bah, pero en última instancia no deberían alterar el comportamiento.

2) ¿Será que está mal la dirección de esclavo? veo que en tu código del main estás usando
   I2C1_Wr( 0x42 );
Pero luego en MPU6050.c veo
#define MPU6050_ADDRESS             0b11010010
Que sería 0xD2 y no 0x42.
Verifica que la dirección de esclavo sea la correcta, de lo contrario el esclavo I2C no responderá nada porque le estaríamos hablando al dispositivo equivocado.

Desconectado Vala220805

  • PIC10
  • *
  • Mensajes: 18
Re:Duda con i2c
« Respuesta #4 en: 06 de Diciembre de 2016, 14:39:55 »
Muchas gracias por responder.
Si en efecto solo es de prueba el while, y si ya intente con la configuracion como viene en el ejemplo de mikroc
Referente a los delay ya los agregue, meti un delay de 100ms entre las funciones.
Y lo de la dirección, por lo mismo que era de prueba meti esa, pero aun haciendo los cambios como me comentas, sigue metiendome ruido, de hecho ocurrio algo curioso, ahora me aparecen mas signos de interrogación en el debugger. adjuntare eso en el primer mensaje.
Añadiendo informacion, ya comprobe que el bit ack este respondiendome, y lo hace. aun sigo sin encontrar el fallo.

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:Duda con i2c
« Respuesta #5 en: 06 de Diciembre de 2016, 14:54:53 »
La direccion esta formada por 7 bits. 6 son : 110100

1 depende del pin 7 del MPU, si esta en 1 queda: 1101001
Si esta en 0 queda: 1101000

Luego el 8vo bit es para escribir/leer.

Sera por que el pin7 estara en 0 ?

Desconectado Vala220805

  • PIC10
  • *
  • Mensajes: 18
Re:Duda con i2c
« Respuesta #6 en: 06 de Diciembre de 2016, 16:14:45 »
Gracias por tu respuesta KILLERJC,
Por lo que entendi en el datasheet, en efecto son 7 bits los del mpu, el LSB bit puede ser uno o cero, pero tengo entendido que esto es para identificar al mpu, por que se pueden poner dos mpu en el mismo pic, pero para identificarlos uno sera 1101000 y otro seria 1101001. mas el octavo bit que como mencionas seria el de escritura o lectura

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:Duda con i2c
« Respuesta #7 en: 06 de Diciembre de 2016, 17:48:46 »
Exacto, ese 7mo bit tendrias que ver, si es 1 o 0. Ese 7mo bit se toma desde uno de los pines del MPU que creo que se llama AD0, pero para no complicarse la vida midiendo. Proba con la direccion 1101000 y si fuonciona era la direccion :P

Desconectado Vala220805

  • PIC10
  • *
  • Mensajes: 18
Re:Duda con i2c
« Respuesta #8 en: 06 de Diciembre de 2016, 18:29:03 »
Tienes mucha razon KILLERJC por esa parte del mpu si, pero aun tengo el problema con la comunicacion i2c, que me esta metiendo mucho ruido en la simulación

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:Duda con i2c
« Respuesta #9 en: 06 de Diciembre de 2016, 22:17:52 »
ruido en la simulación

En una simulacion no tenes ruido... es algun otro problema seguro.

Desconectado Vala220805

  • PIC10
  • *
  • Mensajes: 18
Re:Duda con i2c
« Respuesta #10 en: 07 de Diciembre de 2016, 01:14:47 »
Bueno eso si tienes razon, a lo que me refiero es que al usar el i2c debugger, me aparece que existe ruido y me salen esos signos de interrogación, se que debe ser algun error en el codigo, pero no ubico cual es. Ya que probe con otro ejemplo de i2c en proteus, y no me salieron esos signos de interrogacion.
Gracias por responder

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:Duda con i2c
« Respuesta #11 en: 07 de Diciembre de 2016, 07:30:40 »
.... Las pull-ups de que valores son?

... Por que se esta enviando un start y un stop? Ya que segun el datasheet del MPU es

start ( S )
direccion
direccion registro
dato
stop ( P )

Es eso o la simulacion anda para la ............ ( rellene con el sustantivo que mas le parezca )
Y tal ves os estamos rompiendo la cabeza cuando es el simulador que no funciona. O tal ves ni si quisiera tiene realizado la simulacion del MPU

Desconectado Vala220805

  • PIC10
  • *
  • Mensajes: 18
Re:Duda con i2c
« Respuesta #12 en: 08 de Diciembre de 2016, 00:07:44 »
 :D Bueno en esa parte puede que sea verdad, a lo mejor solo es la simulacion que da problemas, en estos dias probare en fisico. Muchas gracias por sus respuestas


 

anything