PIC Microchip se mantiene reiniciando

2

Tengo un PIC16LF1709 MCU de microchip de 20 pines y 8 bits . Lo estoy programando utilizando un PICkit 3 . Soy capaz de grabar con éxito un programa en el chip y ejecutarlo, pero parece que siempre se reinicia parcialmente durante la ejecución.

Mientras programo el PIC, estoy dejando que el programador suministre la alimentación, pero también puedo desconectar el programador y ejecutar el chip en su propio suministro de 5V. Según lo recomendado, he ejecutado una resistencia de extracción de 50kOhm desde MCLR a Vdd para evitar que se reinicie el dispositivo.

Tengo cinco LED conectados a RC0-RC4, y he escrito el siguiente programa de prueba 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 apague y encienda el dispositivo. En cambio, las luces están parpadeando. Esto me hace pensar que el PIC se reinicia cada 1 a 2 segundos.

He intentado 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 ha cambiado.

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

También he intentado dejar que la ejecución se ejecute con la alimentación de los 3.25v suministrados por el PICkit (a diferencia de los 5v suministrados por mi fuente de alimentación principal), pero eso tampoco hizo ninguna diferencia aparente.

¿Qué podría estar causando este comportamiento?

    
pregunta Woodrow Barlow

1 respuesta

6

Como Eugene Sh. correctamente señalado. El culpable más probable es el temporizador de vigilancia. Si observa la hoja de especificaciones ( enlace ) página 99, puede ver que el tiempo de espera predeterminado para el reinicio del temporizador de vigilancia es 2s. 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 en tiempo de ejecución.

Su problema se puede resolver 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 de PCON y ESTADO (consulte la sección 5.12 Determinación de la causa de un restablecimiento en la hoja de especificaciones en la página 58).

    
respondido por el Mathieu L.

Lea otras preguntas en las etiquetas