3回答

0收藏

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

英飞凌 英飞凌 4104 人阅读 | 3 人回复 | 2012-09-24

本帖最后由 wangku001wei 于 2012-9-24 20:05 编辑

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

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



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


在具体引脚配置中 出现了
sCmod 和 sRb0


在Proximity Sensors 中添加了Sensor Name (Proximity)

在具体引脚配置中 出现了
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 组件的说明文档
分享到:
回复

使用道具 举报

回答|共 3 个

倒序浏览

沙发

小鸟_愤怒

发表于 2012-9-24 21:48:17 | 只看该作者

接近感应?这程序结果是什么,接近的话LED亮么?
静心  简单  认真  专注
板凳

w932443004

发表于 2012-9-24 21:52:37 | 只看该作者

小鸟愤怒 发表于 2012-9-24 21:48
接近感应?这程序结果是什么,接近的话LED亮么?

是的 越近 亮的灯越多 可以看我之前上传的视频
地板

小鸟_愤怒

发表于 2012-9-24 21:55:57 | 只看该作者

wangku001wei 发表于 2012-9-24 21:52
是的 越近 亮的灯越多 可以看我之前上传的视频

哦,cypress在触摸感应方面还是有一手啊
静心  简单  认真  专注
您需要登录后才可以回帖 注册/登录

本版积分规则

关闭

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