PIC: problema con inicializar RTC interno de PIC18F67k22

1

Quiero inicializar el RTC interno de un PIC18F67K22 con alguna fecha y hora fijas. La hora está configurada correctamente, pero la fecha no está configurada correctamente. El problema se produce en el ajuste del año. año no está configurado para lo que le demos a RTC.

Encontrar adjuntar debajo del código RTC, que escribo para inicializar RTC interno.

 RtccInitClock();                                       //Intialize the internal RTC
 RtccWrOn();                                                //Write enable for RTC                              //enable RTCC output on RTCC output pin
 PIE3bits.RTCCIE=1;                                     //Enables the alarm interrupt from RTC

       RtccTimeDate.f.hour = 2;                             //Set Hour
       RtccTimeDate.f.min =  3;                             //Set minute
       RtccTimeDate.f.sec =  4;                             //Set second
       RtccTimeDate.f.mday = 05;                            //Set day
       RtccTimeDate.f.mon =  06;                            //Se month
       RtccTimeDate.f.year = 14;                            //set year

      RtccWriteTimeDate(&RtccTimeDate,1);                       //Writes the date and time read from the external RTC
      delay_ms(10);
      RtccSetAlarmRpt(RTCC_RPT_SEC,1);                      //Set the alarm repeat to every minute
      ALRMCFGbits.CHIME = 1;                                    //Alarm repeat infinite times
      RtccWriteAlrmTimeDate(&RtccTimeDate);                     //Writes Alarm date and Time
      mRtccOn();                                                //Enables the RTC
      mRtccAlrmEnable(); 

¿Hay alguna configuración que pueda haber omitido?

    
pregunta shail korat

1 respuesta

1

De acuerdo con que encontré para esa biblioteca tanto los valores de fecha como los de hora deberían especificarse en decimal codificado en binario . Lea la codificación BCD para que entienda cómo funciona, pero por el momento, para confirmar que ese es el problema, pruebe el siguiente código:

RtccTimeDate.f.hour = 0x02;
RtccTimeDate.f.min =  0x03;
RtccTimeDate.f.sec =  0x04;
RtccTimeDate.f.mday = 0x05;
RtccTimeDate.f.mon =  0x06;
RtccTimeDate.f.year = 0x14;

Aunque he cambiado todos los valores para mayor claridad, solo el año realmente cambia para su valor de ejemplo. El valor 14 en decimal es 0x0E en hexadecimal, que no es un valor BCD válido. Podría usar algo como la siguiente macro (no probada) para convertir a BCD:

#define TO_BCD(x) ((((x) / 10) << 4) + ((x) % 10))
RtccTimeDate.f.year = TO_BCD(14);
    
respondido por el PeterJ

Lea otras preguntas en las etiquetas