I2C Multimaster + Slaves

Consulta porgramación en C CCS Sistema MULTIMASTER I2C

Buenas tardes, estoy en un proyecto de un pequeño robot del cuál estoy simulando sensores, la parte de los mismos no es problema, si es problema es la comunicación I2C Todos los pic sonPIC16F877A

MASTER1 #use I2C(MULTI_MASTER,SLOW,Sda=PIN_C4,scl=PIN_C3,address=0xA0) --> M1

AUXILIAR #use I2C(MULTI_MASTER,SLOW,sda=PIN_C4,scl=PIN_C3,address=0xA2) --> AU

CMPS03 #use I2C(Slave,SLOW,sda=PIN_C4,scl=PIN_C3,address=0xC0) --> BR

EEPROM 24LC256C (Almacena datos de 32 bits mediciones de los 4 sensores SRF05 (simulados y que funcionan)

M1 manda pulsos a BR y luego a AUX sin entorpecerse entre ellos, incluso controlo cuando han acabado para realizar los accesos a la EEPROM y las teóricas comunicaciones I2C es decir

1) Pulso a desde M1 a BR (Realiza conversión ADC simulando medida de grados)
2) BR Pulso a M1 (medida realizada lista para pasar)
3) M1 Lee por I2C a BR (Primera lectura correcta)
4) BR indica a M1 final de transmisión.
5) M1 envia pulso a AU (activa los 4 sensores y espera a leerlos por las entradas 4 a 7 del puerto B)
6) AU Realiza la conversión de datos
7) AU envia por I2C a la EEProm las 4 mediciones (OK escritura)
8) AU envia a M1 ok del proceso como prueba de que puede leer la memoria de datos
9) M1 Lee por I2C la memoria y almacena los datos leídos en variable OK Lectura
10) Vuelta al principio

Bien en cuanto se pasa a la siguiente ronda y vuelve a mirar al PIC que hace de brújula pasa la siguiente secuencia I2C:

S C0 N 02 N Sr C1 N FF N P

donde antes en la primera vez que se ejecuta la secuencia es, sin cambiar el valor:

S C0 A 02 A Sr C1 A 91 A P

Usando Proteus 7.8 SP2 realizo la simulación y mediante el I2C Debugger tengo esto
Con lo cual da una lectura errónea. Viendo lo de arbitrariedad y sincronización de reloj igual el tema de este error va por ahí

Mi duda es ¿por qué la primera vez lo hace bien y luego cuando se ha cambiado de master da un no reconocimiento de dispositivo?

1) Como se puede controlar el cambio de un master a otro y luego que tengan un acceso al bus correcto, inclusive no habiendo colisiones teórocas ya que cuando uno a acabado el otro empieza a actuar sobre el bus I2C
2) ¿El tema es un bug que no tiene solución?
3) Como es posible que el AUXiliar realizando el acceso al bus correctamente?
4) Hay ejemplos con MULTIMASTER en C CCS???? Se que hay extensa teoría de la propia MICROCHIP pero no especifican con
ejemplos el tema del MULTIMASTER
5) Si hay que controlar el BuS I2C cual es el método mas apropiado?
6) Tiene que ver con las interrupciones o flags d elos registros del Moduloa SSP?
7) Configuraciones de Puertos (inluso en el master principal cada vez que pasa de una lectura a otra pongo la orden
TRISC =0b00011000 (teóricamente situación identica al inicio

Si alguien sabe de esto o un link que pueda haber códigos de ejemplo en CCS, documentación lo que sea que aumente el grado de tealle de como se deben configurar y/o controlar los cambios de MASTER en este entorno que he propuesto.

MUCHAS GRACIAS POR VUESTRA ATENCIÓN

Att, "JEDI" ...
 
Atrás
Arriba