查看: 2708|回复: 2

PSoC3 FirstTouch Starter Kit 例子源代码之CapSense Slider简单分析

[复制链接]
  • TA的每日心情
    奋斗
    2018-8-29 20:40
  • 签到天数: 1341 天

    连续签到: 1 天

    [LV.10]以坛为家III

    发表于 2012-9-24 21:38:05 | 显示全部楼层 |阅读模式
    分享到:
    本帖最后由 wangku001wei 于 2012-9-24 21:37 编辑

    依然是简单分析

    首先看原理图
    QQ截图20120924200914.jpg
    使用了CapSense组件

    注意 由于我们在General选项卡中选择了
    IDAC disable,use external Rb
    在具体配置中 出现了
    sCmod 和 sRb0
    在Slidrs 中添加了Slider Name (slider)并设置了5个元素,线性方式,64精度
    QQ截图20120924201008.jpg
    在具体引脚配置中 出现了
    LS_slider_e0 LS_slider_e4
    QQ截图20120924200939.jpg
    并且和实际电路对应
    QQ截图20120924201451.jpg
    代码分析
    /*************************************************************************************
                                    操作原理
    程序中,所有的滑动传感器连续判断手指在滑动器上的位置
    发现手指的位置后,点亮对应位置处的LED;否则若没有发现手指,熄灭所有的LED   
    /*************************************************************************************/
    #include <device.h>
    /*************************************************************************************
    * 3: Scan all slider sensors continuously and report finger position
    * 主函数的功能:
    * 1: 关闭所有的LED  
    * 2: 启动电容感应组件
    * 3: 连续扫描所有的滑动传感器并指示手指的位置
    * 4: 根据手指在滑动传感器上的位置点亮对应位置的LED灯
    /*************************************************************************************/

    #define NUM_LED (3)

    void main()
    {
        uint8 CentroidPosition=0xFF;
        uint8 LedData=0;
        uint8 TempVar=0;

        /*使能全局中断*/
        CYGlobalIntEnable;

        /*关闭LED灯*/
        LED_Control_Reg_Write(LedData);

        /*启动并且初始化电容感应传感器*/
        CapSenseSlider_Start();
        CapSenseSlider_CSHL_InitializeAllBaselines();

        while(1)
        {
            /*扫描并更新电容滑动感应传感器S */
            CapSenseSlider_CSD_ScanAllSlots();
            CapSenseSlider_CSHL_UpdateAllBaselines();

            /* 得到滑动器上手指的圆心位置 */
            CentroidPosition = (uint8)CapSenseSlider_CSHL_GetCentroidPos(CapSenseSlider_CSHL_LS_SLIDER);

           /* 如果在滑动器上发现了手指,则点亮对应位置处的LED*/
            LedData = 0;
            if(CentroidPosition != 0xFF)
            {
                /* 得到手指的位置,并转换为LED的显示位置 */
                LedData = 1 << (CentroidPosition >> NUM_LED);
            }

           /* 更新LED灯的状态*/
            LED_Control_Reg_Write(LedData);
        }
    }
    CapSense组件的使用 可参考帮助文档
    在配置对话框框中
    单击Data Sheet即可出现一个PDF

    由于只是针对代码的简单分析 对组件的使用还不是很了解
    接下来准备阅读ADC 和 CapSense 组件的说明文档
    回复

    使用道具 举报

  • TA的每日心情
    奋斗
    2015-11-4 19:13
  • 签到天数: 281 天

    连续签到: 1 天

    [LV.8]以坛为家I

    发表于 2012-9-24 21:49:44 | 显示全部楼层
    不错,加油啊,到时帮你出个全集
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2020-9-28 10:10
  • 签到天数: 1018 天

    连续签到: 1 天

    [LV.10]以坛为家III

    发表于 2012-9-25 09:01:18 | 显示全部楼层
    分析不错~~~顶个~
    回复 支持 反对

    使用道具 举报

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

    本版积分规则

    关闭

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



    手机版|小黑屋|与非网

    GMT+8, 2024-11-25 17:04 , Processed in 0.132647 second(s), 19 queries , MemCache On.

    ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

    苏公网安备 32059002001037号

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.