El microchip PIC sigue restableciéndose

Tengo una MCU con microchip de 8 bits y 20 pines PIC16LF1709 . Lo estoy programando usando un PICkit 3 . Puedo grabar con éxito un programa en el chip y ejecutarlo, pero siempre parece reiniciarse a mitad de la ejecución.

Mientras programo el PIC, dejo que el programador suministre la energía, pero también puedo desconectar el programador y hacer funcionar el chip con su propio suministro de 5V. Como se recomienda, ejecuté una resistencia pull-up de 50 kOhm de MCLR a Vdd para evitar que se reinicie el dispositivo.

Tengo cinco LED conectados a RC0-RC4 y he escrito el programa de prueba a continuación para demostrar los problemas que estoy experimentando:

#include <xc.h>             /* XC8 General Include File */
#include <pic16lf1709.h>    /* Definitions of I/O pins */

void main(void) {

    TRISC = 0x0;    // port C (all are LEDs or NC) is output
    PORTC = 0x0;    // turn on all LEDs
    for(int i=0; i<500; i++) _delay(250); // delay for about a second
    PORTC = 0xFF;   // turn off all LEDs

    while(1) {
        // do nothing, forever
        // lights should remain OFF.
    }

}

Espero que las luces se enciendan brevemente, luego se apaguen y permanezcan apagadas hasta que encienda y encienda el dispositivo. En cambio, las luces están parpadeando. Esto me hace pensar que el PIC se reinicia cada 1 o 2 segundos.

Intenté incluir la siguiente línea de configuración (aparte de esto, no especifiqué ninguna configuración) en un intento de deshabilitar algunas de las funciones que podrían restablecer automáticamente el dispositivo. El comportamiento no cambió.

#pragma config MCLRE = OFF, STVREN = OFF, LPBOR = OFF

También intenté dejar que la ejecución se ejecutara mientras funcionaba con los 3.25v suministrados por el PICkit (a diferencia de los 5v suministrados por mi fuente de alimentación principal), pero eso tampoco supuso una diferencia aparente.

¿Qué podría estar causando este comportamiento?

¿Un temporizador de vigilancia? Intenta agregar WDT = OFF. O WDTE...
¿Tiene algún condensador de derivación? 0.1uF y 1uF directamente (o lo más cerca posible) a través de los pines de la fuente de alimentación. Recientemente tuve algo similar porque mi único condensador de derivación (sistema de espacio limitado) no estaba soldado.
Pruebe también un límite de 100n en mclr a gnd
@akohlsmith tenemos un límite de desacoplamiento de 100 nF en la fuente de alimentación. gracias por la sugerencia, sin embargo.

Respuestas (1)

Como Eugene Sh. correctamente señalado. El culpable más probable es el temporizador de vigilancia. Si observa la hoja de especificaciones ( http://ww1.microchip.com/downloads/en/DeviceDoc/40001729A.pdf ) página 99, puede ver que el tiempo de espera predeterminado para el restablecimiento del temporizador de vigilancia es de 2 s. Además, en la página 48, puede ver que los bits de configuración predeterminados habilitan el temporizador de vigilancia independientemente de la configuración del software de tiempo de ejecución.

Su problema puede resolverse con la adición de la línea:

#pragma config WDTE = OFF 

Si eso no resuelve su problema, puede obtener la fuente del último restablecimiento verificando el valor de los registros PCON y STATUS (consulte la sección 5.12 Determinación de la causa de un restablecimiento en la hoja de especificaciones en la página 58).