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:
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
}
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:
--> Practica #16
2.- Compilar con el icono del martillo y debug con el icono del insecto:
VÍDEO:
No hay comentarios.:
Publicar un comentario