内容介绍
内容介绍
一、项目描述
使用SAME51芯片TC定时器生成PWM驱动板载LED呼吸闪烁,并配合TTP224触摸模块,通过SAME51芯片的EIC外部中断判断触摸引脚的触摸,来启动或关闭PWM输出和更改LED呼吸灯闪烁频率
二、硬件介绍
1.SAM E51 Curiosity Nano评估板
SAME51J20A Curiosity Nano 评估套件(EV76S68A)是用于评估 SAME51J20A 微控制器(MCU)的硬件平台,该板由 MPLAB 集成工具开发环境和 MPLAB Harmony 提供支持。该评估套件可轻松访问 SAME51J20A 的功能,以将器件集成到定制设计中。Curiosity Nano 系列评估套件包括一个板载 Nano 调试器,因此无需外部工具即可对 SAME51J20A 器件进行编程。
2.TTP224触摸模块
是一款使用电容式感应原理设计的触摸IC,其稳定的感应方式可以应用到各种不同电子类产品,面板介质可以是完全绝源的材料,专为取代传统的机械结构开关或普通按键而设计,提供4个触摸输入端口及4个直接输出端口。
三、软件流程图及主要代码片段
1.触摸滑动检测相关变量定义
// 滑动检测相关变量
uint8_t touch_numbers = 0; // 触摸数字
uint8_t OUT1_touch_sign = 0; // 开启标志
uint8_t slide_direction = 0; // 0-无滑动 1-左滑 2-右滑
//呼吸速率档位数量和定义
#define BREATH_SPEED 5
// 各档位对应的呼吸周期,每个周期包含渐亮和渐暗
const uint16_t breathSpeeds[BREATH_SPEED] = {50, 150, 250, 350, 450};
uint8_t BREATH_SPEED_GEAR = 2;//呼吸速度挡位,默认为中间档
uint8_t a = 0;//开启定时器后只启动一次PWM启动
2.Main函数
2.1定时器、系统定时器、外部中断 初始化
SYS_Initialize ( NULL );
TC3_CompareStart();//开启定时器,提供PWM输出
SYSTICK_TimerStart();//开启系统定时器,提供延时函数
//开启触摸外部中断
EIC_InterruptEnable(EIC_PIN_4);
EIC_InterruptEnable(EIC_PIN_5);
EIC_InterruptEnable(EIC_PIN_6);
EIC_CallbackRegister(EIC_PIN_4, EIC_OUT1, 0);
EIC_CallbackRegister(EIC_PIN_5, EIC_OUT2, 0);
EIC_CallbackRegister(EIC_PIN_6, EIC_OUT3, 0);
2.2while ( true )
2.2.1左滑处理
if(slide_direction == 1)
{
// 左滑处理
slide_direction = 0; //标准复位
if(BREATH_SPEED_GEAR < 5)
{
BREATH_SPEED_GEAR = BREATH_SPEED_GEAR + 1;
}
}
2.2.2右滑处理
if(slide_direction == 2)
{
// 右滑处理
slide_direction = 0; //标准复位
if(BREATH_SPEED_GEAR > 0)
{
BREATH_SPEED_GEAR = BREATH_SPEED_GEAR - 1;
}
}
2.2.3呼吸灯闪烁
//呼吸灯闪烁
if(OUT1_touch_sign == 1)
{
if(a == 0)
{
TC3_CompareStart();
a = a + 1;
}
TC3_Compare16bitPeriodSet(breathSpeeds[BREATH_SPEED_GEAR]);//周期函数
for (int i = 0; i < breathSpeeds[BREATH_SPEED_GEAR] ; i++)
{
TC3_Compare16bitMatch0Set(i);//比较值
SYSTICK_DelayMs(5);//延时,防止过快
}
for (int i = breathSpeeds[BREATH_SPEED_GEAR]-1; i >= 0 ; i--)
{
TC3_Compare16bitMatch0Set(i);
SYSTICK_DelayMs(5);
}
}
2.2.4PWM开启关闭处理
if(OUT1_touch_sign == 0)
{
TC3_Compare16bitPeriodSet(0);
TC3_CompareStop();
a = 0;
}
3.外部中断
3.1外部中断触摸通道一处理
//外部中断一,判断是否按下通道一
void EIC_OUT1 (uintptr_t context)
{
if(OUT1_touch_sign == 1)
{
OUT1_touch_sign = 0;
}else
{
OUT1_touch_sign = 1;
}
}
3.2外部中断触摸通道二处理
void EIC_OUT2 (uintptr_t context)
{
touch_numbers = touch_numbers + 1;
//当数字为3时,说明已经触摸通道3
if(touch_numbers == 3)
{
touch_numbers = 0;
slide_direction = 1;//左滑
}else if(touch_numbers>3)
{
//用于排除其他操作导致的触摸数字跑飞
touch_numbers = 0;
}
}
3.2外部中断触摸通道三处理
void EIC_OUT3 (uintptr_t context)
{
touch_numbers = touch_numbers + 2;
//当数字为3时,说明已经触摸通道3
if(touch_numbers == 3)
{
touch_numbers = 0;
slide_direction = 2;//右滑
}else if(touch_numbers>3)
{
touch_numbers = 0;
}
}
四、功能展示图片及说明
触摸通道一 LED灯PWM开启关闭
触摸左滑--增加呼吸周期
触摸右滑--减少呼吸周期
五、项目中遇到的难题和解决方法
对于MCC的教材少,导致一直卡在系统配置
通过浏览官方的中文论坛和询问AI软件得到解决
六、对本活动的心得体会
对于电容触摸的学习跟进一步,之前只是对按键简单的赋值,当类似滑动电阻器用,这次使用触摸数字的写法,实现了左滑和右滑。
附件下载
LED.zip
团队介绍
一个热爱嵌入式的个人爱好者
评论
0 / 100
查看更多
猜你喜欢
Funpack4-2 - 用SAME51J20A实现触摸控制呼吸灯该项目使用了SAME51J20A Curiosity Nano 评估套件和自制的触摸扩展板,结合microchip的触摸外设控制器,实现了通过触摸按键调节呼吸灯亮度,通过触摸滑条来调节呼吸灯“闪烁速度”的设计,它的主要功能为:使用MPLAB开发,让部分管脚实现触摸功能,搭配自行设计的触摸扩展面板,通过按键和滑动实现呼吸灯速率切换。。
littlestudent
19
Funpack4-2 - 用SAME51J20A Curiosity Nano 触摸控制呼吸灯该项目使用了SAME51J20A Curiosity Nano,实现了触摸控制呼吸灯的设计,它的主要功能为:通过电容触摸模块实现左滑、右滑控制 WS2812B LED 呼吸灯的速率,并且在 OLED 上显示当前速度。
学嵌入式的Momo
19
Funpack4-2 -基于SAME51J20A的呼吸灯控制该项目使用了SAME51J20A,实现了呼吸灯控制的设计,它的主要功能为:按键和滑动控制呼吸灯速率。
孤独的单行者
12