Funcionamiento errático de PIC12F1822

Me gustaría compartir con ustedes un comportamiento que estoy observando en un circuito y no consigo entender.

He diseñado una PCB basada en un PIC12F1822 que funciona como botón de encendido/apagado y controla la temperatura de una Raspberry Pi.
Todo funciona correctamente hasta que en un momento indeterminado, el PIC queda como congelado, sigue manteniendo las salidas tal y como quedaron en el último estado de funcionamiento correcto, pero ya no responde a nada. Es necesario resetearlo para que vuelva a funcionar. Este momento donde se queda congelado es totalmente aleatorio, puede ser en 30 segundos como en 10 minutos, y no encuentro el problema que ocasiona este extraño comportamiento.
He revisado la alimentación del PIC con un osciloscopio, y he visto que cuando hay un pico de consumo repentino de la Raspberry, la tensión baja de 5V a unos 3 o 4V y se recupera en menos de 5ms, pero eso era suficiente para desestabilizar el PIC. He minimizado esto con un condensador de filtro en su alimentación, pero aun así, pasado un tiempo indeterminado el pic se queda congelado. He reescrito el código por si había algún error en la programación (ya que no soy demasiado entendido en este ámbito), he probado a usar PICs nuevos, le he añadido un condensador de 100nF entre los pines del ventilador, he desactivado el reseteo por bajo voltaje y por overflow de la memoria, pero sigue ocurriendo lo mismo.
Lo alimento con un cargador de móviles Huawei de 5V 2A, y he probado con otras fuentes conmutadas por si era cuestión de algún ruido eléctrico o interferencia.

Les agradecería muchísimo me aportasen alguna idea a mayores de lo que puede estar sucediendo.

Les dejo adjunto el esquema y los códigos que he programado en mikroC. El 1 es el inicial, y el 2 es un código programado de peor manera para probar que el error no surgía de algún bucle:

El PIC12F1822 utiliza un reloj interno de 8MHz, tiene el resto de opciones desactivadas, como el MCLR, Watchdog, Power-Up Timer Enable, Brown Out reset enable... etc

Muchas gracias de antemano

DavidMJ
 

Adjuntos

  • Código 1.txt
    3.1 KB · Visitas: 6
  • Código 2.txt
    4.1 KB · Visitas: 7
  • Esquema.png
    Esquema.png
    69 KB · Visitas: 21
Última edición:
He revisado la alimentación del PIC con un osciloscopio, y he visto que cuando hay un pico de consumo repentino de la Raspberry, la tensión baja de 5V a unos 3 o 4V y se recupera en menos de 5ms, pero eso era suficiente para desestabilizar el PIC. He minimizado esto con un condensador de filtro en su alimentación, pero aun así, pasado un tiempo indeterminado el pic se queda congelado.

👇👇👇
Hola.

¿Probaste alimentar PIC y Raspberry con fuentes separadas?

Saludos.

Si no prueba colocar un diodo rápido (para que tenga menor caída de tensión) antes del capacitor.
 
No soy un entendido de PIC ni mucho menos (programé uno hace 5 años) , pero me quiere sonar que el pin MCLR se conecta a V+ y lo tienes a masa. Mira eso por si acaso.. a ver qué dicen los entendidos. A lo mejor me equivoco.

Nota del moderador : sobreeditar al moderador es una falta pasible de sanción . Tómelo como aviso (y) !
 
Última edición por un moderador:
he visto que cuando hay un pico de consumo repentino de la Raspberry, la tensión baja de 5V a unos 3 o 4V y se recupera en menos de 5ms, pero eso era suficiente para desestabilizar el PIC.
Mencionas que la fuente de poder es de 2 amperes, pero esa caída de tensión es debido a falta de corriente.
El PIC12F1822 utiliza un reloj interno de 8MHz, tiene el resto de opciones desactivadas, como el MCLR, Watchdog, Power-Up Timer Enable, Brown Out reset enable... etc.
Si activas el BOREN y lo configuras, se produciría un reset por caída de tensión, lo cual haría que el PIC vuelva a cargar el programa.
Una caída de tensión por debajo de 2V también produciría un reset en la serie no LF.
Un congelamiento no se puede producir por una caída de tensión a 3V o 4V.
Los pulsos electromagnéticos sí desestabilizan el funcionamiento.
le he añadido un condensador de 100nF entre los pines del ventilador
Siempre ha sido recomendado por Microchip que los pines de alimentación tengan lo más cerca posible un capacitor de 100 nF.
He diseñado una PCB basada en un PIC12F1822 que funciona como botón de encendido/apagado
Pienso que usar un PIC de ese tipo y para ese propósito, es innecesario, un flip flop sería suficiente.
 
No soy un entendido de PIC ni mucho menos (programé uno hace 5 años) , pero me quiere sonar que el pin MCLR se conecta a V+ y lo tienes a masa. Mira eso por si acaso.. a ver qué dicen los entendidos. A lo mejor me equivoco.

Nota del moderador : sobreeditar al moderador es una falta pasible de sanción . Tómelo como aviso (y) !
Al moderador: perdone, pensaba que las letras rosas eran un fallo automático por escribir con el teléfono móvil porque ponía que mi mensaje había sido editado pero veía lo mismo que había escrito yo y pensaba que el problema era “a ver qué dicen los entendidos” 🫡
 
Hola.

¿Probaste alimentar PIC y Raspberry con fuentes separadas?

Saludos.
La verdad es que no.
Haré una prueba con fuentes separadas, pero aun así la finalidad de esta placa es colocarla entre la rasp y la fuente de alimentación, por lo tanto finalmente deberán usar la misma fuente.

👇👇👇


Si no prueba colocar un diodo rápido (para que tenga menor caída de tensión) antes del capacitor.
He probado pero sigue ocurriendo lo mismo. Incluso lo he probado con una fuente de 10A pero después de un tiempo, el pic deja de funcionar de manera correcta. Nunca me había pasado esto anteriormente con un microcontrolador.

Mencionas que la fuente de poder es de 2 amperes, pero esa caída de tensión es debido a falta de corriente.

Si activas el BOREN y lo configuras, se produciría un reset por caída de tensión, lo cual haría que el PIC vuelva a cargar el programa.
Una caída de tensión por debajo de 2V también produciría un reset en la serie no LF.
Un congelamiento no se puede producir por una caída de tensión a 3V o 4V.
Los pulsos electromagnéticos sí desestabilizan el funcionamiento.

Siempre ha sido recomendado por Microchip que los pines de alimentación tengan lo más cerca posible un capacitor de 100 nF.

Pienso que usar un PIC de ese tipo y para ese propósito, es innecesario, un flip flop sería suficiente.
Lo hago con un PIC12F1822 porque tengo muchos de estos en casa, y tiene los pines justos para hacer el PWM del ventilador y el encendido/apagado. Colocando el 104 en las patillas Vcc y GND del pic me sigue haciendo lo miemo, tras un par de minutos, aunque pulse el botón, el pic no responde.

No soy un entendido de PIC ni mucho menos (programé uno hace 5 años) , pero me quiere sonar que el pin MCLR se conecta a V+ y lo tienes a masa. Mira eso por si acaso.. a ver qué dicen los entendidos. A lo mejor me equivoco.

Nota del moderador : sobreeditar al moderador es una falta pasible de sanción . Tómelo como aviso (y) !
El MCLR lo he programado como entrada o salida analógica, por lo tanto lo efectúa el reset en el microcontrolador.
 
Última edición:
El MCLR lo he programado como entrada o salida analógica, por lo tanto lo efectúa el reset en el microcontrolador.
Creo que ese pin solo sirve de entrada digital.
Tenía un proyecto con el 12F683 y este empezó a escasear por un tiempo, pero el
12F1822 sí estaba disponible, así que usé este último.
Migré el programa pero ese PIC se volvía loco y nunca lo pude usar.
Depuré bastante ese programa y al final terminé con un 12F675, más barato y fácil de conseguir.
 
Última edición por un moderador:
No será ruido del motor del ventilador?? probaste de colocar una carga resistiva o una lampara en lugar del ventilador y ver si pasa lo mismo?
Esta tarde he probado el circuito sin ninguna carga ni ventilador, y con otra fuente. Hace exactamente lo mismo, tras unos minutos deja de responder. Tiene que ser algun fallo en la programación, ya que he probado con el mismo IC nuevo, y hace lo mismo.
 
Atrás
Arriba