cancel
Showing results for 
Search instead for 
Did you mean: 

PSoC 4 MCU

huxu_3301281
New Contributor

我在项目中需要用到rawdata和baseline的数值,我应该怎么获取?我需要用这些数值做一些计算。

另外,产品在工作中遇到突发干扰会被误触发,这个应该如何避免?

0 Likes
1 Solution
Vison_Zhang
Moderator
Moderator

如果你使用的 CapSense 组件版本为 V2_60 或更早,你可以该组件生成的 CapSense_CSHL.h 中看到如下几个数组的定义,这几个数组分别存放 sensor 的 rawdata, baseline 和 signal, 索引值就是每个 sensor 对应的 ID,在 CapSense.h 中可以看到每个 Sensor 对应的 ID。

CapSense_sensorRaw[]

CapSense_sensorBaseline[]

CapSense_sensorSignal[]

如果你使用的是CapSense  V3.0 或更高的版本,那么你可以直接读取 CapSense_RegisterMap.h 中对应的宏定义项来直接读取,比如一个命名为 button0 的 sensor 对应的 rawdata, baseline 和signal 宏定义为,直接读取这些宏定义就可以读取到对应的数据。

#define CapSense_BUTTON0_SNS0_RAW0_VALUE                  (CapSense_dsRam.snsList.button0[0u].raw[0u])

#define CapSense_BUTTON0_SNS0_BSLN0_VALUE                 (CapSense_dsRam.snsList.button0[0u].bsln[0u])

#define CapSense_BUTTON0_SNS0_DIFF_VALUE                  (CapSense_dsRam.snsList.button0[0u].diff)

你也可以考虑使用以下 API 来进行读取, 但是仅限 widget 类型的传感器。

/********************************************************/

uint16 GetRaw(uint8 widget)

{

    uint16 raw = 0;

    CapSense_FLASH_WD_STRUCT const * ptrFlashWdgt;

    ptrFlashWdgt = &CapSense_dsFlash.wdgtArray[widget];

    raw = ((CapSense_RAM_SNS_STRUCT *)ptrFlashWdgt->ptr2SnsRam)->raw[0];

   

    return raw;

}

uint16 GetBaseline(uint8 widget)

{

    uint16 baseline = 0;

    CapSense_FLASH_WD_STRUCT const * ptrFlashWdgt;

    ptrFlashWdgt = &CapSense_dsFlash.wdgtArray[widget];

    baseline = ((CapSense_RAM_SNS_STRUCT *)ptrFlashWdgt->ptr2SnsRam)->bsln[0];

   

    return baseline;

}

uint16 GetSig(uint8 widget)

{

    uint16 diff = 0;

    CapSense_FLASH_WD_STRUCT const * ptrFlashWdgt;

    ptrFlashWdgt = &CapSense_dsFlash.wdgtArray[widget];

    diff = ((CapSense_RAM_SNS_STRUCT *)ptrFlashWdgt->ptr2SnsRam)->diff;

   

    return diff;

}

/********************************************************/

产品在工作中遇到突发干扰会被误触发,请问你说的干扰指的是什么干扰? 建议你利用以上方法把误触 sensor 的 rawdata 和 baseline 打印出来,这样才方便分析问题。

View solution in original post

0 Likes
2 Replies
Vison_Zhang
Moderator
Moderator

如果你使用的 CapSense 组件版本为 V2_60 或更早,你可以该组件生成的 CapSense_CSHL.h 中看到如下几个数组的定义,这几个数组分别存放 sensor 的 rawdata, baseline 和 signal, 索引值就是每个 sensor 对应的 ID,在 CapSense.h 中可以看到每个 Sensor 对应的 ID。

CapSense_sensorRaw[]

CapSense_sensorBaseline[]

CapSense_sensorSignal[]

如果你使用的是CapSense  V3.0 或更高的版本,那么你可以直接读取 CapSense_RegisterMap.h 中对应的宏定义项来直接读取,比如一个命名为 button0 的 sensor 对应的 rawdata, baseline 和signal 宏定义为,直接读取这些宏定义就可以读取到对应的数据。

#define CapSense_BUTTON0_SNS0_RAW0_VALUE                  (CapSense_dsRam.snsList.button0[0u].raw[0u])

#define CapSense_BUTTON0_SNS0_BSLN0_VALUE                 (CapSense_dsRam.snsList.button0[0u].bsln[0u])

#define CapSense_BUTTON0_SNS0_DIFF_VALUE                  (CapSense_dsRam.snsList.button0[0u].diff)

你也可以考虑使用以下 API 来进行读取, 但是仅限 widget 类型的传感器。

/********************************************************/

uint16 GetRaw(uint8 widget)

{

    uint16 raw = 0;

    CapSense_FLASH_WD_STRUCT const * ptrFlashWdgt;

    ptrFlashWdgt = &CapSense_dsFlash.wdgtArray[widget];

    raw = ((CapSense_RAM_SNS_STRUCT *)ptrFlashWdgt->ptr2SnsRam)->raw[0];

   

    return raw;

}

uint16 GetBaseline(uint8 widget)

{

    uint16 baseline = 0;

    CapSense_FLASH_WD_STRUCT const * ptrFlashWdgt;

    ptrFlashWdgt = &CapSense_dsFlash.wdgtArray[widget];

    baseline = ((CapSense_RAM_SNS_STRUCT *)ptrFlashWdgt->ptr2SnsRam)->bsln[0];

   

    return baseline;

}

uint16 GetSig(uint8 widget)

{

    uint16 diff = 0;

    CapSense_FLASH_WD_STRUCT const * ptrFlashWdgt;

    ptrFlashWdgt = &CapSense_dsFlash.wdgtArray[widget];

    diff = ((CapSense_RAM_SNS_STRUCT *)ptrFlashWdgt->ptr2SnsRam)->diff;

   

    return diff;

}

/********************************************************/

产品在工作中遇到突发干扰会被误触发,请问你说的干扰指的是什么干扰? 建议你利用以上方法把误触 sensor 的 rawdata 和 baseline 打印出来,这样才方便分析问题。

View solution in original post

0 Likes
huxu_3301281
New Contributor

VisonZ_71

谢谢您的答疑解惑。

0 Likes