[PSOC™] 【英飞凌PSOC 4000T DIY】触摸按键调节LED亮度

[复制链接]
 楼主| 南来之风 发表于 2025-4-26 15:00 | 显示全部楼层 |阅读模式
<
本帖最后由 南来之风 于 2025-4-26 15:09 编辑

上期文章已经调试成功了自制的电容触摸扩展板,本次扩展PWM驱动板载LED,实现触摸控制亮度调节。
触摸按键的调试,参考: https://bbs.21ic.com/icview-3448674-1-1.html

从电路板原理图,P3_0连接到LED2:



引脚P3_0的有PWM功能:


打开Device COnfigurator,在外设里面找到Digital,开启TCPWM 16bit Counter 0



点击保存,在main.c里面增加初始化代码:
  1. (void) Cy_TCPWM_PWM_Init(CYBSP_PWM_P3_0_HW, CYBSP_PWM_P3_0_NUM,
  2.                         &CYBSP_PWM_P3_0_config);
  3.         /* Enable the initialized PWM */
  4.         Cy_TCPWM_Enable_Multiple(CYBSP_PWM_P3_0_HW, CYBSP_PWM_P3_0_MASK);
  5.         /* Then start the PWM */
  6.         Cy_TCPWM_TriggerReloadOrIndex(CYBSP_PWM_P3_0_HW, CYBSP_PWM_P3_0_MASK);

  7.         Cy_TCPWM_PWM_SetPeriod0(CYBSP_PWM_P3_0_HW, CYBSP_PWM_P3_0_NUM, 1000);
  8.         Cy_TCPWM_PWM_SetCompare0(CYBSP_PWM_P3_0_HW, CYBSP_PWM_P3_0_NUM, 0);


根据是否触摸来调节LED亮度:
  1. void led_control() {
  2.         static uint32_t a = 0;
  3.         static uint32_t PrevStatus = 0;
  4.         static uint32_t CurrentStatus = 0;

  5.         CurrentStatus = Cy_CapSense_IsWidgetActive(CY_CAPSENSE_BUTTON0_WDGT_ID,        &cy_capsense_context);
  6.         if((CAPSENSE_WIDGET_INACTIVE == CurrentStatus)&&(CurrentStatus != PrevStatus)){
  7.                 if (a == 1000)
  8.                         a = 0;
  9.                 else
  10.                         a = a + 200;
  11.                 Cy_TCPWM_TriggerReloadOrIndex(CYBSP_PWM_P3_0_HW, CYBSP_PWM_P3_0_MASK);
  12.                 Cy_TCPWM_PWM_SetPeriod0(CYBSP_PWM_P3_0_HW, CYBSP_PWM_P3_0_NUM, 1000);
  13.                 Cy_TCPWM_PWM_SetCompare0(CYBSP_PWM_P3_0_HW, CYBSP_PWM_P3_0_NUM, a);

  14.         }
  15. ....
  16. }

烧录后,触摸按键按下后,亮度从最低到最亮。







演示视频:

https://v.youku.com/video?vid=XNjQ2OTM5MDk1Mg==

本帖子中包含更多资源

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

×
您需要登录后才可以回帖 登录 | 注册

本版积分规则

69

主题

290

帖子

2

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