Compañeros, vengo a contaros el problema que he tenido con unos expansores de puertos MCP23017 de Microchip, que ofrecen dos puertos de 8 pines con las mismas prestaciones que si estuvieran integrados en el PIC: entrada, salida, interrupciones, pullups,... fácilmente gestionables mediante una conexión I2C (o SPI si se trata del modelo MCP23S17).
A priori son estupendos, van muy rápido, son muy sencillos de usar y muy versátiles.
Pero ojo, no los pongáis nunca cerca de un relé. El problema que he tenido con ellos me ha costado más de 600Km con el coche, un montón de horas invertidas y bastante dinero.
En una aplicación donde conviven estos expansores para manejar un panel de leds con unos TPL9202 para gestionar 20 relés, al principio se volvían locos y los leds se encendían y apagaban al ritmo de una bachata sin que el PIC pudiese hacer nada por evitarlo. Los TPL9202 seguían respondiendo bien y por tanto mi aplicación funcionaba aunque no mostraba información válida por los leds.
Pensé que una solución viable sería leer los MCP justo detrás de enviarles un dato, comparar lo leído con lo enviado y en caso de fallo resetear el expansor y escribir de nuevo. Lo implementé en mi librería I2C y los cabrones de los expansores no sólo se han quedado colgados de nuevo, sino que además dejaban a mi PIC en un bucle sin fin porque jamás podía validar que lo enviado era igual a lo leído.
En fin, que ayer decidí tirar los MCP a la basura y divorciarme de ellos para sustituirlos por un PIC que haga su misma función. Y en eso ando.
Pero necesitaba desahogarme y compartirlo para que nadie más cometa mi error: si usas un MCP, que sea muy lejos de cualquier cosa que pueda caerle mal, porque se cerrará en banda y no querrá trabajar más.