项目介绍
本项目主要利用Microchip的SAM E51 CURIOSITY NANO EVALUATION KIT核心板作为开发平台,依托MPLAB开发环境,旨在实现以下核心功能:
一是通过编程使特定管脚支持触摸感应;
二是集成触摸扩展面板以增强交互性;
三是设计并实现通过按键及滑动操作动态调整呼吸灯变化速率的机制。
项目核心围绕三大要素展开:呼吸灯效果、触摸交互、以及速率调控。我们需要进行具体功能的拆分,并逐步通过基本例程进行对应的功能实现,最后结合到一起达成预定功能目标。
硬件介绍
SAME51J20A Curiosity Nano 评估工具包是用于评估SAME51J20A 单片机(MCU)的硬件平台。此工具包由
MPLAB® X 集成开发环境(IDE)提供支持,可轻松访问SAME51J20A 的功能,并介绍了如何将器件集成到自定义设
计中。Curiosity Nano 系列评估工具包配有板上调试器,可直接对SAME51J20A 进行编程,无需使用外部工具。
特性
• SAME51J20A 单片机
• 一个用户LED(黄色)
• 一个机械用户开关
• 板上调试器
– MPLAB X IDE 中的电路板标识
– 绿色电源/状态LED
– 编程与调试
– 虚拟COM 端口(CDC)
– 一个逻辑分析器(DGI GPIO)
设计思路
本次是通过开发板的按键和滑动实现控制呼吸灯速率:
首先实现板卡led的呼吸灯效果;
接下来通过按键实现速率控制的调节;
最后加入触摸滑动控制;
软件流程图以及功能实现说明
流程图:
模块化设计:
功能模块实现介绍及代码:
1、呼吸灯效果的实现
呼吸灯的效果是通过定时器(TC0)及定时器PWM输出(TCC1)实现的,在TC模块的中断中不断的修改定时器PWM的占空比从而实现呼吸灯效果,中断处理代码如下:
void TC0_TIMER_CALLBACK(TC_TIMER_STATUS status, uintptr_t context) {
if(PWM_cnt < LED_speed/2)
{
PWM_cnt++;
TCC1_PWM24bitDutySet(TCC1_CHANNEL2, 24000/LED_speed*PWM_cnt*2);
}
else if(PWM_cnt >= LED_speed/2 && PWM_cnt < LED_speed)
{
PWM_cnt++;
TCC1_PWM24bitDutySet(TCC1_CHANNEL2, 24000/LED_speed*(LED_speed-PWM_cnt)*2);
}
else if(PWM_cnt >= LED_speed)
{
PWM_cnt = 0;
}
}
2、按键调节呼吸速率
我们在按键中首先实现速率的调节,板载的按键是通过PA15引脚连接的,按键按下的时候会接地,也就是说在配置完外部中断后,可以通过下降沿触发中断,然后在外部中断的回到函数中进行调节:
void EIC_KEY_Handler(uintptr_t context)
{
LED_Mode++;
if(LED_Mode>=7)
LED_Mode = 0;
LED_speed = LED_Mode*100;
LED_speed += 400;
}
3、触摸滑动控制的实现
这里使用的是Touch_Library工具实现的,通过配置相关引脚形成一个滑条,这里我们选择的是相邻的三个按键实现的:
然后添加滑动检测:
while ( true )
{
/* Maintain state machines of all polled MPLAB Harmony modules. */
SYS_Tasks ( );
touch_process();
if (measurement_done_touch == 1u)
{
measurement_done_touch = 0u;
if (SLIDER_CONTACTED_MASK == (get_scroller_state(0) & SLIDER_CONTACTED_MASK))
{
if ((qtm_scroller_data1[0].right_hyst & 0x08) == 0x08)
{
LED_Mode++;
if(LED_Mode>=7)
LED_Mode = 0;
LED_speed = LED_Mode*200;
}
}
}
}
我们一共配置了七档,逐级进行效果变化,通过连续操作还是能看到明显的变化的。
难点和不解
我们一开始实现滑动的时候本想要通过外接模块的方式进行,可是怎么都不变化,Touch_Library工具中可以调节增益效果,也没有效果,虽然这个模块可以通过数字接口进行通信,不过既然用到了Touch_Library工具,就继续探索其应用了,结果直接通过外口的接口就轻松实现了,猜测大概率还是路径上的衰减太大。
效果展示
效果主要实现的是按键和滑动控制呼吸速率七阶变化的效果,实际效果详见视频。
心得体会
在本次的实践活动中,具体体验了一下MPLAB的具体开发流程,以及重点的触摸滑动工具的应用,虽然过程中有遗憾(没有使用外接模块操作),不过也算有惊无险的实现了任务,这个Touch的库真的好用,还是可视化,和这次用的单片机也非常的匹配,体验了一次不一样的操作流程。