Acabo de empezar a trabajar con los microcontroladores PIC y actualmente estoy usando MPLAB X IDE con un PIC KIT 3. He estado tratando de obtener un simple código de parpadeo de LED para ejecutarlo en un PIC16F1829 usando el oscilador interno a 16 Mhz. Sin embargo, el comportamiento de los LEDs es aleatorio. El código que estoy usando se muestra a continuación.
#define _XTAL_FREQ 8000000
#include <stdio.h>
#include <stdlib.h>
#include <pic16f1829.h>
#include <xc.h>
// BEGIN CONFIG
#pragma config FOSC = INTOSC // Oscillator Selection bits (Internal oscillator)
#pragma config WDTE = ON // Watchdog Timer Enable bit (WDT enabled)
#pragma config PWRTE = OFF // Power-up Timer Enable bit (PWRT disabled)
#pragma config BOREN = ON // Brown-out Reset Enable bit (BOR enabled)
#pragma config LVP = OFF // Low-Voltage (Single-Supply) In-Circuit Serial Programming Enable bit (RB3 is digital I/O, HV on MCLR must be used for programming)
#pragma config CPD = OFF // Data EEPROM Memory Code Protection bit (Data EEPROM code protection off)
#pragma config WRT = OFF // Flash Program Memory Write Enable bits (Write protection off; all program memory may be written to by EECON control)
#pragma config CP = OFF // Flash Program Memory Code Protection bit (Code protection off)
//END CONFIG
int main() {
OSCCON = 0b01110011;
OSCTUNE = 0b00000000;
TRISC6 = 0;
TRISC5 = 0;
while(1)
{
RC6 = 1; // LED ON
__delay_ms(500); // 0.5 Second Delay
RC6= 0; // LED OFF
__delay_ms(500); // 0.5 Second Delay
RC5 = 1;
__delay_ms(500);
RC5 = 0;
__delay_ms(400);
}
return 0;
}
Estoy bastante seguro de que el problema está en el oscilador o en la forma en que lo configuro, ya que puedo encender cualquier LED al inicio. El problema surge cuando introduzco retrasos para hacer que los LED parpadeen. El uso de retardos de 5000 significa que el primer LED se enciende y luego no pasa nada. El uso de retardos de 1000 hace que el primer LED parpadee con un retraso de alrededor de 1,5 segundos con el segundo LED siempre encendido. El uso de retardos de 500 o menos hace que ambos LED parpadeen, pero a diferentes frecuencias y patrones.
¿Podría alguien ayudarme a encontrar lo que estoy haciendo mal?