Estoy creando un dispositivo de prueba de cable básico y estoy usando I2C para interactuar con dos chips de expansión de E / S MCP23017.
En mi código, cada esclavo MCP23017 tiene su propia dirección y puedo comunicarme con ambos adecuadamente a través de I2C.
La idea es que ambos extremos de un "cable" se coloquen en los dos enchufes. Actualmente lo he programado para que funcione con solo 8 cables (usando solo GPA7-GPA0 en ambos chips). Básicamente, la idea es que se enviará un pulso alto lógico individualmente en cada cable (bucle 8 veces) desde el primer chip MCP23017 (pines configurados como salida y es esclavo 1) y recibido por el segundo chip MCP23017 (pines configurados como entrada y Esclavo 2). Ahora los LED se iluminan perfectamente, lo que indica que la conexión existe, sin embargo no puedo hacer que escriba en los registros del Esclavo 2.
Estoy escribiendo en los primeros chips OLATA y leyendo del segundo registro GPIOA de chips (Slave 2). Entonces, si OLATA está alto en GPA7 (primer chip), deseo leer el pin GPIOA GPA7 en el segundo chip. A través de estas lecturas, puedo realizar operaciones bitwise para determinar los tipos de cable, etc.
Mi problema es que, a pesar de que todos los LEDS se iluminan como se esperaba, no se está escribiendo nada en el segundo chip de expansión de E / S (la parte inferior). Esto no es bueno para mí, ya que necesito que se produzcan escrituras de datos en los registros para que pueda leer el valor en estos registros para realizar operaciones. El código I2C relevante para el expansor de E / S se proporciona a continuación, estas tres funciones se ejecutan cada una 8 veces en el orden mostrado, una para cada pin GPAx:
Ahora el problema es que no se está escribiendo nada en la variable ReadPin, está vacío para los 8 pines GPAx en el Esclavo 2 (el chip de expansión de E / S más abajo). También el valor de uint8_t es 1 <
¿Alguna idea? Por favor ayude, ya que este es el único problema principal que tengo que me impide continuar con la escritura de otra lógica de programa.
¡Gracias!
PS: FYI ninguno de mis pines de interrupción en ambos chips MCP23017 está conectado a nada y los pines de restablecimiento están conectados a VCC. Además, los pines GPAx que están configurados como entradas en el segundo esclavo no tienen resistencias conectadas a ellos. Solo el pin y luego el LED a GND.
EDITAR: Esquema: (haga clic con el botón derecho para ver a tamaño completo)
También sí, sé que en el Esquema no hay conexión GND en VSS para el Esclavo 1, pero tenga en cuenta que tengo mi configuración actual en un protoboard con todas las conexiones, que la conexión VSS está correctamente conectada.