Hola, quiero dejar constancia de los problemas que he tenido a la hora de montar un bus I2C en proteus por si son de utilidad para alguien.
Para la simulación he usado: Proteus 7.6 SP0
Para la compilación del código: PICC 4.093
Las pruebas que he hecho son:
1- Montar el bus con 2 x 16f876a, 1 Master + 1 Slave.
+ Pruebas satisfactorias lectura / escritura correctas
2- 3 x 16f876a, 1 Master + 2 Slaves. Usé el mismo código en los dos Slaves (cambiando la dirección I2C).
+ Si durante la ejecución el Master se comunica "sólo" con Slave_1 puede leer / escribir correctamente
+ Si durante la ejecución el Master se comunica "sólo" con Slave_2 puede leer / escribir correctamente
+ Si durante la ejecución el master comienza a comunicarse con un Slave y luego pasa a comunicarse con el otro,
la comunicación con el primero será correcta pero en cuanto comienza a comunicarse con el segundo todo falla,
el bus se queda bloqueado. Los slaves no reciben ninguna interrupción I2C. En este punto se hace imposible reestablecer
la comunicación con nadie.
Al estar en esta situación de bloqueo y mirar con el osciloscopio se ve que cuando el master hace STOP las lineas SDA
y SCL pasan a nivel alto y al hacer START pasan a nivel bajo. Todo parece estar igual que al comienzo de la simulación,
sin embargo al intentar comunicarnos con un Slave para lectura/escritura, este no recibe la interrupción.
3- Montar el bus con 2 x 18f2550, 1 Master + 1 Slave.
+ Pruebas satisfactorias lectura / escritura correctas
4- 3 x 18f2550, 1 Master + 2 Slaves. Usé el mismo código en los dos Slaves (cambiando la dirección I2C).
+ Obtuve los mismos resultados que con 3 x 18f876a
Un saludo, Alberto