Estoy usando Arduino Ethernet con placas PoE y Arduino Uno . En los últimos días implementé un bus I2C en funcionamiento usando la Wire
biblioteca y todo parecía funcionar: las dos placas se comunicaban correctamente, excepto en algunos casos.
Hasta ayer el bus I2C funcionaba, ahora no. No cambié la ubicación física de ningún cable o código de boceto: solo encendí la PC para dar energía a las placas , y la comunicación a través del bus I2C simplemente dejó de funcionar. Luego, después de un poco y un poco de "reinicio" / "recarga del boceto" (nota: no cambié ningún código del boceto), comenzó a funcionar nuevamente.
No es la primera vez que sucede esta situación, y estoy en problemas para detectar el problema exacto.
¿Cual podría ser el problema?
Parece que está justo al margen del trabajo; todo tipo de pequeños efectos como el ruido EM de la computadora, la capacitancia del cuerpo humano y la temperatura lo empujan de "funcionar" a "no funcionar".
La solución general es ralentizar el I2C o protegerlo más a fondo.
Siempre que crea que I2C no funciona, convierta las líneas I2C SCL y data-SDA como GPIO y lleve el bus a un estado conocido enviando una secuencia a través del bus como se indica. El procedimiento es el siguiente:
I2C usando resistencias pull-up puede ser quisquilloso. Intente reducir los valores de pull-up para limpiar la señal. O mejor aún (realmente mucho mejor) agregue un terminador activo como el LTC4311 al bus.
scott seidman
craig