Hola colegas!
if( no os apetece leer el rollazo )
{
GOTO -RESUMEN- // (que está al final)
}
else
{
Os voy a comentar una cosa que muchos de vosotros ya sabreis, pero, con esta experiencia queda comprobada 100% la importancia de mimar al máximo una determinada patilla del PIC. Cual es?? Jejeje.... vamos por partes.
Explico un poco por encima en que consiste el proyecto.
Varios módulos se comunicarán entre si via RS485 (visualizadora, sistema de potencia, etc. etc.). Uno de un módulo se encargará de crujir unos cuantos relés (con el ULN2803, puesto que, me hacía ilusión meterlo en algún diseño para ver que tal funcionaba) y se comunicará por RS485 con una placa central.
Cumpliendo todas las premisas necesarias para no volver loco al PIC cuando los relés crujieran rutee la placa con todos los truquillos que he ido aprendiendo con el tiempo (y gracias a vosotros, claro). Me dió por fastidiar un poco al sistema y le hice la siguiente prueba:
Conecte a cada uno de los 8 relés de la placa una carga inductiva. La prueba de fuego? Crujir todos los relés de forma simultanea. Resultado? Cuelgues, cuelgues y más cuelgues.
Por que? Lo hago todo como lo tengo que hacer!! No entiendo nada!!
Bueno, tras unos minutos de meditación y frustración extrema me pongo manos a la obra y... quito todos los cables, cojo la placa y la amenazo diciendole que como no funcione la voy a tirar por la ventana del laboratorio. Tras una inspección visual y un intercambio de palabras con ella la vuelvo a conectar.
El resultado fué, cuanto menos, sorprendente. Funcionaba!! Pero... Por que?? No estoy tan loco (aún) como para imaginarme que mis amenazas habían surtido efecto.
Con la mosca detras de la oreja decido cambiar el programa y hacer que los relés crujan de manera distinta. Le engancho mi querido programador y mi amiga circuital se vuelve a quedar completamente K.O.
Siguiente prueba? Quitar el programador. Resultado? Funcionamiento perfecto. Pongo el programador, funciona mal. Lo quito, funciona bien. Esto lo repetí como unas 10 veces más o menos. Mi frustración se redujo un poco (sin el programador enganchado funcionaba de maravilla) pero, pasaba algo que no entendía y eso me mosqueaba.
Me dió por pensar que como el programador lo tenía encima de los cables de alimentación de la bombas peristálticas... que podía ser posible que el ruido de los encendidos se metiera en mi placa a traves del programador. Cambié la posición del programador y la cosa seguía igual, pero, me dió pié a pensar que el ruido se metía en mi placa por los pines de la programación ICSP.
Entonces me acordé de una cosa que me dijeron una vez en una charla (de Acal Iberia). Todos los pines del pic tienen diodos internos para protegerlos de subidas de tensión excepto el MCLR (por su carácterística de aguantar el voltage de programación). Esto hace de esta patilla que se trague todo el ruido habido y por haber.
Siguente prueba? Soldé un cable de unos 20cm. a modo de antena y lo soldé al MCLR.
Encendí mi sistema con el cable soldado al MCLR y el PIC se quedaba K.O. cuando crujian los relés. Si quitaba el cable todo iba bien.
Ya sabía el problema, ahora sólo tenía que solucionarlo. Puesto que tenía dehabilitado el MCLR y por recomendación de los señores de Acal Iberia, resistencia a tierra de 1K y un condensador de 150 pF en paralelo con la resistencia.
He de decir que, aunque no pusiera la resistencia a tierra (si no había ningún cable en el MCLR) no se colgaba, pero, en la comunicación obtenía un ruido tremendo cada vez que crujían los relés. Con la resistencia la comunicación es limpia e inmaculada. Si el PIC pilla ruido por esta patilla incluso te varía los datos que saca por su UART (aunque a simple vista parece que no haya relación).
-RESUMEN-
Si desactivamos el MCLR tenemos que poner una resistencia de 1K a tierra y un condensador en paralelo a la resistencia de 150pF todo lo pegados a la patilla que podamos.
Un saludo desde Alicante.