Funpack4-2 -使用SAME51实现呼吸灯速率切换控制
该项目使用了SAME51,实现了呼吸灯速率控制的设计,它的主要功能为:使用SAME51实现呼吸灯速率切换控制,通过按键和触摸滑动。
标签
Funpack活动
呼吸灯
Funpack4-2
SAME51
立冬的雪
更新2025-07-02
84

项目介绍

项目功能介绍

本次任务基于 Microchip 的 SAME51J20A Curiosity Nano核心板实现通过按键和滑动实现呼吸灯速率切换的功能,这里主要是需要存在两个控制方式,来实现多种速率模式的实现,我们可以通过MPLAB X IDE进行 Microchip单片机的开发。

设计思路

该项目需要实现的主要有两部分:

1、呼吸灯的效果实现,并具有不同速率模式;

2、通过按键和滑动方式可以控制,可采集。

硬件框图


0

软件流程图


0

硬件介绍

SAME51J20A Curiosity Nano 评估套件(EV76S68A)是用于评估 SAME51J20A 微控制器(MCU)的硬件平台,由 MPLAB® X 集成开发环境(IDE)提供支持,支持MPLAB Harmony开发框架,集成低功耗与高性能特性,支持TrustZone安全技术和丰富外设。板载调试器支持数据可视化分析,适用于物联网终端、工业控制及人机交互场景。Curiosity Nano 评估平台提供了一组可访问大多数单片机I/O 的小型电路板。该平台包含一系列低引脚数单片机(MCU)电路板,相关的用户指南、应用笔记、数据手册和示例代码由MPLAB X IDE 提供。该平台配有一个用于与主机PC 进行串行通信的虚拟COM 端口(CDC)以及一个数据网关接口(Data Gateway Interface,DGI)GPIO。


0

特性

• SAME51J20A 单片机

• 一个用户LED(黄色)

• 一个机械用户开关

• 板上调试器

– MPLAB X IDE 中的电路板标识

– 一个绿色电源/状态LED

– 编程与调试

– 虚拟COM 端口(CDC)

– 一个逻辑分析器(DGI GPIO)

• USB 供电

• 可调目标电压

– MIC5353 LDO 稳压器,由板上调试器控制

– 1.8-3.6V 输出电压

– 500 mA 最大输出电流(受环境温度和输出电压限制)

主要代码片段和介绍

1、外设配置


0

2、呼吸灯效果控制

外部接口是PA14,可选择的PWM输出为TCC1的CH2:


0

呼吸灯效果的实现实际上就是PWM占空比的不断改变,从而产生呼吸灯的效果,想要规律的变化就要在定时器中进行了。

定时中断处理代码如下:

void TC1_TIMER_CALLBACK(TC_TIMER_STATUS status, uintptr_t context) {
if(LEDPWM_cnt < speed_cnt)
{
LEDPWM_cnt++;
if(UporDown == 0)
TCC1_PWM24bitDutySet(TCC1_CHANNEL2, 1000/speed_cnt*LEDPWM_cnt);
else
TCC1_PWM24bitDutySet(TCC1_CHANNEL2, 1000/speed_cnt*(speed_cnt-LEDPWM_cnt));
}
else
{
LEDPWM_cnt = 0;
if(UporDown == 0)
UporDown = 1;
else
UporDown = 0;
}
}

3、滑动控制的实现

添加 Touch模块,会自动添加ADC和定时模块,然后可以在 [Project Graph] -> [Plugins] -> [Touch Configuration] 内进行具体的配置。先添加一个滑条,,默认是4个引脚,我们需要添加一个连续的引脚,还必须是ADC的输入引脚,只有这些区域是连续的ADC:


0

之后将传感器与引脚绑定:


0

然后就可以在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)
{
if(Mode_flag == 0)
{
Mode_flag = 1;
UporDown = 0;
speed_cnt = 500;
}
else if(Mode_flag == 1)
{
Mode_flag = 0;
UporDown = 0;
speed_cnt = 1000;
}
}
}
}

4、按键采集

按键的采集这里使用的是EIC模块,也就是引脚外部中断,配置EIC模块实现下降沿触发中断,回到函数代码如下:

void EIC_KEY_CALLBACK(uintptr_t context)
{
if(Mode_flag == 0)
{
Mode_flag = 1;
UporDown = 0;
speed_cnt = 500;
}
else if(Mode_flag == 1)
{
Mode_flag = 0;
UporDown = 0;
speed_cnt = 1000;
}
}

效果展示

可以看到我们通过外接接口直接可以实现触摸滑动的效果,具体效果参见视频:


0

心得体会

非常高兴可以参加本次的DIY学习活动,可以有机会基础全新的单片机和开发环境,真的是每一家都有自己的特点,学习过程中可以了解到新的方式还是非常开心的事情,同时在解决问题的同事也是对自己的提升,学习资料确实比较喜好,幸好论坛有教程也有之前相关的活动支持快速开发,希望可以继续坚持初心,继续前行!

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