Tengo un Arduino (Pro Mini) conectado a una pantalla HMI con una interfaz en serie. Cuando el usuario presiona un botón en la pantalla HMI, activa un relé conectado a uno de los pines digitales en el Arduino.
Por razones de seguridad, si el Arduino pierde la comunicación con el HMI, quiero que desactive el relé. Por lo tanto, cuando se presiona el botón, se activa una secuencia de sondeo para verificar que el botón todavía se está presionando (no confío en el evento de liberación del botón, nuevamente por seguridad). Esencialmente, el Arduino consulta al HIM por un valor. Si no se devuelve ninguno dentro de 100 ms, el código expira y mata el relé. Como dije, el código funciona si extraigo las conexiones RX, TX o de tierra del HIM, el código mata el relé y todo sigue funcionando bien. Sin embargo, tire del Bcc de la pantalla y extienda el congelador con el relé activado.
Algunas notas:
- El Arduino y el HMI comparten un suministro común de 5V, pero el HMI no consume energía del Arduino
- Es una conexión serie TTL, no RS-232
- No creo que importe, pero Arduino está usando el software en serie en los pines GPIO, no el UART incorporado.
- La conexión en serie se está ejecutando en 19.2K
Mi mejor suposición, y es una suposición, es que la pantalla HMI intenta momentáneamente extraer la corriente o volcar una carga a través de las líneas de E / S cuando pierde su fuente de alimentación. Esto parece ser suficiente para que la MCU se congele, no estoy seguro de por qué.
¿Alguna sugerencia? ¿Debo tener algo en paralelo con las líneas de datos para proteger la MCU?
¿Qué podría estar causando esto y qué puedo hacer para superar el problema?