miércoles, 21 de diciembre de 2016

PRACTICA # 16 REAL TIME CLOCK (RTC)

OBJETIVO:
       Haremos uso del módulo RTC con el que cuenta el MCU R5F104PJAFB de la tarjeta de evaluación YRDKRL78G14. 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 YRDKRL78G14 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


  •  Configurar proyecto:
1.- Clic derecho en el proyecto generado y seleccionar Properties


2.- Seleccionar C/C++ Build / Settings / Linker / Device y establecer los siguientes parámetros:
OCD = 85
Option Byte = efffe8
Palomear: Use range of debug monitor area. Nota: No establecer ningún valor solo dejarlo en blanco.
Apply y después OK.


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

void RTC_Init(void)
{
            RTCEN = 1U; /* supply RTC clock */
            RTCE = 0U; /* disable RTC clock operation */
            RTCMK = 1U; /* disable INTRTC interrupt */
            RTCIF = 0U; /* clear INTRTC interrupt flag */
            /* Set INTRTC low priority */
            RTCPR1 = 1U;
            RTCPR0 = 1U;
            RTCC0 = _00_RTC_RTC1HZ_DISABLE | _08_RTC_24HOUR_SYSTEM
                                    | _02_RTC_INTRTC_CLOCK_1;
            /* Set real-time clock */
            SEC = _53_RTC_COUNTER_SEC;
            MIN = _59_RTC_COUNTER_MIN;
            HOUR = _23_RTC_COUNTER_HOUR;
            WEEK = _04_RTC_COUNTER_WEEK;
            DAY = _26_RTC_COUNTER_DAY;
            MONTH = _01_RTC_COUNTER_MONTH;
            YEAR = _17_RTC_COUNTER_YEAR;

            // START
            RTCIF = 0U; /* clear INTRTC interrupt flag */
            RTCMK = 0U; /* enable INTRTC interrupt */
            RTCE = 1U; /* enable RTC clock operation */
}

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

void get_RTC(void)
{
            int w_count;

            RTCC1 |= _01_RTC_COUNTER_PAUSE;
            /* Change the waiting time according to the system */
            for (w_count = 0U; w_count < RTC_WAITTIME; w_count++)
            {
                        __nop();
            }

            year10 = YEAR;
            month10 = MONTH;
            day10 = DAY;
            hour10 = HOUR;
            min10 = MIN;
            sec10 = SEC;
            if ((hour10 >= 0x12) && (hour10 <= 0x23))
            {
                        pm = 1;
            }
            else
            {
                        pm = 0;
            }
            RTCC1 &= (uint8_t) ~_01_RTC_COUNTER_PAUSE;

            /* Change the waiting time according to the system */
            for (w_count = 0U; w_count < RTC_WAITTIME; w_count++)
            {
                        __nop();
            }
}


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

void main(void)
{
            __EI();
            SR_Oscilador();          // configura las frecuencias 32 Mhz cpu y Fsub a 32.768 khz
            SR_LCD_GRAPH();          //  LCD 96x64
            SR_INTERVAL_TIMER();     //  configura las frecuencia Fsub = 32.768 khz para IT y acceder a los delay_ms y delay_100us
            SR_RTC();                // Configura Reloj de tiempo real

            while(1)
            {
                        if(fRun)
                        {
                                    sprintf((char *) line1, " %x-%x-20%x", day10, month10, year10);
                                    sprintf((char *) line2, " %x:%x:%x %s", hour10, min10, sec10, g[pm]);

                                    LCDPrintf(7, 0, "            ");
                                    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);
                                    fRun = 0;
                        }
            }
}



  • 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