Funpack4-2 -基于SAME51J20A的LED呼吸速率控制
该项目使用了SAME51J20A,实现了LED呼吸速率控制的设计,它的主要功能为:通过touch和按键控制LED呼吸速率。
标签
Microchip
SAME51J20A
Funpack4-2
呼吸灯速率
Bymyself
更新2025-07-02
45

前言

经过无数次的失败尝试,终于把程序调出来了,说实话接触一个新的没接触的单片机还是要谨慎啊,不过我还是要向SAM E51 CURIOSITY NANO EVALUATION KIT这块开发板致敬。

项目介绍

本次任务使用的是 CURIOSITY NANO EVALUATION KIT开发板,板载的单片机是SAME51J20A,这个一款Microchip旗下的32位单片机,任务的最终目标是通过按键和滑动实现呼吸灯速率切换,当让了可以使用滑动模块进行辅助设计,不过这款单片机支持触摸采集,咱们可以直接进行功能使用。

硬件平台介绍

本次的功能实现使用的是基于SAME51J20A的CURIOSITY NANO EVALUATION KIT开发板,是用于评估SAME51J20A 单片机(MCU)的硬件平台。此工具包由
MPLAB® X 集成开发环境(IDE)提供支持,可轻松访问SAME51J20A 的功能,并介绍了如何将器件集成到自定义设
计中。


0

上图可以看出这个开发板包括了USB接口,调试器、电源状态指示灯,用户LED灯,按键,单片机,晶振等硬件资源。

软件平台介绍

MPLAB X IDE,作为Microchip Technology公司倾力打造的集成开发环境(IDE),专为嵌入式系统设计领域量身定做,展现了其在促进高效开发和创新方面的强大实力。这款软件不仅跨平台兼容,能够在包括Windows、macOS以及Linux在内的多种操作系统上流畅运行,还集成了源代码级调试功能,使得开发者能够深入代码内部,精准定位并解决问题,极大地提升了调试效率。其界面设计高度可配置,无论是初学者还是资深开发者,都能根据自己的工作习惯和项目需求,调整界面布局和功能模块,实现个性化定制,从而提升工作效率。MPLAB X IDE还支持从仿真阶段到硬件测试的全流程开发,确保了开发过程的连贯性和结果的可靠性。MPLAB X IDE对多种单片机(MCU)的支持,涵盖了从经典的8位单片机到高性能的32位MCU,满足了不同应用场景下的性能需求。这种广泛的兼容性,使得开发者能够在一个统一的开发环境中,轻松应对从简单控制到复杂数据处理的各种挑战。

软件设计

软件流程图


0

软件功能设计

1、初始化

我们用到的模块主要包括了定时器模块*2(TC模块和TCC模块),外部中断模块,touch应用模块,所以我们需要进行这些模块的初始化操作,虽然我们已经通过图形化配置了,不过还要进行启动才行,并且需要注册回调函数,代码如下:

    TCC1_PWMInitialize();
TCC1_PWMStart();
TCC1_PWM24bitDutySet(TCC1_CHANNEL2, 0);
EIC_CallbackRegister(EIC_PIN_15,EIC_KEY_Handler_CALLBACK, 0);
TC0_TimerCallbackRegister(TC0_TIMER_CALLBACK,0);
TC0_TimerStart();

2、判断物理按键功能

物理按键对应的引脚是PA15,也就是说通道15对应的外部中断,根据注册需要编写EIC_KEY_Handler_CALLBACK函数,并在里面进行LED呼吸灯速率模式的变化上,代码如下:

static void EIC_KEY_Handler_CALLBACK(uintptr_t context)
{
Mode++;
if(Mode>=3)
Mode=0;
speed = Mode+1;
speed *= 1000;
}

3、判断滑动功能

这个是在while中进行循环检测的,通过判断到右滑动后执行和物理按键相同的操作,代码如下:

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)
{
Mode++;
if(Mode>=3)
Mode=0;
speed = Mode+1;
speed *= 1000;
}

}
}

4、呼吸灯效果

这里用到的是TC定时器和TCC定时器,一个进行1ms的定时,一个进行PWM的输出,然后在定时器中断的回调函数TC0_TIMER_CALLBACK中进行处理,代码如下:

void TC0_TIMER_CALLBACK(TC_TIMER_STATUS status, uintptr_t context) {
if(PWM_cnt < speed/2)
{
PWM_cnt++;
TCC1_PWM24bitDutySet(TCC1_CHANNEL2, 2400/speed*PWM_cnt*2);
}
else if(PWM_cnt >= speed/2 && PWM_cnt < speed)
{
PWM_cnt++;
TCC1_PWM24bitDutySet(TCC1_CHANNEL2, 2400/speed*(speed-PWM_cnt)*2);
}
else if(PWM_cnt >= speed)
{
PWM_cnt = 0;
}

}

效果展示


0

遇到的难题

在本次的设计过程中真是关关难过关关过啊,第一个就是呼吸灯效果实现的时候不知怎么的时钟频率被改变了,但是定时器的配置还没有改变,导致溢出了,结果就不是呼吸灯的正常效果,找了好久重新配置采好的。

心得体会

首次接触并使用Microchip单片机,从一开始的兴奋到后来的紧张,因为时间快到了。为了快速上手,投入了大量时间查阅相关资料,从官方文档到专业论坛,不放过任何一丝信息。同时,观看教学视频也成为了我的日常,看了不下5遍。但是对编程的指导例程还是比较少的,这在一定程度上增加了学习的难度。面对这一困境,不要气馁,转而参考往期的类似开发项目,从中汲取灵感和经验,帮助我弥补了资料上的不足。我要特别感谢电子森林社区和得捷电子举办的相关活动,它们不仅为我提供了宝贵的实践机会,更让我有机会将理论知识与实际项目相结合,从而在实践中不断积累经验、提升自我。

附件下载
eetree_funpack.zip
团队介绍
无
团队成员
永不止步
评论
0 / 100
查看更多
硬禾服务号
关注最新动态
0512-67862536
info@eetree.cn
江苏省苏州市苏州工业园区新平街388号腾飞创新园A2幢815室
苏州硬禾信息科技有限公司
Copyright © 2024 苏州硬禾信息科技有限公司 All Rights Reserved 苏ICP备19040198号