lunes, 9 de enero de 2017

PRACTICA # 16 REAL TIME CLOCK (RTC)

OBJETIVO:
       Haremos uso del módulo RTC con el que cuenta el MCU R5F562N8 de la tarjeta de evaluación YRDKRX62N. 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 YRDKRX62N schematic verificamos que posee el oscilador externo 32.768 Khz


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


3.- Seleccionar el target R5F562N8, 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)
{
            //start sub-clock oscillator
            SYSTEM.SUBOSCCR.BIT.SUBSTOP = 0;

            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;

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

            RTC.RMONCNT.BYTE = 0x01;   // month
            RTC.RDAYCNT.BYTE = 0x26;   // 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.YEAR10;

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

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

                        day1 = RTC.RDAYCNT.BIT.DAY1;
                        hour10 = RTC.RHRCNT.BIT.HOUR10;

                        hour1 = RTC.RHRCNT.BIT.HOUR1;
                        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:

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


VÍDEO:

No hay comentarios.:

Publicar un comentario