Autor Tema: Control de errores en bus I2C  (Leído 1930 veces)

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

Desconectado PicMinor

  • PIC16
  • ***
  • Mensajes: 236
Control de errores en bus I2C
« en: 23 de Octubre de 2019, 07:29:45 »
¡Saludos al foro!

Me he encontrado con el siguiente problema, a ver si alguien me puede orientar.

Uso un bus I2C utilizando la directiva:
#use I2C (master,SDA=PIN_E7,SCL=PIN_E6,SLOW,FORCE_SW)

En la función de lectura de un chip utilizo al principio:
   i2c_start();                                          // Genera el Start
   Hay_Error=i2c_write(DIR_CHIP);          // Envía el comando WRITE

Funciona perfectamente cuando está todo correcto, pero si fuerzo un cortocircuito entre la línea SCL y GND se queda colgado en la instrucción i2c_write sin volver con el error.
En rutinas del tipo bits-bang, que utilizaba anteriormente, no ocurría ésto y la función volvía con error, como debe de ocurrir.

¿A alguien se le ocurre alguna manera de solventar este problema?

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:Control de errores en bus I2C
« Respuesta #1 en: 23 de Octubre de 2019, 07:43:46 »
Depende del PIC que estes usando....

Citar
#use I2C (master,SDA=PIN_E7,SCL=PIN_E6,SLOW,FORCE_SW)

I2C por software, es decir te vales de la capacidad de los pines.

Citar
Funciona perfectamente cuando está todo correcto, pero si fuerzo un cortocircuito entre la línea SCL y GND se queda colgado en la instrucción i2c_write sin volver con el error.

Muchos de los PICs no poseen salidas open-colector, se simulan poniendo a entrada (alta z 1 logico) y poniendolo como salida y a 0 ( GND - 0 ) Pero muchas veces el driver pone a 1 la salida (En aquellos PICs que no poseen registros como LATx ), seria un error hacer un cortocircuito en las lineas si esto ocurriese, aunque sea por 1us o lo que tarde.

Si se queda trabado es el driver por soft, asi que el problema esta en como se hacen las cosas por software. Si queres arreglarlo no te queda otra que escribir tu propio codigo.


 

anything