查看: 2761|回复: 2

C5000音频电容式触摸BoosterPack试用笔记(四)by juring

[复制链接]
  • TA的每日心情
    奋斗
    2020-9-28 10:10
  • 签到天数: 1018 天

    连续签到: 1 天

    [LV.10]以坛为家III

    发表于 2012-11-1 14:15:47 | 显示全部楼层 |阅读模式
    分享到:
    今天终于解决了困扰我快两个星期的问题,哈哈,放自己半天假,搞搞我的开发板~
    发点TI触摸库的资料~
    电容感应式触摸按键已经被广泛用于替代传统机械式按键,比如电磁炉、微波炉等家电上隔着面板可以操作的按钮,还有iPod的触摸操作面板也是电容感应式触控按键的应用。
    上次说过,MSP430电容触摸解决方案大致有3种:RO、RC和PinOsc
    TI的官方都有文档说明,还是中文的,见附件~

    触摸库
    500_400-1338292674_6e619d82.jpg

    一共有4个文件,这个暂时不管,只需要在建立工程的时候把它们包括进去就OK。
    如果使用库,除了库文件,工程里必须包含3个文件——main.c、structure.c、structure.h。
    main.c不用多说,用户自己的应用程序。
    structure.c和structure.h是用来配置触摸库的:
    structure.c 包含了所有的Element和Sensor的定义,这个需要根据具体应用自己来写。
    structure.h用来为其他文件提供一个桥梁,并且里面包含了预处理,用以缩小代码和使能功能块。
    有两个概念需要建立一下,Element和Sensor
    Sensor就是触摸按键的形式:按钮(Buttons)、条形滑块(Sliders)、轮式滑块(Wheels)、接近传感(Proximity_sensor)
    Element是构成Sensor的基本单位,如下图:
    500_400-1338292725_35149113.jpg

    图中有两个Sensor——一个Button和一个Slider。其中Button由一个element构成,Slider由4个element构成。
    有关Element和Sensor的定义在structure.c里,以ACTPB工程为例说明:
    500_400-1338292748_583b036f.jpg

    开发板上的触摸包括3个Sensor——一个Button(Center Button)、一个Wheel(包含上下左右4个element)、一个Proximity_sensor。
    structure.c中的定义是这样的:
    #include "structure.h"
    //PinOsc Volume down P2.2
    const struct Element volume_down = {
                  .inputPxselRegister = (uint8_t *)&P2SEL,
                  .inputPxsel2Register = (uint8_t *)&P2SEL2,
                  .inputBits = BIT2,
                  // measured for a 1Mhz SMCLK
                  .maxResponse = 121+655, // actual measure was 980
                  .threshold = 121
    };     
    //PinOsc forward right P2.3
    const struct Element right = {
                  .inputPxselRegister = (uint8_t *)&P2SEL,
                  .inputPxsel2Register = (uint8_t *)&P2SEL2,
                  .inputBits = BIT3,
                  // 1Mhz SMCLK
                  .maxResponse = 113+655,
                  .threshold = 113
    };
    //PinOsc Volume up, P2.4
    const struct Element volume_up = {
                  .inputPxselRegister = (uint8_t *)&P2SEL,
                  .inputPxsel2Register = (uint8_t *)&P2SEL2,
                  .inputBits = BIT4,
                  // 1Mhz SMCLK
                  .maxResponse = 118+655,
                  .threshold = 118
    };     
    //PinOsc reverse left P2.1
    const struct Element left = {
                  .inputPxselRegister = (uint8_t *)&P2SEL,
                  .inputPxsel2Register = (uint8_t *)&P2SEL2,
                  .inputBits = BIT1,
                  // 1Mhz SMCLK
                  .maxResponse = 111+655,
                  .threshold = 111
    };     
    //PinOsc Wheel: middle button P2.5
    const struct Element middle_element = {
                  .inputPxselRegister = (uint8_t *)&P2SEL,
                  .inputPxsel2Register = (uint8_t *)&P2SEL2,
                  .inputBits = BIT5,
                  // When using an abstracted function to measure the element
                  // the 100*(maxResponse - threshold) < 0xFFFF
                  // ie maxResponse - threshold < 655
                  .maxResponse = 350+655,
                  .threshold = 350
    };
    //PinOsc proximity: P2.0
    const struct Element proximity_element = {
                  .inputPxselRegister = (uint8_t *)&P2SEL,
                  .inputPxsel2Register = (uint8_t *)&P2SEL2,
                  .inputBits = BIT0,
                  .maxResponse = 200,
                  .threshold = 130
    };     
    //*** CAP TOUCH HANDLER *******************************************************/
    // This defines the grouping of sensors, the method to measure change in
    // capacitance, and the function of the group
    const struct Sensor wheel =
                   { //.halDefinition = fRO_PINOSC_TA0_SW,
                      .halDefinition = RO_PINOSC_TA0_WDTp,
                      .numElements = 4,
                      .points = 64,
                      .sensorThreshold = 75,
                      .baseOffset = 0,
                      // Pointer to elements
                      .arrayPtr[0] = &volume_up,  // point to first element
                      .arrayPtr[1] = &right,
                      .arrayPtr[2] = &volume_down,
                      .arrayPtr[3] = &left,
                      .accumulationCycles= WDTp_GATE_8192  // 8192
                   };
    const struct Sensor middle_button =
                   {  .halDefinition = RO_PINOSC_TA0_WDTp,
                      .numElements = 1,
                      .baseOffset = 4,
                      // Pointer to elements
                      .arrayPtr[0] = &middle_element,  // point to first element
                      // Timer Information
                      .measGateSource= GATE_WDT_SMCLK,
    .accumulationCycles= WDTp_GATE_8192  // 8192
                   };
    const struct Sensor proximity_sensor =
                   {
                      .halDefinition = RO_PINOSC_TA0_WDTp,
                      .numElements = 1,
                      .baseOffset = 5,
                      // Pointer to elements
                      .arrayPtr[0] = &proximity_element,
                      // Timer Information
                      .measGateSource= GATE_WDT_SMCLK, //  0->SMCLK, 1-> ACLK
                      .accumulationCycles= WDTp_GATE_8192               // 8192
                   };
    其中对6个elements和3个sensors做了定义:
    一个element一个结构体(定义了element对应于硬件上的管脚,触摸的阈值),一个sensor一个结构体(定义了触摸检测方法,以及硬件上用的的定时器等),从变量的命名可以看出这里用的检测方法是Pinosc,用到了TA0和看门狗定时器。关于结构体内部的具体含义参考Capacitive Touch Library Programmer's Guide,因为不同的430不同的触摸解决方案定义都不同。
    对照TI的范例程序学习会有很大的帮助~

    RC.pdf (603.09 KB, 下载次数: 2)
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2017-6-4 09:20
  • 签到天数: 427 天

    连续签到: 1 天

    [LV.9]以坛为家II

    发表于 2013-2-8 12:34:33 | 显示全部楼层
    顶一个
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2017-6-4 09:20
  • 签到天数: 427 天

    连续签到: 1 天

    [LV.9]以坛为家II

    发表于 2013-2-8 12:35:36 | 显示全部楼层
    有没有时间玩下上面的OLED,IIC的,分辨率貌似1602

    回复 支持 反对

    使用道具 举报

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

    本版积分规则

    关闭

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



    手机版|小黑屋|与非网

    GMT+8, 2024-6-6 17:52 , Processed in 0.125746 second(s), 19 queries , MemCache On.

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

    苏公网安备 32059002001037号

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.