Autor Tema: RESUELTO - Duda con comunicación I2C  (Leído 2329 veces)

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

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18286
    • MicroPIC
RESUELTO - Duda con comunicación I2C
« en: 11 de Octubre de 2015, 04:29:03 »
Hola amigos, llevo dos días peleando con una comunicación I2C y ya me tiene loco.

Es un PIC24FJ64GA004 que se comunica con una EEPROM 24LC16 a través de su I2C2 (SDA=RB2, SCL=RB3). Tengo colocadas unas pullups de 4K7.

El caso es que lo único que hago en mi programa es inicializar el bus y un bucle de escrituras y lecturas para comprobar su funcionamiento. Si no lo toco, las lecturas siempre son 0xFF, pero en cuanto toco con algo metálico la señal SDA, la comunicación empieza a funcionar perfectamente.

He probado a cambiar las pullups por otros valores (1K y 10K) y sigue igual. Por supuesto he revisado todas las soldaduras y he asegurado bien los condensadores de desacoplo tanto junto al PIC como junto a la EEPROM

¿Me dais alguna pista?

Desconectado juaperser1

  • Colaborador
  • DsPIC30
  • *****
  • Mensajes: 2979
Re:Duda con comunicación I2C
« Respuesta #1 en: 11 de Octubre de 2015, 06:10:47 »
Configura los pines antes que i2c, a mi me ha pasado ese tipo de chorradas en microchip miles de veces que cambiando el orden funcionaba, en tu caso al tocarlo con algo metálico, puedes estar haciendo que se reinicie o alto y heche a andar.

Parece una chorrada pre prueba lo.
Visita mi canal para aprender sobre electrónica y programación:

https://www.youtube.com/channel/UCxOYHcAMLCVEtZEvGgPQ6Vw

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18286
    • MicroPIC
Re:Duda con comunicación I2C
« Respuesta #2 en: 11 de Octubre de 2015, 07:09:00 »
Sí, ya había probado a eso.
De hecho ahora mismo lo tengo así:

Código: C++
  1. output_float(PIN_B2);
  2. output_float(PIN_B3);
  3. I2C_INIT(400000);
  4.  
  5. while (1) {    
  6.         write_sdcard(10,48);
  7.         delay_ms(20);  
  8.         fprintf (DEBUG,"%u ",read_sdcard(10));
  9.         delay_ms(20);
  10. }

Desconectado juaperser1

  • Colaborador
  • DsPIC30
  • *****
  • Mensajes: 2979
Re:Duda con comunicación I2C
« Respuesta #3 en: 11 de Octubre de 2015, 07:51:19 »
si no me equivoco eso es CCS,

puedes poner un poco mas de la configuracion del del I2C es decir

que has puesto en las directivas #USE I2C(MASTER,¿I2C1 o I2C2?, xx,xx), a ver si te has confundido y has puesto el 1, yo que se por probar descartar cosas

y puedes poner la función:

write_sdcard(10,48);

y una cosa mas, este micro tiene PPS, por lo tanto debes de configurar los pines como I2C para que no tengan otra función, es decir remapearlos, no se si ccs lo hace automaticamente al configurar el I2C, por que si miras la pagina 98 del manual te habla del PPS

debes de colocar el PPS de esta forma por ejemplo:

#pin_select U1TX=PIN_C6
#pin_select U1RX=PIN_C7

pero no dice nada del I2C por lo tanto deberia hacerlo la función por defecto.

un saludo
« Última modificación: 11 de Octubre de 2015, 07:56:15 por juaperser1 »
Visita mi canal para aprender sobre electrónica y programación:

https://www.youtube.com/channel/UCxOYHcAMLCVEtZEvGgPQ6Vw

Desconectado RedPic

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 5544
    • Picmania by Redraven
Re:Duda con comunicación I2C
« Respuesta #4 en: 11 de Octubre de 2015, 08:08:10 »
Manolo, ¿le has puesto al #use i2c el FORCE_HW? No recuerdo si era el SPI o el I2C que había que declarar específicamente que se quería utilizar por hardware, recuerdo que una de las dos por defecto era por HW y el otro por SW.

En la iACD 2.0 con el PIC24FJ256GA110 tengo esta definición:

Código: C++
  1. #use i2c(MASTER, I2C1, FORCE_HW, stream=STREAM_I2C_RTC)
« Última modificación: 11 de Octubre de 2015, 08:11:08 por RedPic »
Contra la estupidez los propios dioses luchan en vano. Schiller
Mi Güeb : Picmania

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18286
    • MicroPIC
Re:Duda con comunicación I2C
« Respuesta #5 en: 11 de Octubre de 2015, 12:45:59 »
Sí, la directiva de uso del bus I2C la tengo así:

Código: C++
  1. #use I2C(I2C2,FORCE_HW)


No se puede hacer pin_select sobre el I2C, el bus I2C no es remapeable.

Insisto en que la comunicación I2C funciona perfectamente una vez que toco el pin SDA, así que está todo bien asignado y configurado, pero no hace nada hasta ese toque mágico  :5]

Desconectado RedPic

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 5544
    • Picmania by Redraven
Re:Duda con comunicación I2C
« Respuesta #6 en: 11 de Octubre de 2015, 13:29:47 »
Lo único parecido que me ha pasado a mi fue con un 16F628A con un MAX232 que sólo funcionaba si tocaba con el dedo el cristal de cuarzo, obviamente era un error de falta de masa (GND)  :shock:
Contra la estupidez los propios dioses luchan en vano. Schiller
Mi Güeb : Picmania

Desconectado pablomanieri

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 639
Re:Duda con comunicación I2C
« Respuesta #7 en: 11 de Octubre de 2015, 13:52:05 »
Creo que para 400khz las resistencias de pullup deben ser de 2.2k.

Verifica el estado del bit DISSLW: Slew Rate Control Disable bit
(0=Slew rate control is enabled for High-Speed mode (400 kHz))
No se si el CCS lo configura automáticamente

Saludos

Desconectado juaperser1

  • Colaborador
  • DsPIC30
  • *****
  • Mensajes: 2979
Re:Duda con comunicación I2C
« Respuesta #8 en: 11 de Octubre de 2015, 14:36:34 »
Citar
Lo único parecido que me ha pasado a mi fue con un 16F628A con un MAX232 que sólo funcionaba si tocaba con el dedo el cristal de cuarzo, obviamente era un error de falta de masa (GND)  :shock:

eso tambien me ha pasado a mi.

y otro problema que tenia, en una comunicación i2c es que el esclavo era mas lento que el maestro y tenia que poner un retraso en la inicializacion del maestro para darle tiempo al esclavo, claro que no era una memoria.

es muy raro lo que te pasa.
Visita mi canal para aprender sobre electrónica y programación:

https://www.youtube.com/channel/UCxOYHcAMLCVEtZEvGgPQ6Vw

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18286
    • MicroPIC
Re:Duda con comunicación I2C
« Respuesta #9 en: 11 de Octubre de 2015, 15:44:35 »
Por fin encontré la solución.

He añadido la cláusula NOINIT a la directiva del I2C, para que sólo lo declare, pero no lo inicialice hasta que llegue el comando I2C_INIT más adelante.
Y así funciona bien.

Misterios de la ciencia

Código: C++
  1. #use I2C(I2C2,NOINIT)

Desconectado juaperser1

  • Colaborador
  • DsPIC30
  • *****
  • Mensajes: 2979
Re:RESUELTO - Duda con comunicación I2C
« Respuesta #10 en: 11 de Octubre de 2015, 15:50:43 »
pues ala arreglado  :D :D una cosa menos
Visita mi canal para aprender sobre electrónica y programación:

https://www.youtube.com/channel/UCxOYHcAMLCVEtZEvGgPQ6Vw

Desconectado RedPic

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 5544
    • Picmania by Redraven
Re:Duda con comunicación I2C
« Respuesta #11 en: 11 de Octubre de 2015, 16:29:08 »
Por fin encontré la solución.

He añadido la cláusula NOINIT a la directiva del I2C, para que sólo lo declare, pero no lo inicialice hasta que llegue el comando I2C_INIT más adelante.
Y así funciona bien.

Misterios de la ciencia

Código: C++
  1. #use I2C(I2C2,NOINIT)

 :shock: :shock: :shock:

En fin ... otra de esas que alguien tiene que recordar haber oído hablar cuando aparezca otro damnificado con los mismos síntomas. Anotado queda  :mrgreen:
Contra la estupidez los propios dioses luchan en vano. Schiller
Mi Güeb : Picmania

Desconectado xocas

  • Administrador
  • PIC24H
  • *******
  • Mensajes: 2312
Re:RESUELTO - Duda con comunicación I2C
« Respuesta #12 en: 12 de Octubre de 2015, 06:40:19 »
He marcado el tema como Solucionado.

Ahora aparecerá marcado como tal en la lista de temas y no será necesario indicarlo textualmente.

saludo

La marca de tema resuelto es este icono:

« Última modificación: 12 de Octubre de 2015, 06:47:30 por xocas »

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18286
    • MicroPIC
Re:RESUELTO - Duda con comunicación I2C
« Respuesta #13 en: 12 de Octubre de 2015, 07:09:37 »
Muy útil, sí señor.