TODOPIC

Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: facosta.ie en 29 de Noviembre de 2016, 14:37:51

Título: Cambiar de Master a Slave en I2C durante la ejecución del PIC?
Publicado por: facosta.ie en 29 de Noviembre de 2016, 14:37:51
Que tal, estoy utilizando el compilador CCS 5.061 y estoy en un proyecto en el que un PIC18F25K80 debe funcionar
como Master y como Slave en momentos determinados. Es posible hacer este cambio en tiempo de ejecución?

Hasta el momento el PIC funciona bien tanto en modo Master como en modo Slave de manera individual pero no consigo
cambiarlo mientras esta corriendo el programa, espero sus comentarios, gracias.
Título: Re:Cambiar de Master a Slave en I2C durante la ejecución del PIC?
Publicado por: KILLERJC en 29 de Noviembre de 2016, 14:40:19
Si, imagino que podrias hacerlo. El tema esta en que tenes que protegerte de que nunca ten quedes sin un Master, y que tampoco tengas 2 o mas Masters.
Título: Re:Cambiar de Master a Slave en I2C durante la ejecución del PIC?
Publicado por: facosta.ie en 29 de Noviembre de 2016, 14:55:59
Me podrían guiar un poco? en CCS sólo existe una instrucción para configurar y es de preprocesador.

#use i2c(SLAVE,ADDRESS=0x16,sda=PIN_C4,scl=PIN_C3,STREAM=DSPIC)
#use i2c(MASTER,sda=PIN_C4,scl=PIN_C3,STREAM=DSPIC)

No existe una función que lo haga después de esto.
Título: Re:Cambiar de Master a Slave en I2C durante la ejecución del PIC?
Publicado por: KILLERJC en 29 de Noviembre de 2016, 15:16:23
Ninguna instruccion directa, Solo las directivas de preprocesador que mostras ( Y que podes poner una sola ). Asi que imagino que deberias modificar los registros a mano para pasarlo a esclavo y viceversa. Rogando que CCS no te agregue alguna instruccion como si fuera maestro y que afecte al uso cuando es esclavo.

En si lo que planteas lo veo enteramente posible. Tal ves mas rebuscado en CCS.
Título: Re:Cambiar de Master a Slave en I2C durante la ejecución del PIC?
Publicado por: facosta.ie en 29 de Noviembre de 2016, 15:28:53
Se complica un poco lo de modificar los registros a mano ya que al no usar esas instrucciones de preprocesador (#use i2c(..)) tampoco me permite utilizar las otras instrucciones de
I2C  :

      i2c_start();           
      i2c_write(address);   
      i2c_write(position);     
      i2c_write(data);
      i2c_stop();

Gracias por las respuestas.