打印
[PSOC™]

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

[复制链接]
214|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 南来之风 于 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里面增加初始化代码:
 (void) Cy_TCPWM_PWM_Init(CYBSP_PWM_P3_0_HW, CYBSP_PWM_P3_0_NUM,
                        &CYBSP_PWM_P3_0_config);
        /* Enable the initialized PWM */
        Cy_TCPWM_Enable_Multiple(CYBSP_PWM_P3_0_HW, CYBSP_PWM_P3_0_MASK);
        /* Then start the PWM */
        Cy_TCPWM_TriggerReloadOrIndex(CYBSP_PWM_P3_0_HW, CYBSP_PWM_P3_0_MASK);

        Cy_TCPWM_PWM_SetPeriod0(CYBSP_PWM_P3_0_HW, CYBSP_PWM_P3_0_NUM, 1000);
        Cy_TCPWM_PWM_SetCompare0(CYBSP_PWM_P3_0_HW, CYBSP_PWM_P3_0_NUM, 0);


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

        CurrentStatus = Cy_CapSense_IsWidgetActive(CY_CAPSENSE_BUTTON0_WDGT_ID,        &cy_capsense_context);
        if((CAPSENSE_WIDGET_INACTIVE == CurrentStatus)&&(CurrentStatus != PrevStatus)){
                if (a == 1000)
                        a = 0;
                else
                        a = a + 200;
                Cy_TCPWM_TriggerReloadOrIndex(CYBSP_PWM_P3_0_HW, CYBSP_PWM_P3_0_MASK);
                Cy_TCPWM_PWM_SetPeriod0(CYBSP_PWM_P3_0_HW, CYBSP_PWM_P3_0_NUM, 1000);
                Cy_TCPWM_PWM_SetCompare0(CYBSP_PWM_P3_0_HW, CYBSP_PWM_P3_0_NUM, a);

        }
....
}

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







演示视频:

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

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

63

主题

282

帖子

2

粉丝