Hola a todos, he solucionado varias cosas que tenía mal en el código, ahora el expansor si que recibe las ordenes por el protocolo i2c pero tiene comportamientos erráticos.
Cuando le envío las ordenes de activar o desactivar pines, ósea como si estuviéramos encendiendo y apagando leds este se comporta como tiene que ser, pero cuando lo configuro para que detecte las teclas de un teclado y que se active la interrupción ahí es cuando hace cosas raras.
Se supone que el pin int tiene que estar en estado alto y cuando se detecte un cambio de estado en alguno de los pines del puerto, el pin int tiene que pasar a estado bajo, pues este aveces está en estado alto otras veces en estado bajo todo el rato y otras veces está oscilando y no para.
Los pines los configuro de la siguiente manera, el nible bajo de P0 a P3 lo pongo cono salida y el nible alto de P4 a P7 lo configuro como entrada, cómo el teclado que uso es 4x3 lo que le hago al último pin lo conecto a través de una resistencia de pull-up por si se colaran algún tipo de interferencias.
Pues en el puerto también observo comportamientos erráticos , aveces los pines del nibble bajo están a 1 otras no, e incluso el P0 está a 0 y el P1, P2 y P3 están a 1.
A veces el código funciona detectándome alguna tecla pulsada y otras veces no.
Cuando simulo el código en proteus, este funciona correctamente la única diferencia es que en proteus el componente no es el PCA9538 si no el PCA9554, lo único que hago es cambiar la dirección del esclavo y listo, por lo demás debería de funcionar ya que el funcionamiento es el mismo.
Voy a colgar el código completo ya echo en proyecto MPLAB + CCS a ver que consejos me podéis dar
https://mega.co.nz/#!IdcTxZ6Q!DdrwZ4KCV0QvgNJEaOL1dbik9hfSWqhW4cRrj9tBzPo
Lo típico, está subido a mega, lo descomprimen y todo el proyecto está dentro