Tengo una placa de circuito impreso con un Microchip PIC18F97J60 y cada vez que conecto una radio de 5 vatios que transmite a 144 Mhz junto a la placa, reinicia el procesador. El procesador se reinicia cuando intenta comunicarse a través del bus I2C. El temporizador de vigilancia agota el tiempo de espera para que se establezca el indicador de interrupción del MSSP (puerto serie síncrono maestro). Esto sucede con mayor frecuencia cuando se espera el indicador de interrupción después de que el maestro (PIC18F97J60) envía un reinicio o un NACK.
Estoy usando resistencias pull up de 2 kOhm y haciendo funcionar el bus a ~ 96 kHz. En el osciloscopio, parece que la interferencia en el bus es lo suficientemente mala como para reducir las líneas SCL y SDA de 5 V a 2,6 V. ¿Qué se puede hacer para proteger las señales del bus i2c de la interferencia para que el procesador no se reinicie mientras esperando una interrupción del módulo MSSP?
Aparentemente, la interferencia de radio está estropeando la comunicación del bus IIC de tal manera que el esclavo no cree que se está direccionando y no hay ACK. Como señaló Steven, es un mal diseño de software tener un ACK perdido que haga que el procesador se reinicie. Esto debe solucionarse, pero su pregunta es principalmente sobre el problema de la interferencia. Tuviste suerte de que la interferencia agravara otro error al acecho en tu código. Arregle eso mientras se reproduce fácilmente.
Los pullups de 2 kΩ en las líneas IIC son lo más bajo posible, por lo que no se puede hacer nada más allí. No dices qué frecuencia y nivel de potencia es esta radio que está al lado del tablero. Cierto nivel de cercanía y potencia de salida provocará una falla. Dicho de otra manera, solo hay tantos voltios por metro que su tablero puede tomar antes de que funcione incorrectamente. Lo primero que debe preguntarse es si es razonable protegerse contra el nivel de radiación que golpea el tablero. Una solución podría ser "bueno, no hagas eso". Coloque el transmisor al otro lado de la habitación, protéjalo adecuadamente, mueva la antena, etc.
Si necesita hacer que la placa sea menos sensible a esta RF (nuevamente, sería útil conocer la frecuencia y el nivel de potencia con el que está tratando), entonces probablemente haya varias cosas que arreglar. Lo más probable es que este problema se deba a una mala disposición, en particular a tierra, y a la falta de atención a las corrientes de bucle de alta frecuencia. Todas las mismas cosas que hace para reducir las emisiones funcionan simétricamente para reducir la susceptibilidad a la radiación recibida. Dicho de otra manera, la física nos dice que todo lo que funciona como antena transmisora funciona como antena receptora y viceversa.
Así que muestre el diseño, particularmente la estrategia de conexión a tierra, de su tablero. También mire cuidadosamente cualquier cosa que salga del tablero porque estas son antenas. Dado que está utilizando un 18F97J60 que tiene un MAC/PHY de ethernet, probablemente tenga un cable de ethernet proveniente de la placa. ¿Qué reducción de RF hay en el lado de la red del transformador? ¿El transformador tiene un balun integrado en el lado de la red? ¿El problema desaparece cuando desconectas el cable de ethernet?
2 kΩ debería ser lo suficientemente bajo como para no tener mucho ruido en la señal.
Pero parece que tu problema está en otra parte. No parece que el ruido restablezca el controlador. Siempre que el controlador funcione correctamente, debe restablecer el temporizador de vigilancia para que nunca se agote el tiempo para restablecer el controlador. Si el mensaje en serie no se recibe correctamente, su protocolo debería solucionarlo. El restablecimiento es para emergencias, cuando el software se vuelve loco o una interrupción de energía bloquea el hardware. Dejar que se agote el tiempo de vigilancia porque está esperando un ACK o un reinicio de la transmisión es malo.
mjh2007