hola, estoy comenzando con el manejo de los dspic y mi primera tarea era encender un led durante medio segundo y apagarlo continuamente pero no me funciona correctamente el tiempo de encendido y apagado, he probado a cambiar los valores fcy y delay_ms pero sigue sin ajustarse al medio segundo, ¿alguien sabe que hago mal?
este es el codigo:
/** INCLUDES *****/
#include "p33FJ128MC202.h"
#define FCY 40000000UL
#include <libpic30.h>
/**** CONFIGURACION BITS ***/
_FOSCSEL(FNOSC_FRC);
_FOSC(FCKSM_CSECMD & OSCIOFNC_ON & POSCMD_NONE);
_FWDT(FWDTEN_OFF); //wdt disable
_FICD (JTAGEN_OFF&ICS_PGD1);//jtad disable icd enable en PGD1
_FPOR(FPWRT_PWR1);
int main (void)
{
int a,i,j;
Oscilador_init();
puertos_init();
i=0;
LATBbits.LATB4=0;
while (1)
{
LATBbits.LATB4=1;
__delay_ms(1000);
LATBbits.LATB4=0;
__delay_ms(1000);
}
} // FINAL VOID MAIN
void Oscilador_init(void)
{
// Configure Oscillator to operate the device at 40Mhz
// Fosc= Fin*M/(N1*N2), Fcy=Fosc/2
// Fosc= 8M*40/(2*2)=80Mhz for 8M input clock
PLLFBD=38; // M=40
CLKDIVbits.PLLPOST=0; // N1=2
CLKDIVbits.PLLPRE=0; // N2=2
OSCTUN=0; // 7.37Mhz
// Disable Watch Dog Timer
RCONbits.SWDTEN=0;
// Clock switching to incorporate PLL
__builtin_write_OSCCONH(0x01); // Initiate Clock Switch to PLL
__builtin_write_OSCCONL(0x01); // Start clock switching
while (OSCCONbits.COSC != 0b001); // Wait for Clock switch to occur
while(OSCCONbits.LOCK !=1); //wait for PLL to lock
}
void puertos_init(void)
{
ADPCFG = 0xFFFF;
TRISB=0x00;
LATB=0;
}
por cierto, uso el pickit3 conectado al dspic directamente, usando el mplab para alimentar el voltaje.
gracias de antemano