Autor Tema: VBAT RTC PIC24  (Leído 1553 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado Rikr09

  • PIC16
  • ***
  • Mensajes: 112
VBAT RTC PIC24
« en: 22 de Febrero de 2013, 13:49:28 »
Hola amigos TODOPIC

Necesito implementar el VBAT para backup del RTC en el PIC24FJ128GA310, lo que hice fue hacer el montaje que tome del PIM del pic para el VBAT y que adjunto en la imagen; y configurar en los fusibles el VBTBOR_ON en
Código: [Seleccionar]
_CONFIG3( WDTWIN_PS75_0 & BOREN_OFF & WPDIS_WPDIS & WPCFG_WPCFGDIS & VBTBOR_ON) y mi método de inicializacion del RTC es el que sigue
Código: [Seleccionar]
void RTCCInit(void){
    //rtccTimeDate RtccTimeDate;
   // Enables the OSCON write and set
    //_SOSCEN =1;
  asm volatile ("mov      #OSCCON,W1");
asm volatile ("mov.b #0x46, W2");    // unlock sequence
asm volatile ("mov.b #0x57, W3");
asm volatile ("mov.b #0x02, W0");    // SOSCEN =1
asm volatile ("mov.b W2, [W1]");
asm volatile ("mov.b W3, [W1]");
asm volatile ("mov.b W0, [W1]");

    //_RTCWREN = 1;       // unlock setting
asm volatile("disi #5");
asm volatile("mov #0x55, w7");
asm volatile("mov w7, _NVMKEY");
asm volatile("mov #0xAA, w8");
asm volatile("mov w8, _NVMKEY");
        asm volatile("bset _RCFGCAL, #13");    // RTCWREN =1;
asm volatile("nop");
asm volatile("nop");

        _RTCEN = 0;         // disable the clock


//        diam = 0x01; mes = 0x01; ano = 0x01; //Con el VBAT Activo hay que comentar esto
//        hora = min = 0;
//        sec = 0x10;

    // set 12/01/2006 WED 12:01:30
    _RTCPTR = 3;                        // start the sequence
    RTCVAL = 0x2000+ano;                // YEAR
    RTCVAL = (mes*0x100)+(diam);        // MONTH-1/DAY-1
    RTCVAL = (diaw*0x100)+(hora);       // WEEKDAY/HOURS
    RTCVAL = (min*0x100)+(sec);         // MINUTES/SECONDS


    // optional calibration
    //_CAL = 0x00;

    // lock and enable
    _RTCEN = 1;                         // start the clock
    _RTCWREN = 0;                       // lock settings
}

Así mismo empleo, una bateria de 2.5V, y la prueba que hago es que configuro Fecha y Hora, reinicio o apago el Micro con la bateria conectada y cuando voy a ver el tiempo, todo esta reiniciado a cero  :(  ... Qué estaré haciendo mal?

Desconectado Rikr09

  • PIC16
  • ***
  • Mensajes: 112
Re: VBAT RTC PIC24
« Respuesta #1 en: 23 de Febrero de 2013, 13:40:21 »
Hola amigos TODOPIC

Necesito implementar el VBAT para backup del RTC en el PIC24FJ128GA310, lo que hice fue hacer el montaje que tome del PIM del pic para el VBAT y que adjunto en la imagen; y configurar en los fusibles el VBTBOR_ON en
Código: [Seleccionar]
_CONFIG3( WDTWIN_PS75_0 & BOREN_OFF & WPDIS_WPDIS & WPCFG_WPCFGDIS & VBTBOR_ON) y mi método de inicializacion del RTC es el que sigue
Código: [Seleccionar]
void RTCCInit(void){
    //rtccTimeDate RtccTimeDate;
   // Enables the OSCON write and set
    //_SOSCEN =1;
  asm volatile ("mov      #OSCCON,W1");
asm volatile ("mov.b #0x46, W2");    // unlock sequence
asm volatile ("mov.b #0x57, W3");
asm volatile ("mov.b #0x02, W0");    // SOSCEN =1
asm volatile ("mov.b W2, [W1]");
asm volatile ("mov.b W3, [W1]");
asm volatile ("mov.b W0, [W1]");

    //_RTCWREN = 1;       // unlock setting
asm volatile("disi #5");
asm volatile("mov #0x55, w7");
asm volatile("mov w7, _NVMKEY");
asm volatile("mov #0xAA, w8");
asm volatile("mov w8, _NVMKEY");
        asm volatile("bset _RCFGCAL, #13");    // RTCWREN =1;
asm volatile("nop");
asm volatile("nop");

        _RTCEN = 0;         // disable the clock


//        diam = 0x01; mes = 0x01; ano = 0x01; //Con el VBAT Activo hay que comentar esto
//        hora = min = 0;
//        sec = 0x10;

    // set 12/01/2006 WED 12:01:30
    _RTCPTR = 3;                        // start the sequence
    RTCVAL = 0x2000+ano;                // YEAR
    RTCVAL = (mes*0x100)+(diam);        // MONTH-1/DAY-1
    RTCVAL = (diaw*0x100)+(hora);       // WEEKDAY/HOURS
    RTCVAL = (min*0x100)+(sec);         // MINUTES/SECONDS


    // optional calibration
    //_CAL = 0x00;

    // lock and enable
    _RTCEN = 1;                         // start the clock
    _RTCWREN = 0;                       // lock settings
}

Así mismo empleo, una bateria de 2.5V, y la prueba que hago es que configuro Fecha y Hora, reinicio o apago el Micro con la bateria conectada y cuando voy a ver el tiempo, todo esta reiniciado a cero  :(  ... Qué estaré haciendo mal?

Buenas amigos. Les comento que luego de probar ciertas cosas y leer les comento que solucioné el problema  :-/  :lol: ... El harware esta bn, y en cuanto al firmware el unico cambio que hice fue preguntar por el bit VBAT, y si este es igual a 1, entonces lo borro y no cargo valor algun al RTC; de lo contrario si cargo los valores por defecto ya que no existen dias ni meses iguales a cero  ;-) ... Adjunto código funcional:
Código: [Seleccionar]
void RTCCInit(void){
    //rtccTimeDate RtccTimeDate;
   // Enables the OSCON write and set
    //_SOSCEN =1;
  asm volatile ("mov      #OSCCON,W1");
asm volatile ("mov.b #0x46, W2");    // unlock sequence
asm volatile ("mov.b #0x57, W3");
asm volatile ("mov.b #0x02, W0");    // SOSCEN =1
asm volatile ("mov.b W2, [W1]");
asm volatile ("mov.b W3, [W1]");
asm volatile ("mov.b W0, [W1]");

    //_RTCWREN = 1;       // unlock setting
asm volatile("disi #5");
asm volatile("mov #0x55, w7");
asm volatile("mov w7, _NVMKEY");
asm volatile("mov #0xAA, w8");
asm volatile("mov w8, _NVMKEY");
        asm volatile("bset _RCFGCAL, #13");    // RTCWREN =1;
asm volatile("nop");
asm volatile("nop");

        _RTCEN = 0;         // disable the clock



        //El bit VBAT se activa cuando se despierta por un POWER RESET POR y la bateria estaba conectada, al igual que el VBTBOR_ON
        if(_VBAT == 1){UA2("VBAT ON!!!");_VBAT = 0;}else{

          diam = 0x01; mes = 0x01; ano = 0x01; //Con el VBAT Activo hay que comentar esto
          hora = min = 0;
          sec = 0x10;
            // set 12/01/2006 WED 12:01:30
            _RTCPTR = 3;                        // start the sequence
            RTCVAL = 0x2000+ano;                // YEAR
            RTCVAL = (mes*0x100)+(diam);        // MONTH-1/DAY-1
            RTCVAL = (diaw*0x100)+(hora);       // WEEKDAY/HOURS
            RTCVAL = (min*0x100)+(sec);         // MINUTES/SECONDS
        }//if VBAT
   


    // optional calibration
    //_CAL = 0x00;

    // lock and enable
    _RTCEN = 1;                         // start the clock
    _RTCWREN = 0;                       // lock settings
}


 

anything