Change capsense polling period

Tip / Sign in to post questions, reply, level up, and achieve exciting badges. Know more

cross mob
JeHu_3414236
Level 5
Level 5
10 likes received First like received

I am using SmartSense full auto-tune and I would like to change the polling rate to save power if there is no activity for a long time.  Is there an example code for this?  I tried calling CapSense_1_ScanAllWidgets() after a delay after I called CapSense_1_ProcessAllWidgets() but the processor seems to wake up immediately after I enter sleep.  Do I need to disable/clear capsense interrupts?  I tried this but it didn't have any effect:

CY_SET_REG32(CapSense_1_CSD_INTR_PTR, CapSense_1_CSD_INTR_ALL_MSK);

(void)CY_GET_REG32(CapSense_1_CSD_INTR_PTR);

NVIC_DisableIRQ(CapSense_1_ISR_cfg.intrSrc);

0 Likes
1 Solution

Hi,

There is a PSoC4 Low power CapSense Appnote (http://www.cypress.com/file/230796/download) that can be used as reference for PSoC 6.

Basically you go into DeepSleep and periodically wake up by WDT interrupt and start the scan. Then you wait in sleep mode until the CapSense interrupt is generated (scan finished) to process the data (CapSense_ProcessAllWidgets() and user defined actions). After that you go back to DeepSleep again and wait for the next WDT interrupt.

View solution in original post

0 Likes
4 Replies
JeHu_3414236
Level 5
Level 5
10 likes received First like received

I disabled the interrupts which were from a different source but I noticed current doesn't change much with capsense polling period increased.  The only way to reduce current significantly seems to be with deep sleep.  Is there a way to use capsense with deep sleep between polling?  Using 1s RTC to wake up seems too slow to poll for touch.

0 Likes

Hi,

There is a PSoC4 Low power CapSense Appnote (http://www.cypress.com/file/230796/download) that can be used as reference for PSoC 6.

Basically you go into DeepSleep and periodically wake up by WDT interrupt and start the scan. Then you wait in sleep mode until the CapSense interrupt is generated (scan finished) to process the data (CapSense_ProcessAllWidgets() and user defined actions). After that you go back to DeepSleep again and wait for the next WDT interrupt.

0 Likes

I am running capsense on CM0 and I cannot get any interrupts for WDT or MCWDT when I am in deep sleep.  I tried the simple WDT and MCWDT examples which are all for CM4 and I get the same result.  I copy all the code from CM4 to CM0 and change interrupt assignment to CM0 vector 3.  Do you know what is the problem?

0 Likes

I need to change interrupt enable code from

NVIC_EnableIRQ(srss_interrupt_mcwdt_1_IRQn);

to

NVIC_EnableIRQ(Mcwdt_Int_cfg.intrSrc);

It works now, thanks.

0 Likes