- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Hello,
Iam using PSCO4 CYC4014 Microcontroller for our project,
Iam using below mentioned API's for detecting if finger press on button,
1) CapSense_CheckIsSensorActive()
2) CapSense_CheckIsWidgetActive()
Below is function snippet.
uint32 CapSense_CheckIsSensorActive(uint32 sensor)
{
uint8 widget;
uint8 debounce;
uint8 debounceIndex;
uint8 fingerThreshold;
uint8 hysteresis;
/* Prepare to find debounce counter index */
widget = CapSense_widgetNumber[sensor];
fingerThreshold = CapSense_fingerThreshold[widget];
hysteresis = CapSense_hysteresis[widget];
debounce = CapSense_debounce[widget];
debounceIndex = widget;
/* Was on */
if (0u != CapSense_GetBitValue(CapSense_sensorOnMask, sensor))
{
/* Hysteresis minus */
if (CapSense_sensorSignal[sensor] < (fingerThreshold - hysteresis))
{
CapSense_SetBitValue(CapSense_sensorOnMask, sensor, 0u);
/* Sensor inactive - reset Debounce counter */
CapSense_debounceCounter[debounceIndex] = debounce;
}
}
else /* Was off */
{
/* Hysteresis plus */
if (CapSense_sensorSignal[sensor] >= (fingerThreshold + hysteresis))
{
CapSense_debounceCounter[debounceIndex]--;
/* Sensor active, decrement debounce counter */
if(CapSense_debounceCounter[debounceIndex] == 0u)
{
CapSense_SetBitValue(CapSense_sensorOnMask, sensor, 1u);
}
}
else
{
/* Sensor inactive - reset Debounce counter */
CapSense_debounceCounter[debounceIndex] = debounce;
}
}
return ((uint32)((0u != CapSense_GetBitValue(CapSense_sensorOnMask, sensor)) ? 1u : 0u));
}
Iam not able to detect the finger press,Please let me know where the issue is.
Thanks & Regards,
Pramod
Solved! Go to Solution.
- Labels:
-
PSoC 4 Architecture
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Hi Pramod,
Yes. I think you could add I2C and debug and then add Timer and debug..to double-check where the issue is.
Recommend to run the code in debug mode and double-check when and why these paras becoming 0.
Thanks,
Ryan
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Hi Pramod,
Could you share the full project?
uint32 CapSense_CheckIsSensorActive(uint32 sensor) is an internal function of CapSense v2.x.
Generally, it is recommended to use CapSense_CheckIsWidgetActive(Widget_Num) in main.c.
Thanks,
Ryan
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Hi Pramod,
I got the project, I will have a debug in these several days and then come back to you with more details.
Before that, here are some suggestions FYI:
1. Use CapSense_CheckIsWidgetActive(0) to detect all sensors' status and then use CapSense_sensorOnMask[0] directly.
2. Modify all priority of ISRs as 3.
3. Create a simply debug project only with CapSense_CSD component to verify CapSense can work well.
Thanks,
Ryan
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Hi ryan,
Thanks for Response,
I will try the API you have mentioned.
Please can you review the porject file ASAP.
As i need to fix this issue at the earliest.
Thanks,
Pramod
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Hi Pramod,
I bypassed Timer and I2C code, debugged CapSense and it works fine. Seems that debounce is about 9~10.
Thanks,
Ryan
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Hi ryan,
Thanks for checking with project.
Actually i require both I2C and timer in our project along capsense module.
Iam observing that after 20 sec running the code,Finger threshold,Hysteresis and debounce parameter value are becoming 0.
Can you please help me on this issue.
Thanks,
Pramod
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Hi Pramod,
Yes. I think you could add I2C and debug and then add Timer and debug..to double-check where the issue is.
Recommend to run the code in debug mode and double-check when and why these paras becoming 0.
Thanks,
Ryan
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Hi Ryan,
I will check and debug as you have said.
Thanks,
Pramod Kashyap
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Hi ryan,
After bypassing I2C and debugging the issue seems to be resolved.
Can you please let me know why this issue is coming up.
I have given all the ISR priority at the same level.
Thanks & Regards,
Pramod Kashyap
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Hi ryan,
Why all priority of ISR to be set to 3.
Please can you elabrote on this.
Thanks.
Pramod
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Hi Pramod,
Sure.
Regarding of the priority of ISR. If not same, high level ISR may interrupt low level interrupt's handler task. This should be avoided if some resources shared by different component, such as shared GPIO port. If nested interrupt is required, be careful to double-check in case of any risk.
Thanks,
Ryan