查看: 3267|回复: 3

PSoC3 FirstTouc Starter Kit 例子源代码之Proximity Sensor简单分析

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

    连续签到: 1 天

    [LV.10]以坛为家III

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

    注意 仅仅是简单分析哦
    组件的原理及使用还在研究中

    首先看原理图
    可见接近传感器也是使用了CapSense组件
    QQ截图20120924094619.jpg


    注意 由于我们在配置对话框的General选项卡中选择了
    IDAC disable,use external Rb
    QQ截图20120924101415.jpg

    在具体引脚配置中 出现了
    sCmod 和 sRb0
    QQ截图20120924101935.jpg

    在Proximity Sensors 中添加了Sensor Name (Proximity)
    QQ截图20120924102400.jpg
    在具体引脚配置中 出现了
    PROX_Promimity_0

    LED灯的配置和之前的Proximity Sensor基本相同
    只是这次是用8个寄存器各自独立的控制一个LED
    PdPort_LSB 对应P2口的P2[3:0]控制
    dPort_MSB 对应P4口的P4[3:0]控制
    同样的,反向是因为电路设计为低电平点亮LED,高电平熄灭LED
    代码分析
    /*******************************************************************************************
    * 主函数的功能:
    * 1: 关闭所有的LED  
    * 2: 启动电容感应组件
    * 3: 查看接近传感器并报告信号强度
    * 4: 根据手指接近传感器的程度点亮对应数量的LED灯
    /******************************************************************************************/
    /* 存储位置信号值的数组*/
    extern uint8 CapSenseProximity_CSHL_SlotSignal[(CapSenseProximity_TOTAL_SCANSLOT_COUNT - CapSenseProximity_TOTAL_GENERIC_SCANSLOT_COUNT)];

    void main()
    {
        uint8 Sensitivity = 15;
        uint8 tempVar = 0;
        uint8 LedData = 0;
        uint8 ProximitySignal = 0;
        uint16 i = 0;

        /* 使能全局中断 */
        CYGlobalIntEnable;
        /* 关闭LED灯 */
        LED_Control_Reg_Write(LedData);
        /* 启动并且初始化电容接近感应传感器 */
        CapSenseProximity_Start();
        /* 初始化基线 */
        CapSenseProximity_CSHL_InitializeSlotBaseline(CapSenseProximity_CSHL_PROX_PROXIMITY);

        while(1)
        {
            /* 在读取信号之前进行短暂的延时 以便降低LED的更新速度 */
            for(i = 0; i <= 10000; i++);
           /* 扫描并更新基线 */
            CapSenseProximity_CSD_ScanSlot(CapSenseProximity_CSHL_PROX_PROXIMITY);
            CapSenseProximity_CSHL_UpdateSlotBaseline(CapSenseProximity_CSHL_PROX_PROXIMITY);

            /* 判断传感器是否激活 */
            LedData=0;
            if(CapSenseProximity_CSHL_CheckIsSlotActive(CapSenseProximity_CSHL_PROX_PROXIMITY))
            {
                /* 读取当前传感器值 */
                ProximitySignal = (uint8)CapSenseProximity_CSHL_SlotSignal[CapSenseProximity_CSHL_PROX_PROXIMITY];
                /* 根据信号值计算需要点亮的LED */
                tempVar = ProximitySignal / Sensitivity;
                for(i = 1 ; i <= tempVar ; i++)
                {
                    LedData = LedData << 1;
                    LedData = LedData | 1;
                }
            }
            /* 更新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:48:17 | 显示全部楼层
    接近感应?这程序结果是什么,接近的话LED亮么?
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2018-8-29 20:40
  • 签到天数: 1341 天

    连续签到: 1 天

    [LV.10]以坛为家III

    发表于 2012-9-24 21:52:37 | 显示全部楼层
    小鸟愤怒 发表于 2012-9-24 21:48
    接近感应?这程序结果是什么,接近的话LED亮么?

    是的 越近 亮的灯越多 可以看我之前上传的视频
    回复 支持 反对

    使用道具 举报

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

    连续签到: 1 天

    [LV.8]以坛为家I

    发表于 2012-9-24 21:55:57 | 显示全部楼层
    wangku001wei 发表于 2012-9-24 21:52
    是的 越近 亮的灯越多 可以看我之前上传的视频

    哦,cypress在触摸感应方面还是有一手啊
    回复 支持 反对

    使用道具 举报

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

    本版积分规则

    关闭

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



    手机版|小黑屋|与非网

    GMT+8, 2024-12-24 20:59 , Processed in 0.142532 second(s), 22 queries , MemCache On.

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

    苏公网安备 32059002001037号

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.