sábado, 11 de febrero de 2017

PRACTICA # 16 REAL TIME CLOCK (RTC)

OBJETIVO:
       Haremos uso del módulo RTC con el que cuenta el MCU R5F563NB de la tarjeta de evaluación YRDKRX63N. Imprimiremos la fecha y hora en la LCD gráfica.
  • Configuraremos el RTC con oscilador externo
  • Estableceremos una fecha y hora
  • Se imprimirá en tiempo real la fecha y hora en la LCD

DESARROLLO:
  • Del YRDKRX63N schematic verificamos que posee el oscilador externo 32.768 Khz
  • Del documento Renesas RX63N RDK User's Manual confirmamos dicho oscilador.

PASOS:
  • Creación de un proyecto:
1.- Abrir el software e2studio
2.- New/ C Project / Renesas RXC ToolChain


3.- Seleccionar el target R5F563NB, debug hardware Segger jLink, después next


4.- Seleccionar C/C++ Source file y por ultimo Finish.


5.- La inicialización del RTC se muestra en el archivo rtc.c:

void RTC_Init(void)
{
            /* Set RTC clock input from sub-clock, and supply to RTC module */
            RTC.RCR4.BIT.RCKSEL = 0;
            RTC.RCR3.BIT.RTCEN = 1;

            RTC.RCR2.BIT.START = 0;  // Stop RTC

            while (RTC.RCR2.BIT.START == 1)
            {
            } // wait for START bit to be written as 0 – this is necessary since the RTC’s clock source speed is less than that of Sakura’s clock

            RTC.RCR2.BIT.RESET = 1;

            // Wait until reset is complete
            while(RTC.RCR2.BIT.RESET);

            RTC.RYRCNT.WORD = 0x0017;  // year

            RTC.RMONCNT.BYTE = 0x02;   // month
            RTC.RDAYCNT.BYTE = 0x27;   // day

            RTC.RWKCNT.BYTE = 0x04;  // day of week
            RTC.RHRCNT.BYTE = 0x23;  // Hour

            RTC.RMINCNT.BYTE = 0x59;  // minute
            RTC.RSECCNT.BYTE = 0x53;  // second

            RTC.RCR2.BIT.START = 1;   // Start RTC
            while (RTC.RCR2.BIT.START == 0)
            {
            } // wait for START bit to be written as 1

            IEN(RTC, CUP) = 0;

            RTC.RCR1.BIT.CIE = 1;  // carry interrupt is enabled
}


6.- Para obtener los registros de fecha y hora con la función get_RTC:

void get_RTC(void)
{
            int time;
            do
            {
                        IR(RTC,CUP)=0;   // interrupt flag is cleared
                        year10 = RTC.RYRCNT.BIT.YR10;

                        year1 = RTC.RYRCNT.BIT.YR1;
                        month10 = RTC.RMONCNT.BIT.MON10;

                        month1 = RTC.RMONCNT.BIT.MON1;
                        day10 = RTC.RDAYCNT.BIT.DATE10;

                        day1 = RTC.RDAYCNT.BIT.DATE1;
                        hour10 = RTC.RHRCNT.BIT.HR10;

                        hour1 = RTC.RHRCNT.BIT.HR1;
                        min10 = RTC.RMINCNT.BIT.MIN10;

                        min1 = RTC.RMINCNT.BIT.MIN1;
                        sec10 = RTC.RSECCNT.BIT.SEC10;

                        sec1 = RTC.RSECCNT.BIT.SEC1;

                        time = (hour10 *10)+hour1;
                        if((time>=12)&&(time<=23))
                        {
                                    pm = 1;
                        }
                        else
                        {
                                    pm = 0;
                        }
            }
            while(IR(RTC,CUP)==1); // an interrupt flag is set when there is a change in RTC registers
}

7.- La función main queda de la siguiente forma:

void main(void)
{
            set_ipl( 0 );       // enable interrupts
            SR_Oscilador();     // configura oscilador a 96 Mhz
            SR_TIMER_0();       // Inicializa el Timer 0 en cascada para 16 bits para libreria delay
            SR_LCD_GRAPH();     //  LCD 96x64
            SR_RTC();           // Configura Reloj de tiempo real

            while(1)
            {
                        get_RTC();
                        sprintf((char *)line1," %d%d-%d%d-20%d%d",day10,day1,month10,month1,year10,year1);
                        sprintf((char *)line2," %d%d:%d%d:%d%d %s",hour10,hour1,min10,min1,sec10,sec1,g[pm]);

                        LCDPrintf(0, 0, "Microcarsil ");
                        LCDPrintf(1, 0, "    2017    ");
                        LCDPrintf(2, 0, "Carlos Silva");
                        LCDPrintf(3, 0, "            ");
                        LCDPrintf(4, 0, "Practica #16");
                        LCDPrintf(5, 0, "            ");
                        LCDPrintf(6, 0, "%s", line1);
                        LCDPrintf(7, 0, "%s", line2);
            }
}

  • Agregar código, compilar y debug:
1.- Bajar el código de:
--> Practica #16

2.- Compilar con el icono del martillo y debug con el icono del insecto:



VÍDEO:

No hay comentarios.:

Publicar un comentario