Tag Archives: i2C

[CCS] i2c_start() y i2c_stop No funcionan (fail) se cuelga (hangs on)

SI  están intentando usar las rutinas de manejo del protocolo i2C  que trae por defecto el CCS y están teniendo el problema de que al llegar a la instrucción i2c_start(); o i2c_stop(); el programa se cuelga (queda tildado) lo que es fácilmente apreciable si se esta simulando el software embebido usando el ISIS de proteus.

El inconveniente esta en que seguramente tienen especificado por software (no importa si lo pusieron o no por hardware vía los fuses) que no van a usar el protocolo SPI , es decir, tienen en su main lo siguiente:

setup_spi(SPI_SS_DISABLED);       <– remove this line of your main routine

La solución esta en comentar o borrar esa linea y wualaaaaa las rutinas dejan de quedarse colgadas.

 

Spurious SCL transition detected at…

Si alguna vez intentaron simular el bus i2C en el ISIS (proteus), puede que se hayan encontrado con ese error.

spuriuos-SCL-transition

El error se debe a un cambio en la linea del clock que no llega a ser correctamente la condición de start.

i2C-debugger-proteus

Se produce por una incorrecta configuración del tris correspondiente al puerto que contiene el i2C implementado en hardware.

En este caso al error lo cometí yo al declarar lo siguiente:   set_tris_c(0b10000011);  X cuando tiene que quedar declaro de la siguiente forma:  set_tris_c(0b10011011);  

Es decir, que mis pines SCL (PIN_C3) y SDA (PIN_C4) tiene que ser configurados como inputs y no como outputs, ya que al hacer esto último como el bus i2C lleva resistores de pull-up  aparece un flanco negativo.

Recordar que para una correcta simulación en lugar de poner resistores comunes (analogicos o digitales) se debe colocar el componente “pullup” que se encuentra dentro de Modelling Primitives