Hi,
My customers made a capacitive sensor product with MSP430FR2633.
This product wakes up even though they are not touching.
Wake-on-Proximity occurs at the cycle timing of Wakeup Interval.
Would you tell me the solution?
/* --COPYRIGHT--,BSD * Copyright (c) 2017, Texas Instruments Incorporated * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * * Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * * Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * * Neither the name of Texas Instruments Incorporated nor the names of * its contributors may be used to endorse or promote products derived * from this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * --/COPYRIGHT--*/ // Generated by Captivate Design Center v1_70_00_03 on Fri Jun 14 16:48:22 GMT+09:00 2019 //***************************************************************************** // CAPT_UserConfig.c // // \version 1.70.00.03 // Released on July 30, 2018 // //***************************************************************************** //***************************************************************************** // // NOTE: This is an automatically generated source code file! The Captivate // Design Center generates the User Configuration file automatically based // upon the sensor layout that was created. // // Changes to this file will be OVERWRITTEN if a you select // "Update Existing Project" under "Generate Source Code" in the Design Center. // // To avoid interference with the code generation process, keep ALL application // code external to this file. // //***************************************************************************** #include "CAPT_UserConfig.h" //***************************************************************************** // //! Captivate Element Definitions //! All elements in this application are defined below. //! Each element has 3 components: //! 1) a raw count array (One index per freq. scanned) (uint16_t) //! 2) a tuning array (One index per freq. scanned) (tCaptivateElementTuning) //! 3) a element structure (tElement) // //***************************************************************************** // Sensor: BTN00, Element: E00 uint16_t BTN00_E00_RawCnts[CAPT_MUTUAL_FREQ_CNT]; tCaptivateElementTuning BTN00_E00_Tuning[CAPT_MUTUAL_FREQ_CNT]; tElement BTN00_E00 = { .ui8TxPin = 1, .ui8TxBlock = 0, .ui8RxPin = 0, .ui8RxBlock = 0, .ui8TouchThreshold = 8, .pRawCount = BTN00_E00_RawCnts, .pTuning = BTN00_E00_Tuning, }; // Sensor: BTN00, Element: E01 uint16_t BTN00_E01_RawCnts[CAPT_MUTUAL_FREQ_CNT]; tCaptivateElementTuning BTN00_E01_Tuning[CAPT_MUTUAL_FREQ_CNT]; tElement BTN00_E01 = { .ui8TxPin = 1, .ui8TxBlock = 0, .ui8RxPin = 0, .ui8RxBlock = 1, .ui8TouchThreshold = 8, .pRawCount = BTN00_E01_RawCnts, .pTuning = BTN00_E01_Tuning, }; // Sensor: BTN00, Element: E02 uint16_t BTN00_E02_RawCnts[CAPT_MUTUAL_FREQ_CNT]; tCaptivateElementTuning BTN00_E02_Tuning[CAPT_MUTUAL_FREQ_CNT]; tElement BTN00_E02 = { .ui8TxPin = 1, .ui8TxBlock = 0, .ui8RxPin = 0, .ui8RxBlock = 2, .ui8TouchThreshold = 8, .pRawCount = BTN00_E02_RawCnts, .pTuning = BTN00_E02_Tuning, }; // Sensor: BTN00, Element: E03 uint16_t BTN00_E03_RawCnts[CAPT_MUTUAL_FREQ_CNT]; tCaptivateElementTuning BTN00_E03_Tuning[CAPT_MUTUAL_FREQ_CNT]; tElement BTN00_E03 = { .ui8TxPin = 1, .ui8TxBlock = 0, .ui8RxPin = 0, .ui8RxBlock = 3, .ui8TouchThreshold = 8, .pRawCount = BTN00_E03_RawCnts, .pTuning = BTN00_E03_Tuning, }; // Sensor: BTN00, Element: E04 uint16_t BTN00_E04_RawCnts[CAPT_MUTUAL_FREQ_CNT]; tCaptivateElementTuning BTN00_E04_Tuning[CAPT_MUTUAL_FREQ_CNT]; tElement BTN00_E04 = { .ui8TxPin = 2, .ui8TxBlock = 0, .ui8RxPin = 0, .ui8RxBlock = 0, .ui8TouchThreshold = 8, .pRawCount = BTN00_E04_RawCnts, .pTuning = BTN00_E04_Tuning, }; // Sensor: BTN00, Element: E05 uint16_t BTN00_E05_RawCnts[CAPT_MUTUAL_FREQ_CNT]; tCaptivateElementTuning BTN00_E05_Tuning[CAPT_MUTUAL_FREQ_CNT]; tElement BTN00_E05 = { .ui8TxPin = 2, .ui8TxBlock = 0, .ui8RxPin = 0, .ui8RxBlock = 1, .ui8TouchThreshold = 8, .pRawCount = BTN00_E05_RawCnts, .pTuning = BTN00_E05_Tuning, }; // Sensor: BTN00, Element: E06 uint16_t BTN00_E06_RawCnts[CAPT_MUTUAL_FREQ_CNT]; tCaptivateElementTuning BTN00_E06_Tuning[CAPT_MUTUAL_FREQ_CNT]; tElement BTN00_E06 = { .ui8TxPin = 2, .ui8TxBlock = 0, .ui8RxPin = 0, .ui8RxBlock = 2, .ui8TouchThreshold = 8, .pRawCount = BTN00_E06_RawCnts, .pTuning = BTN00_E06_Tuning, }; // Sensor: BTN00, Element: E07 uint16_t BTN00_E07_RawCnts[CAPT_MUTUAL_FREQ_CNT]; tCaptivateElementTuning BTN00_E07_Tuning[CAPT_MUTUAL_FREQ_CNT]; tElement BTN00_E07 = { .ui8TxPin = 2, .ui8TxBlock = 0, .ui8RxPin = 0, .ui8RxBlock = 3, .ui8TouchThreshold = 8, .pRawCount = BTN00_E07_RawCnts, .pTuning = BTN00_E07_Tuning, }; // Sensor: BTN00, Element: E08 uint16_t BTN00_E08_RawCnts[CAPT_MUTUAL_FREQ_CNT]; tCaptivateElementTuning BTN00_E08_Tuning[CAPT_MUTUAL_FREQ_CNT]; tElement BTN00_E08 = { .ui8TxPin = 3, .ui8TxBlock = 0, .ui8RxPin = 0, .ui8RxBlock = 0, .ui8TouchThreshold = 8, .pRawCount = BTN00_E08_RawCnts, .pTuning = BTN00_E08_Tuning, }; // Sensor: BTN00, Element: E09 uint16_t BTN00_E09_RawCnts[CAPT_MUTUAL_FREQ_CNT]; tCaptivateElementTuning BTN00_E09_Tuning[CAPT_MUTUAL_FREQ_CNT]; tElement BTN00_E09 = { .ui8TxPin = 3, .ui8TxBlock = 0, .ui8RxPin = 0, .ui8RxBlock = 1, .ui8TouchThreshold = 8, .pRawCount = BTN00_E09_RawCnts, .pTuning = BTN00_E09_Tuning, }; // Sensor: BTN00, Element: E10 uint16_t BTN00_E10_RawCnts[CAPT_MUTUAL_FREQ_CNT]; tCaptivateElementTuning BTN00_E10_Tuning[CAPT_MUTUAL_FREQ_CNT]; tElement BTN00_E10 = { .ui8TxPin = 3, .ui8TxBlock = 0, .ui8RxPin = 0, .ui8RxBlock = 2, .ui8TouchThreshold = 8, .pRawCount = BTN00_E10_RawCnts, .pTuning = BTN00_E10_Tuning, }; // Sensor: BTN00, Element: E11 uint16_t BTN00_E11_RawCnts[CAPT_MUTUAL_FREQ_CNT]; tCaptivateElementTuning BTN00_E11_Tuning[CAPT_MUTUAL_FREQ_CNT]; tElement BTN00_E11 = { .ui8TxPin = 3, .ui8TxBlock = 0, .ui8RxPin = 0, .ui8RxBlock = 3, .ui8TouchThreshold = 8, .pRawCount = BTN00_E11_RawCnts, .pTuning = BTN00_E11_Tuning, }; // Sensor: PRX00, Element: E00 uint16_t PRX00_E00_RawCnts[CAPT_SELF_FREQ_CNT]; tCaptivateElementTuning PRX00_E00_Tuning[CAPT_SELF_FREQ_CNT]; tElement PRX00_E00 = { .ui8RxPin = 3, .ui8RxBlock = 3, .ui8TouchThreshold = 127, .pRawCount = PRX00_E00_RawCnts, .pTuning = PRX00_E00_Tuning, }; //***************************************************************************** // //! Captivate Time Cycle Definitions //! All time cycles in this application are defined below. Time cycles are //! groups of elements that are measured together in parallel in one time slot. //! Each cycle has 2 components: //! 1) an element pointer array to the member elements (tElement*) //! 2) a cycle structure (tCycle) // //***************************************************************************** // Time Cycle: BTN00_C00 tElement* BTN00_C00_Elements[4] = { &BTN00_E00, &BTN00_E01, &BTN00_E02, &BTN00_E03, }; tCycle BTN00_C00 = { .ui8NrOfElements = 4, .pElements = BTN00_C00_Elements, }; // Time Cycle: BTN00_C01 tElement* BTN00_C01_Elements[4] = { &BTN00_E04, &BTN00_E05, &BTN00_E06, &BTN00_E07, }; tCycle BTN00_C01 = { .ui8NrOfElements = 4, .pElements = BTN00_C01_Elements, }; // Time Cycle: BTN00_C02 tElement* BTN00_C02_Elements[4] = { &BTN00_E08, &BTN00_E09, &BTN00_E10, &BTN00_E11, }; tCycle BTN00_C02 = { .ui8NrOfElements = 4, .pElements = BTN00_C02_Elements, }; // Time Cycle: PRX00_C00 tElement* PRX00_C00_Elements[1] = { &PRX00_E00, }; tCycle PRX00_C00 = { .ui8NrOfElements = 1, .pElements = PRX00_C00_Elements, }; //***************************************************************************** // //! Captivate Sensor Definitions //! All sensors in this application are defined below. Sensors are //! groups of time cycles that utilize raw measurement data to create an //! abstract sensor type, such as a button, slider, wheel, or prox sensor. //! Each sensor has 3 components: //! 1) a cycle pointer array to the member time cycles (tCycle*) //! 2) a sensor-specific parameter structure (tGenericSensorParams) //! 3) a sensor structure (tSensor) // //***************************************************************************** //Sensor: BTN00 const tCycle* BTN00_Cycles[3] = { &BTN00_C00, &BTN00_C01, &BTN00_C02, }; tButtonSensorParams BTN00_Params; tSensor BTN00 = { // Basic Properties .TypeOfSensor = eButtonGroup, .SensingMethod = eProjected, .DirectionOfInterest = eDOIUp, .pvCallback = NULL, .ui8NrOfCycles = 3, .pCycle = BTN00_Cycles, .pSensorParams = (tGenericSensorParams*)&BTN00_Params, // Conversion Control Parameters .ui16ConversionCount = 400, .ui16ConversionGain = 100, .ui8FreqDiv = 2, .ui8ChargeLength = 1, .ui8TransferLength = 1, .bModEnable = false, .ui8BiasControl = 3, .bCsDischarge = true, .bLpmControl = false, .ui8InputSyncControl = 0, .bTimerSyncControl = false, .bIdleState = true, // Tuning Parameters .ui16ProxThreshold = 10, .ui16NegativeTouchThreshold = 200, .ui16ErrorThreshold = 8000, .ui16TimeoutThreshold = 1980, .ProxDbThreshold.DbIn = 1, .ProxDbThreshold.DbOut = 1, .TouchDbThreshold.DbIn = 1, .TouchDbThreshold.DbOut = 0, .bCountFilterEnable = true, .ui8CntBeta = 1, .bSensorHalt = false, .bPTSensorHalt = true, .bPTElementHalt = true, .ui8LTABeta = 7, .bReCalibrateEnable = true, }; //Sensor: PRX00 const tCycle* PRX00_Cycles[1] = { &PRX00_C00, }; tProxSensorParams PRX00_Params = { .pSensor = NULL, .ui8NumberOfSensors = 0, }; tSensor PRX00 = { // Basic Properties .TypeOfSensor = eProx, .SensingMethod = eSelf, .DirectionOfInterest = eDOIDown, .pvCallback = NULL, .ui8NrOfCycles = 1, .pCycle = PRX00_Cycles, .pSensorParams = (tGenericSensorParams*)&PRX00_Params, // Conversion Control Parameters .ui16ConversionCount = 800, .ui16ConversionGain = 100, .ui8FreqDiv = 2, .ui8ChargeLength = 0, .ui8TransferLength = 0, .bModEnable = true, .ui8BiasControl = 3, .bCsDischarge = true, .bLpmControl = false, .ui8InputSyncControl = 0, .bTimerSyncControl = false, .bIdleState = true, // Tuning Parameters .ui16ProxThreshold = 8, .ui16NegativeTouchThreshold = 200, .ui16ErrorThreshold = 8191, .ui16TimeoutThreshold = 620, // �Q�O�b�ݒ� .ProxDbThreshold.DbIn = 1, .ProxDbThreshold.DbOut = 1, .TouchDbThreshold.DbIn = 1, .TouchDbThreshold.DbOut = 10, .bCountFilterEnable = true, .ui8CntBeta = 2, .bSensorHalt = false, .bPTSensorHalt = true, .bPTElementHalt = true, .ui8LTABeta = 6, .bReCalibrateEnable = true, }; #if (CAPT_CONDUCTED_NOISE_IMMUNITY_ENABLE==true) //***************************************************************************** // //! \var g_EMCConfig //! This structure stores the EMC configuration for this application. // //***************************************************************************** const tEMCConfig g_EMCConfig = { // Conversion Style .selfModeConversionStyle = eMultiFrequency, .projModeConversionStyle = eMultiFrequencyWithOutlierRemoval, // Oversampling Style .selfModeOversamplingStyle = eNoOversampling, .projModeOversamplingStyle = eNoOversampling, // Jitter Filter Enable .bJitterFilterEnable = true, // Noise Thresholds and Calibration Noise Limits .ui8NoiseThreshold = 20, .ui16CalibrationNoiseLimit = 10, .ui8CalibrationTestSampleSize = 8, // Dynamic Threshold Adjustment Parameters .bEnableDynamicThresholdAdjustment = true, .ui8MaxRelThreshAdj = 76, .ui8NoiseLevelFilterEntryThresh = 40, .ui8NoiseLevelFilterExitThresh = 0, .ui8NoiseLevelFilterDown = 6, .ui8NoiseLevelFilterUp = 1, .coeffA = _IQ31(0.0065), .coeffB = _IQ31(0.050) }; #endif //***************************************************************************** // //! \var g_pCaptivateSensorArray //! This array allows for indexed access to any //! sensor in the configuration. // //***************************************************************************** tSensor* g_pCaptivateSensorArray[CAPT_SENSOR_COUNT] = { &BTN00, &PRX00, }; //***************************************************************************** // //! \var g_uiApp //! This structure stores the global settings for this application. // //***************************************************************************** tCaptivateApplication g_uiApp = { .state = eUIActive, .pSensorList = &g_pCaptivateSensorArray[0], .ui8NrOfSensors = CAPT_SENSOR_COUNT, .ui8AppLPM = CAPT_LOW_POWER_MODE, .bElementDataTxEnable = true, .bSensorDataTxEnable = true, .ui16ActiveModeScanPeriod = 32, .ui16WakeOnProxModeScanPeriod = 100, .ui16InactivityTimeout = 31, .ui8WakeupInterval = 8, };
Regards,
Rei