__CONFIG(FOSC_INTOSC & WDTE_OFF & PWRTE_OFF & MCLRE_ON & CP_OFF & CPD_OFF & BOREN_OFF & CLKOUTEN_OFF & IESO_OFF & FCMEN_OFF & WRT_OFF & VCAPEN_OFF & PLLEN_ON & STVREN_ON & BORV_25 & LVP_OFF);
...
void main()
{
OSCCON=0b11110010; // 32MHz
ANSELA=0; // Todo I/O digital
ANSELB=0;
TRISA=0x00; // Salida
LED_V = 0;
while(1)
{
LED_V = !LED_V;
Delay_1s();
}
}
void Delay_1s()
{
// Temporizacion = (65536 - Precarga)*PS*(4/fosc);
// 0.05 = (65536 - Precarga)*PS*(4/32e+6);
// 400000 = (65536 - Precarga)*8;
// 50000 = (65536 - Precarga);
// Precarga = (65536 - 50000) = 15536
// Lo pasamos a hexadecimal y resulta mas sencillo asignar TMR1H y TMR1L;
// Precarga = 15536 d = 0x3CB0;
// TMR1H = 0x3C;
// TMR1L = 0xB0;
// Configuracion del modulo Timer1
// Seleccionamos preescala:
TMR1ON = 0;
TMR1CS1 = 0; // Fuente de temporizador = frecuencia de oscilacion
TMR1CS0 = 0;
T1CKPS1 = 1; // Valor de preescala = ==> 1:8-->cada 8 ciclos cuenta 1
T1CKPS0 = 1;
int contador=20;
while(contador>=0)
{
TMR1H = 0x3C;
TMR1L = 0xB0;
TMR1IF = 0;
TMR1ON = 1;
while(!TMR1IF); // Este bucle espera a que termine la cuenta--> 50 msg
contador--;
TMR1ON = 0;
}
}
Resulta que con este codigo, el led se enciende 4 segundo, se apaga 4 segundos, es decir, que la frecuencia es de 8MHz, no me esta funcionando el PLL. Alguien me puede decir donde tengo el fallo, si tengo que activar algun bit mas o algo?#include <htc.h>
#include "delay.h"
#define LED_V RA1
// Configuración para oscilador interno con PLL
__CONFIG(FOSC_INTOSC & WDTE_OFF & PWRTE_OFF & MCLRE_ON & CP_OFF & CPD_OFF & BOREN_OFF & CLKOUTEN_OFF & IESO_OFF & FCMEN_OFF & WRT_OFF & VCAPEN_OFF & PLLEN_ON & STVREN_ON & BORV_25 & LVP_OFF);
void main(void)
{
ANSELA=0; // Todo I/O digital
ANSELB=0;
OSCCON = 0b11110011; // 32MHz
SPLLEN = 1;
TRISA = 0x00; // Puerto A --> Salida
PORTA = 0x00; // Todas las salidas a 0
RA1 = 1; // Activo Led Rojo
while(PLLR == 0); // Cuando el PLL sea correcto, sale del bucle y apaga el led
RA1 = 0;
LED_V = 0;
while(1)
{
LED_V = !LED_V;
Delay_1s(); // Parpadeo de led 1 segundo
}
} // void main()