1赞

4回答

2收藏

[原创] 【PSOC4】入门学习笔记6——电容触摸滑条控制LED灯

英飞凌 英飞凌 8696 人阅读 | 4 人回复 | 2013-10-26

本帖最后由 feiante 于 2013-10-26 23:22 编辑

今天主要是学习电容式感应组件,通过滑动板子上的触摸滑条来改变LED灯的亮度。
试验步骤:
1、在原理图界面中放置一个CapSense CSD组件,一个时钟组件,一个PWM组件以及一个数字量输出引脚组件。如图1.JPG所示。
2、配置CapSense CSD组件:双击CapSense CSD组件,General选项按照默认,不用改动。Widgets Config选项中,由于我们的电路板使用的是滑条触摸方式,所以选择Linear sliders,点击Add linear slider加入一条触摸滑条。在右边Number of Sensor Elements处写入5,因为我们的滑条有5个传感器。API Resoution处写入255,此处后面会继续解释。剩下的选项都是按照默认的,点击OK配置好CapSense CSD组件。
3、配置PWM组件:如图2.jpg所示,设置Compare为32767,这样在PWM初始化时,输出的占空比为50%,LED灯的亮度为中等亮度,当然如果设置为65533或1时,初始化后LED灯分别为最暗(基本上看不到亮度)或最亮状态。
4、配置数字引脚为输出状态。
5、编写程序:按照图3.JPG和4.JPG编写程序。
6、打开CapSense_LED.cydwr,按照原理图分配芯片管脚。
7、编译并下载程序。

程序分析:
1、首先是初始化PWM和CapSense CSD组件:PWM_1_Start(); CapSense_1_Start();        
2、扫描所选的传感器:CapSense_1_InitializeAllBaselines();这个函数就是对每个传感器执行CapSense_1_InitializeSensorBaseline()函数。
CapSense_1_InitializeSensorBaseline()函数包括以下几个功能:扫描每个或一组传感器;初始化每个传感器的基准线的数据。
3、更新基准线:CapSense_1_UpdateEnabledBaselines();
4、扫描所有的传感器,如果扫描结束,就执行相应的操作。(此处是获得手指触摸的位置并根据位置改变PWM的比较值,从而改变LED灯的亮度。)

需要说明的:
1、if (curPos == 0xFFFF),为什么是FFFF呢?组件手册上写到如果没有任何传感器处于活动状态,则返回值是0xFFFF。
2、PWM_1_WriteCompare((uint32)curPos *255); 255是什么意思?在配置CapSense CSD组件时,API Resoution处写入255表示把整个滑条分为255等分,假设滑条最左边为0,那么手指滑到最右边时,CapSense_1_GetCentroidPos(CapSense_1_LINEARSLIDER0__LS);函数返回值就是255。(如图5.JPG和6.JPG所示,分别为点击滑条最左边和最右边时候的状态)
由于PWM的周期为65535,所以65535除以255等于257。所以PWM的比较值设置为255.





1.JPG (58.71 KB, 下载次数: 396)

1.JPG

2.JPG (72.21 KB, 下载次数: 457)

2.JPG

3.JPG (86.05 KB, 下载次数: 326)

3.JPG

4.JPG (44.08 KB, 下载次数: 330)

4.JPG

5.JPG (57.07 KB, 下载次数: 263)

5.JPG

6.JPG (57.21 KB, 下载次数: 395)

6.JPG
分享到:
回复

使用道具 举报

回答|共 4 个

倒序浏览

沙发

cude91

发表于 2013-11-20 13:48:58 | 只看该作者

xiexie!!












超级P57官网 P57 泰尔维亭超级p57 超级P57官方网站 超级p57  
板凳

党国特派员

发表于 2016-11-23 10:56:43 | 只看该作者

Thread t1(thread1);
喜欢在构思妙想,电子产品DIY是工作,也是一种爱好。
地板

feixiang20

发表于 2017-12-17 18:48:03 | 只看该作者

做个标记,有空学下
5#

tanik

发表于 2018-2-26 23:20:42 | 只看该作者

谢谢!比英文的好懂多了
您需要登录后才可以回帖 注册/登录

本版积分规则

关闭

站长推荐上一条 /3 下一条