El programa se cuelga / el circuito se satura una vez que ICD3 se desconecta de PIC16F819

1

He escrito un programa simple que enciende y apaga los LED de diferentes colores a diferentes intervalos. Cuando programo el chip (un PIC16F819), el programa se ejecuta perfectamente y todo está bien. Sin embargo, en el momento en que desconecto mi ICD3 de la configuración, parece que el programa se detiene (o el circuito se satura, o algo está sucediendo con MCLR, no estoy seguro) y todos los LED se encienden y permanecen allí. El programa es el siguiente:

#include "pic.h" // load pin names
#include <htc.h>  // load delay library

#ifndef _XTAL_FREQ
 // Unless already defined assume 4MHz system frequency
 // This definition is required to calibrate __delay_us() and __delay_ms()
 #define _XTAL_FREQ 31250
#endif

void main() // this is the main program
{
        TRISB=0B00000000; // set all pins on port B as output
                          // XXXBXPRX
        while(1) // execute the following code block forever
        {

                PORTB = 0b11111111; // turn all port B pins ON
                __delay_ms(5000);   // pause 1 second
                PORTB = PORTB & 0b00010100; //turn off Red
                __delay_ms(7000);
                PORTB = PORTB & 0b00010000; //turn off Purple
                __delay_ms(7000);
                PORTB = PORTB & 0b00000000; //all off
                PORTB = PORTB | 0b00000010; //turn on Red
                __delay_ms(7000);
                PORTB = PORTB | 0b00010100; //turn on Blue and Purple
                PORTB = PORTB & 0b00010100; //turn off Red
                __delay_ms(7000);
                PORTB = PORTB & 0b00000100; //turn off Blue
                __delay_ms(7000);
                PORTB = PORTB & 0b00000000; //all off 
                PORTB = PORTB | 0b00010010; //turn on Red and Blue
                __delay_ms(7000);
                PORTB = 0b00000000; // turn all port B pins OFF
                __delay_ms(3000);   // pause 1 second           
        }
}

Y mis bits de configuración están configurados de esta manera:

Tengounaresistenciade10KentreMCLRyVDD,ylaconfiguracióndecompilaciónestáconfiguradaen"Release".

    
pregunta sacredfaith

1 respuesta

0

¡Muchas gracias a Andy aka por ayudarme a eliminar posibles causas!

El motivo real por el que esto ocurre se debe al modo de "Programación de bajo voltaje" de los microchips que forma parte de la arquitectura PIC16F819, y la corrección se explica con más detalle aquí .

La solución, según el post, era poner a tierra el pin PGM con una resistencia de 10k (lo puse a tierra y lo puse a funcionar).

Alternativamente, como lo señala otro póster en el mismo foro: es establecer ICSP en alto voltaje (a través de los bits de configuración), deshabilite el pin LVP en el código (que no era necesario para mí, pero lo dejo aquí) como estaba contenido en la publicación original), además de colocar una resistencia entre VDD y el pin MCLR.

    
respondido por el sacredfaith

Lea otras preguntas en las etiquetas