Tengo problemas con la configuración del reloj en mi PIC32.
Un minuto tiene una duración de 10 segundos con la configuración actual.
¿Alguien sabe dónde debo cambiar mi configuración?
Aquí está el código:
// Master header file for all peripheral library includes #include // configuration settings #pragma config FNOSC = PRIPLL, POSCMOD = HS, FPLLMUL = MUL_18, FPLLIDIV = DIV_2, FPBDIV = DIV_2, FPLLODIV = DIV_1 #pragma config FWDTEN = OFF // pin definitions #define PPEins LATFbits.LATF4 #define PPZwei LATDbits.LATD15 #define PPDrei LATDbits.LATD14 #define PPVier LATBbits.LATB15 #define MHUhr LATBbits.LATB3 // provisorisch #define PMFuenf LATBbits.LATB11 #define PMZehn LATBbits.LATB10 #define PMViertel LATAbits.LATA15 #define PMZwanzig LATAbits.LATA1 #define PMVor LATAbits.LATA14 #define PMNach LATAbits.LATA5 #define PMHalb LATFbits.LATF13 #define PHEins LATAbits.LATA4 #define PHZwei LATAbits.LATA3 #define PHDrei LATFbits.LATF12 #define PHVier LATAbits.LATA2 #define PHFuenf LATBbits.LATB13 #define PHSechs LATBbits.LATB12 #define PHSieben LATFbits.LATF8 #define PHAcht LATFbits.LATF2 #define PHNeun LATBbits.LATB14 #define PHZehn LATFbits.LATF5 #define PHElf LATBbits.LATB5 // provisorisch #define PHZwoelf LATEbits.LATE9 // provisorisch // + BUTTON SETTINGS // D2 Als output für (5V Ersatz) für Buttons definieren // und auch gleich als high setzen // + BUZZER SETTINGS int main(void) { // PORT SETTINGS DDPCONbits.JTAGEN = 0; // disable JTAGport, free up PORTA TRISFbits.TRISF4 = 0; // PPEins TRISDbits.TRISD15 = 0; // PPZwei TRISDbits.TRISD14 = 0; // PPDrei TRISBbits.TRISB15 = 0; // PPVier // TODO: TRIS für PMUhr TRISBbits.TRISB11 = 0; // PMFuenf TRISBbits.TRISB10 = 0; // PMZehn TRISAbits.TRISA15 = 0; // PMViertel TRISAbits.TRISA1 = 0; // PMZwanzig TRISAbits.TRISA14 = 0; // PMVor TRISAbits.TRISA5 = 0; // PMNach TRISFbits.TRISF13 = 0; // PMHalb TRISAbits.TRISA4 = 0; // PHEins TRISAbits.TRISA3 = 0; // PHZwei TRISFbits.TRISF12 = 0; // PHDrei TRISAbits.TRISA2 = 0; // PHVier TRISBbits.TRISB13 = 0; // PHFuenf TRISBbits.TRISB12 = 0; // PHSechs TRISFbits.TRISF8 = 0; // PHSieben TRISFbits.TRISF2 = 0; // PHAcht TRISBbits.TRISB14 = 0; // PHNeun TRISFbits.TRISF5 = 0; // PHZehn // TODO: elf // TODO: zwölf // Initial pin settings PPEins = 0; PPZwei = 0; PPDrei = 0; PPVier = 0; MHUhr = 0; PMFuenf = 0; PMZehn = 0; PMViertel = 0; PMZwanzig = 0; PMVor = 0; PMNach = 0; PMHalb = 0; PHEins = 0; PHZwei = 0; PHDrei = 0; PHVier = 0; PHFuenf = 0; PHSechs = 0; PHSieben = 0; PHAcht = 0; PHNeun = 0; PHZehn = 0; PHElf = 0; PHZwoelf = 0; rtccTime tm, tAlrm; // time structure rtccDate dt, dAlrm; // date structure // Configure the device for maximum performance. // This macro sets flash wait states, PBCLK divider and DRM wait states based on the specified // clock frequency. It also turns on the cache mode if avaialble. // Based on the current frequency, the PBCLK divider will be set at 1:2. This knoweldge // is required to correctly set UART baud rate, timer reload value and other time sensitive // setting. SYSTEMConfigPerformance(72000000L); PPEins = 1; delay_us(1000000); // TEST 1 PPEins = 0; RtccInit(); // init the RTCC while(RtccGetClkStat()!=RTCC_CLK_ON); // wait for the SOSC to be actually running and RTCC to have its clock source // could wait here at most 32ms PPZwei = 1; delay_us(1000000); // TEST 2 PPZwei = 0; RtccOpen(0x10073000, 0x07011602, 0); PPDrei = 1; delay_us(1000000); // TEST 3 PPDrei = 0; while(1){ RtccGetTimeDate(&tm, &dt); // update single minutes int singleminutes = (int) (unbcd(tm.min)%5); switch(singleminutes){ case 0: PPEins = 0; PPZwei = 0; PPDrei = 0; PPVier = 0; break; case 1: PPEins = 1; PPZwei = 0; PPDrei = 0; PPVier = 0; break; case 2: PPEins = 1; PPZwei = 1; PPDrei = 0; PPVier = 0; break; case 3: PPEins = 1; PPZwei = 1; PPDrei = 1; PPVier = 0; break; case 4: PPEins = 1; PPZwei = 1; PPDrei = 1; PPVier = 1; break; } // update 5 minutes int nfminutes = (int) (unbcd(tm.min)/5); switch(nfminutes){ case 0: MHUhr = 1; PMFuenf = 0; PMZehn = 0; PMViertel = 0; PMZwanzig = 0; PMVor = 0; PMNach = 0; PMHalb = 0; break; case 1: MHUhr = 0; PMFuenf = 1; PMZehn = 0; PMViertel = 0; PMZwanzig = 0; PMVor = 0; PMNach = 1; PMHalb = 0; break; case 2: MHUhr = 0; PMFuenf = 0; PMZehn = 1; PMViertel = 0; PMZwanzig = 0; PMVor = 0; PMNach = 1; PMHalb = 0; break; case 3: MHUhr = 0; PMFuenf = 0; PMZehn = 0; PMViertel = 1; PMZwanzig = 0; PMVor = 0; PMNach = 1; PMHalb = 0; break; case 4: MHUhr = 0; PMFuenf = 0; PMZehn = 0; PMViertel = 0; PMZwanzig = 1; PMVor = 0; PMNach = 1; PMHalb = 0; break; case 5: MHUhr = 0; PMFuenf = 1; PMZehn = 0; PMViertel = 0; PMZwanzig = 0; PMVor = 1; PMNach = 0; PMHalb = 1; break; case 6: MHUhr = 0; PMFuenf = 0; PMZehn = 0; PMViertel = 0; PMZwanzig = 0; PMVor = 0; PMNach = 0; PMHalb = 1; break; case 7: MHUhr = 0; PMFuenf = 1; PMZehn = 0; PMViertel = 0; PMZwanzig = 0; PMVor = 0; PMNach = 1; PMHalb = 1; break; case 8: MHUhr = 0; PMFuenf = 0; PMZehn = 0; PMViertel = 0; PMZwanzig = 1; PMVor = 1; PMNach = 0; PMHalb = 0; break; case 9: MHUhr = 0; PMFuenf = 0; PMZehn = 0; PMViertel = 1; PMZwanzig = 0; PMVor = 1; PMNach = 0; PMHalb = 0; break; case 10: MHUhr = 0; PMFuenf = 0; PMZehn = 1; PMViertel = 0; PMZwanzig = 0; PMVor = 1; PMNach = 0; PMHalb = 0; break; case 11: MHUhr = 0; PMFuenf = 1; PMZehn = 0; PMViertel = 0; PMZwanzig = 0; PMVor = 1; PMNach = 0; PMHalb = 0; break; } // update hours int hours = (int) (unbcd(tm.hour)%12); if(nfminutes>=5) hours++; switch(hours){ case 0: PHEins = 0; PHZwei = 0; PHDrei = 0; PHVier = 0; PHFuenf = 0; PHSechs = 0; PHSieben = 0; PHAcht = 0; PHNeun = 0; PHZehn = 0; PHElf = 0; PHZwoelf = 1; break; case 1: PHEins = 1; PHZwei = 0; PHDrei = 0; PHVier = 0; PHFuenf = 0; PHSechs = 0; PHSieben = 0; PHAcht = 0; PHNeun = 0; PHZehn = 0; PHElf = 0; PHZwoelf = 0; break; case 2: PHEins = 0; PHZwei = 1; PHDrei = 0; PHVier = 0; PHFuenf = 0; PHSechs = 0; PHSieben = 0; PHAcht = 0; PHNeun = 0; PHZehn = 0; PHElf = 0; PHZwoelf = 0; break; case 3: PHEins = 0; PHZwei = 0; PHDrei = 1; PHVier = 0; PHFuenf = 0; PHSechs = 0; PHSieben = 0; PHAcht = 0; PHNeun = 0; PHZehn = 0; PHElf = 0; PHZwoelf = 0; break; case 4: PHEins = 0; PHZwei = 0; PHDrei = 0; PHVier = 1; PHFuenf = 0; PHSechs = 0; PHSieben = 0; PHAcht = 0; PHNeun = 0; PHZehn = 0; PHElf = 0; PHZwoelf = 0; break; case 5: PHEins = 0; PHZwei = 0; PHDrei = 0; PHVier = 0; PHFuenf = 1; PHSechs = 0; PHSieben = 0; PHAcht = 0; PHNeun = 0; PHZehn = 0; PHElf = 0; PHZwoelf = 0; break; case 6: PHEins = 0; PHZwei = 0; PHDrei = 0; PHVier = 0; PHFuenf = 0; PHSechs = 1; PHSieben = 0; PHAcht = 0; PHNeun = 0; PHZehn = 0; PHElf = 0; PHZwoelf = 0; break; case 7: PHEins = 0; PHZwei = 0; PHDrei = 0; PHVier = 0; PHFuenf = 0; PHSechs = 0; PHSieben = 1; PHAcht = 0; PHNeun = 0; PHZehn = 0; PHElf = 0; PHZwoelf = 0; break; case 8: PHEins = 0; PHZwei = 0; PHDrei = 0; PHVier = 0; PHFuenf = 0; PHSechs = 0; PHSieben = 0; PHAcht = 1; PHNeun = 0; PHZehn = 0; PHElf = 0; PHZwoelf = 0; break; case 9: PHEins = 0; PHZwei = 0; PHDrei = 0; PHVier = 0; PHFuenf = 0; PHSechs = 0; PHSieben = 0; PHAcht = 0; PHNeun = 1; PHZehn = 0; PHElf = 0; PHZwoelf = 0; break; case 10: PHEins = 0; PHZwei = 0; PHDrei = 0; PHVier = 0; PHFuenf = 0; PHSechs = 0; PHSieben = 0; PHAcht = 0; PHNeun = 0; PHZehn = 1; PHElf = 0; PHZwoelf = 0; break; case 11: PHEins = 0; PHZwei = 0; PHDrei = 0; PHVier = 0; PHFuenf = 0; PHSechs = 0; PHSieben = 0; PHAcht = 0; PHNeun = 0; PHZehn = 0; PHElf = 1; PHZwoelf = 0; break; } // BUTTON CHECKING } // end: while(1) } int unbcd(int bcd) { return ((bcd>>4)*10)+bcd%16; } int bcd(int dec) { return ((dec/10)