Estoy usando un MCP23017 (lo cual no debería ser importante) para extender el número de pines GPIO de una computadora Linux basada en el brazo usando i2c-dev bitbanging. Todo funciona bien con cables de unos pocos centímetros.
El problema es que necesitaría 2 * ~ 3 m de cable entre los grupos de 3 módulos basados en MCP23017. Ahora, si utilizo un cable de 3 m (0,75 mm de diámetro) para SCL y SDA, recibo un acuse de recibo por establecer la dirección, pero al seleccionar el IC para los estados de los pines se obtienen respuestas confusas.
Notas al margen: El MCP23017 tiene 2 bancos de 8 pines cada uno, con el cable de 3 metros, solo 1 banco parece funcionar y B se convierte en A ... No estoy seguro de qué sucede con la señal allí, supongo que la dirección en la solicitud está siendo corrompido de forma regular.
Así que pensé que para aumentar la intensidad de la señal agregaría un pullup externo (los pines gpio utilizados para el bitbanging ya tienen uno interno), que a su vez funciona bien para unos cables de 10 cm pero mata incluso la dirección ACK para el cable de 3 m.
Probé 2k2, 4k7 y 10k ohms, todos con el mismo resultado (exacto) desde mi perspectiva de baja resolución.
Desafortunadamente, no tengo un osciloscopio para mirar todo el asunto y no estoy muy informado sobre todos los detalles para resolver esto con solo mirarlo, por lo tanto, probar esta ruta.
Espero que alguien tenga una idea de lo que está sucediendo aquí, lo que podría probar o dónde podría aprender lo suficiente para entender esto en un nivel que me ayude a solucionarlo. Déjame saber si necesitas más información.
ACTUALIZACIÓN : el cable de 3 m ahora funciona con detectores externos de 850 ohmios. Bajando a 150 ohmios, también funciona con 6 m, pero no es una buena opción, ya que uno usa fácilmente más potencia (para bajar la línea) de lo que la mayoría de pines gpio están clasificados.