Esta es una combinación de un mecánico/eléctrico de que se trate. Es principalmente acerca de la obtención del I2C conexión fiable; esta pregunta no se refiere a sí mismo con el lado del software (es decir, cómo manejar un I2C fallo en el microcontrolador).
Tengo un Arduino Pro Micro) y un dispositivo esclavo I2C (MPU 6050 sensor). El Arduino ya está allí (feliz haciendo otras cosas, conectado a un PC a través de USB) y alrededor de 1 m de distancia de donde el esclavo será colocado. El esclavo es el habitual pequeña tabla similar a la https://www.sparkfun.com/products/11028. Proporciona algunos condensadores y 10k I2C resistencias pull-up.
Tan lejos, tan bueno. En los buenos viejos "obtener er hecho" espíritu, me han hackeado todo junto con algunos conectores RJ45 y 1 m Cat 5 cable que tenía por ahí (la realización de VCC, GND, INT, I2C). Es el tipo de obras que, hasta que no. La comunicación I2C rompe con regularidad (después de unos pocos cientos o a veces miles de transacciones).
Tengo que admitir que todavía tengo que averiguar quién es exactamente el culpable es; es decir, voy a conectar el esclavo directamente al PCB y ver si todavía ocurre (que descartar el cable de conexión). La parte de software es probablemente muy bien; dicho problema ocurre con varios firmware diferente, incluso las más triviales. He jugado un poco con las resistencias pull-up (es decir, con/sin el Arduino resistencias pull-up; y con extras externas 4.7 Ohm resistencias), y que no ha cambiado nada. El medio ambiente no es especialmente ruidoso, creo. Yo por desgracia, no tienen equipo para medir lo que pasa en las líneas.
Mientras tanto: Puedes sugerir una práctica y confiable para hacer tal conexión? Lo que yo pensaba:
- La "fácil" sería conseguir un segundo Arduino, colóquelo justo al lado del esclavo, conectarlo con el USB directamente a la PC; que eliminaría todo el problema, pero yo realmente preferiría no hacerlo, si puedo evitarlo.
- Intenta dividir el SCL/SCA líneas en pares diferenciales; no veo la manera de que funcione con el I2C de drenaje abierto protocolo de aunque. No quiero seguir con I2C necesariamente; no hay necesidad de corrección que si hay una alternativa más fácil.
- P82B715PN línea de búferes
- Algo parecido PUEDE o RS-485 es probable que me obligan a añadir al menos dos más fichas, o incluso más por cada lado (para la conversión de protocolo y controladores).
Hay una práctica (por un aficionado), simple, solución para este tipo de problema (que parece surgir de vez en cuando...)? Realmente estoy abierto a cualquier cosa aquí.
He comprobado los cables de mi... yo antes tenía (INT+nada), (SCL+nada), (SDA+nada), y (VCC+GND). He añadido el GND para todas las parejas, por lo que es ahora (INT+GND), (SCL+GND), (SDA+GND), y (VCC+GND) como por @FiddyOhm 's respuesta. Desafortunadamente, no hay ningún tipo de cambio :( Que no lo era.