[PIC32/SAM] 【ATSAMD51EVK测评报告】+基于RTC的电子时钟

[复制链接]
1730|20
 楼主| jinglixixi 发表于 2022-12-17 20:02 | 显示全部楼层 |阅读模式
AMD, RTC, ev, sam, tc
在厂家的例程中,提供了RTC的使用示例,但它还是有改进的地方,输出的速度太快且大部分数据无实际意义。
经改进,才能输出如下的效果,见图1所示。
1 秒间隔时间显示
为了实现电子时钟的功能,在例程的基础上通过添加OLED屏,并进行适当的调整即可。
由于OLED屏的驱动要用到us级的延时,因此在definitions.h文件中要添加#include"peripheral/systick/plib_systick.h"
在文件initialization.c中要添加语句SYSTICK_TimerInitialize(),修改后的内容如下:
  1. void SYS_Initialize ( void* data )
  2. {
  3.     NVMCTRL_Initialize( );
  4.     STDIO_BufferModeSet();
  5.     PORT_Initialize();
  6.     CLOCK_Initialize();
  7.     SERCOM2_USART_Initialize();
  8.     RTC_Initialize();
  9.     NVIC_Initialize();
  10.     SYSTICK_TimerInitialize();
  11. }

此外,还要添加文件plib_systick.cplib_systick.h
为了获得us级延时,需添加在us级的延时文件中相应的延时函数,其内容如下:
  1. void SYSTICK_Delayus ( uint32_t delay)
  2. {
  3.         uint32_t tickStart, delayTicks;
  4.         if( (SysTick->CTRL & (SysTick_CTRL_TICKINT_Msk | SysTick_CTRL_ENABLE_Msk)) == (SysTick_CTRL_TICKINT_Msk | SysTick_CTRL_ENABLE_Msk))
  5.         {
  6.                 tickStart=systick.tickCounter;
  7.                 delayTicks=delay/SYSTICK_INTERRUPT_PERIOD_IN_US;
  8.             while((systick.tickCounter-tickStart)<delayTicks)
  9.                 {
  10.                 }
  11.         }
  12. }

此外,在文件plib_systick.h中也要添加void SYSTICK_Delayus ( uint32_t delay)
实现图2所示效果的主程序为:
  1. int main ( void )
  2. {
  3.     int p;
  4.     SYS_Initialize ( NULL );
  5.     struct tm sys_time;
  6.     struct tm alarm_time;
  7.     alarm_triggered = false;
  8.     alarm_time.tm_hour = 12;
  9.     alarm_time.tm_sec = 20;
  10.     alarm_time.tm_min = 00;
  11.     alarm_time.tm_mon = 11;
  12.     alarm_time.tm_year = 122;
  13.     alarm_time.tm_mday = 16;
  14.     alarm_time.tm_wday = 5;
  15.     PORT_REGS->GROUP[2].PORT_DIRSET = 1<<18;
  16.     PORT_REGS->GROUP[2].PORT_DIRSET = 1<<20;
  17.     PORT_REGS->GROUP[2].PORT_DIRSET = 1<<21;
  18.     OLED_Init();
  19.     OLED_Clear();
  20.     OLED_ShowString(20,0,"ATSAMD51 EVK",16);
  21.     OLED_ShowString(20,2,"RTC test",16);
  22.     OLED_ShowString(20,5,"jinglixixi",16);
  23.     SYSTICK_DelayMs(800);
  24.     RTC_RTCCCallbackRegister(RTC_Callback, (uintptr_t) NULL);
  25.     RTC_RTCCTimeSet(&sys_time);
  26.     RTC_RTCCAlarm0Set(&alarm_time, RTC_ALARM_MASK_HHMMSS);
  27.     RTC_RTCCTimeGet(&sys_time);
  28.     p=sys_time.tm_sec;
  29.     OLED_ShowString(20,5,"  :  :    ",16);
  30.     while ( true )
  31.     {
  32.         RTC_RTCCTimeGet(&sys_time);
  33.         if(p!=sys_time.tm_sec)
  34.         {
  35.             OLED_ShowNum(20,5,sys_time.tm_hour,2,16);
  36.             OLED_ShowNum(44,5,sys_time.tm_min,2,16);
  37.             OLED_ShowNum(68,5,sys_time.tm_sec,2,16);
  38.             p=sys_time.tm_sec;
  39.             if(p%2==0) PORT_REGS->GROUP[2].PORT_OUT |= 1<<18;
  40.             else PORT_REGS->GROUP[2].PORT_OUT &= ~(1<<18);
  41.         }
  42.         if(alarm_triggered == true)
  43.         {
  44.             printf("\n\rAlarm Triggered !!!!!!!!\n\r");
  45.             alarm_triggered = false;
  46.         }
  47.     }
  48.     return ( EXIT_FAILURE );
  49. }

2计时效果

视频演示:

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
1988020566 发表于 2022-12-22 20:22 | 显示全部楼层
屏幕的演示效果不错。              
mollylawrence 发表于 2022-12-24 20:10 | 显示全部楼层
ATSAMD51EVK板载资源针对很丰富。
zerorobert 发表于 2022-12-24 20:30 | 显示全部楼层
自带RTC的精度怎么样              
updownq 发表于 2022-12-24 21:19 | 显示全部楼层
怎么才能保障数据及时更新的情况下,又不会影响屏幕的操作?
jtracy3 发表于 2022-12-24 21:49 | 显示全部楼层
这个比DS1302强吗?              
 楼主| jinglixixi 发表于 2022-12-25 10:27 | 显示全部楼层
jtracy3 发表于 2022-12-24 21:49
这个比DS1302强吗?

需要有精确仪器比较,应该差别不大。
 楼主| jinglixixi 发表于 2022-12-25 10:28 | 显示全部楼层
updownq 发表于 2022-12-24 21:19
怎么才能保障数据及时更新的情况下,又不会影响屏幕的操作?

使用中断
 楼主| jinglixixi 发表于 2022-12-25 10:29 | 显示全部楼层
zerorobert 发表于 2022-12-24 20:30
自带RTC的精度怎么样

日常使用没问题
plsbackup 发表于 2023-1-5 13:57 | 显示全部楼层
这个可以设置秒中断吗?              
earlmax 发表于 2023-1-9 09:43 | 显示全部楼层
ATSAMD51EVK的性能怎么样
10299823 发表于 2023-1-9 10:50 | 显示全部楼层
可以实现ms的应用吗?              
 楼主| jinglixixi 发表于 2023-1-9 15:57 | 显示全部楼层
10299823 发表于 2023-1-9 10:50
可以实现ms的应用吗?

没问题
hudi008 发表于 2023-1-9 16:28 | 显示全部楼层
systick也有了吗?              
 楼主| jinglixixi 发表于 2023-1-10 00:18 | 显示全部楼层
usysm 发表于 2023-1-10 21:00 | 显示全部楼层
这个最大的中断时间是多少?              
xiaoyaodz 发表于 2023-1-12 14:54 | 显示全部楼层
这个芯片自带的RTC?              
 楼主| jinglixixi 发表于 2023-1-12 16:36 | 显示全部楼层
xiaoyaodz 发表于 2023-1-12 14:54
这个芯片自带的RTC?

claretttt 发表于 2023-1-12 17:23 | 显示全部楼层
使用中断了吗?              
wangdezhi 发表于 2023-1-12 18:55 | 显示全部楼层
怎么利用RTC实现多个闹钟呢?              
您需要登录后才可以回帖 登录 | 注册

本版积分规则

521

主题

2949

帖子

39

粉丝
快速回复 在线客服 返回列表 返回顶部