¿Se degradada la memoria flash de Arduino?

Parece una pregunta tonta pero me tiene mosqueado.

Diseñé ya hará unos años un circuito que consiste en un montón de entradas y una única salida. La salida siempre está activa y según la lógica de las entradas se desactiva la salida.

Las entradas son los contactos de una protecciones. Si la protección se activa el contacto activa la entrada correspondiente y hace actuar un relé que es la salida.

El circuito tiene conexión modbus, en la cual guardo el valor de las entradas, el valor de la salida, y una "marca". Dicha marcha guarda el valor de la entrada que provoco un fallo. Ejemplo: Si la protección de temperatura salta, la entrada se activa y provoca un disparo de la maquinaría. En el registro de marcas de guarda el valor de la entrada indicando que fue la temperatura.

Así en cualquier momento puedo leer que entrada fue la que produjo el disparo.

Para quitar el disparo se debe "enviar" un comando de modbus o pulsar un botón de "restaurar" que es otra entrada del circuito.

Tengo un ordenador de control que constantemente está leyendo vía modbus el estado de las entradas, la salida, marcas, etc. y muestra en pantalla la entrada que se marcó como disparo.

El montaje ha estado y está en funcionamiento, funcionando las 24h del dia, todos los dias del año: cada vez que había un fallo marcaba el disparo en pantalla.

Pero curiosamente, ya ha pasado dos veces que se ha producido el disparo y no se
muestra en pantalla la "marca".

No debe ser fallo de modbus, puesto que leo constantemente los registros y si hay fallo en la comunicación se muestra en pantalla que ha habido una mala comunicación. Y no hay errores de comunicación, el dispositivo responde a la petición del ordenador.

La lógica de las entradas parece funcionar correctamente, por que el disparo se produce y no deja armar el circuito si no aprietas el botón de restaurar. Lo único, que no se guarda la marca.

¿Podría ocurrir que la memoria flash de programa o la RAM se hubiese degradado de tal manera que una porción de código no funcione pero el resto si?

Para llegar a ese supuesto ambos sabemos que si es por flash no por RAM, estamos hablando de que has grabado mas de 100.000 escrituras en ese bloque, algo que en alguien como tu lo descarto.
Lo único que se me ocurre es que tengas un ATmega328 defectuoso o al menos que esta mostrando su falla ahora.
Intenta esto, cambiar los bloques de la Flash en los que guarda los datos.
Considera a futuro usar una EEPROM externa, solo digo como cosas que seguramente has pensansado.
Insisto en que debe estar defectuoso.

La flash es puramente virgen. Grabado solo una vez. El del laboratorio que es en el que hago las pruebas seguramente este cerca de las cien mil veces... pero ese de ahí no sale hasta que muera. En el programa ni usa la EEPROM ni cosas raras. Tan solo lee la entrada y activa la salida.

Estoy de acuerdo, casi, tiene que ser un problema del chip. Eso de que te caigan rayos al final tarde o temprano pasa factura... Y eso que hasta hace dos días iba todo correcto y el último rayo fue en Julio del año pasado.

Tendré que hacer una revisión de circuitos, cuando tenga tiempo o muera del todo.

Ahh cuando hablas de flash te refieres a que algo se haya modificado en el código almacenado?

Yes!!!

Eso si que sería raro.. muy raro. Empezando porque la grabación tiene su checksum y ambos sabemos que de estar mal te hubiera dicho que hay un error.
Pero claro... esta el componente adicional de los rayos que no sabemos si someten a cierta situacion desconocida.
Me vas a decir loco pero me hace pensar en lo mismo que ocurre con algunas comutadoras de la NASA (de acá lo de loco) que estan sometidas a rayos cósmicos y lluevia de neutrinos que terminan cambiando 1 bit del código. En la Voyager pasó eso y de hecho volvió a pasar hace poco cuando suponían que extraterrestres nos estaban mando mensajes que no entendíamos y resultó que una computadora que estaba fuera de servicio se volvió a activar tomando el control y claro, estaba corrupta.
Tal vez el campo electrico del rayo provoque algo similar?
Asi que a la situación de que se te queman las cosas por responsabilidad de los rayos ahora le sumas este detalle digno de Sherlock Holmes?

Se me ocurre algo
Intenta recuperar el hex de lo que tienes almacenado en dicho AVR y luego compáralo con tu código bueno. A ver si hay discrepancias.

Pues no te diría que no yo... cósmico no sé... pero rayo era y llevaba chicha por que estuvimos a oscuras horas...

Me pasó algo curioso, pero en ese caso lo descubrí pronto. Tengo un tacómetro made in Arduino que después del rayo, mas bien unos meses después, empezó a decir de vez en cuando que estaba aquello girando como un loco, estando parados. Lo cambié por el repuesto y me propuse arreglarlo y todo parecia estar correcto hasta que me di cuenta que era el pin2 de interrupción que se habia vuelto hipersensible, de más, con solo mirarlo provocaba interrupción. Cambié el atmega y listo.

Es que es realmente curioso, el caso. Ya te digo que como funciona de momento y lo necesito (no puedo parar ahora la maquinaria), se quedará ahí, que el disparo me lo imagino. Cuando llegue el momento le pasaré el avrdude y lo compararé con el hex compilado a ver que ahí.

Pues anota que los rayos pueden corromper debido al alto campo eléctrico parte o basta que un solo bit de tu código. Parece una causa probable. A ver si alguien tiene alguna idea que aportar.

Las memorias son muy sensibles a campos electromagnéticos, como sabes.
Yo no soy muy ducho en electricidad pero por aportar:
Tiene protecciones sobretensiones transitorias y permanentes? has encerrado/enjaulado el circuito en una buena jaula de faraday? igual necesitas algunos filtros de supresión de ruidos tanto en la entrada de corriente como en los sensores, si es que hay muchos motores eléctricos que como sabes generan bastantes interferencias con los inducidos.
Has vigilado cual es el PF de la instalación (factor de potencia) por si fuera muy bajo?
Saludos.

Tiene protecciones sobretensiones transitorias y permanentes? Respuesta es SI.
Has encerrado/enjaulado el circuito en una buena jaula de faraday? Armario eléctrico de chapa de 1'5mm de espesor.

No parece ser problemas de entradas, dado que las entradas en sí funcionan. Solo hay dos motores relativamente pequeños que están bastante retirados y protegidos.

Posiblemente el error provenga de la tierra. Este verano después del rayo comprobamos la tierra con un meger y no estaba muy bien que digamos. A partir de hay pusimos unas cuantas picas y creo que está solucionado.

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.