Other Parts Discussed in Thread: MSP430FR2512, ENERGYTRACE
I want to make a 4-20mA loop powered picofard capacitance meter with adjust able offset (upto 100pF) with a full scale range adjustable up to probably upto 10pF. It looks like a MSP430FR2512 could handle most of this in one chip . When I generate the CCS project from the Captivate project the LED's don't light up when the buttons are pressed, which is fine if intended.
Does the generated CCS project only include the tuning for the captivate inputs but no the tone generation and LED control?
Is delta stored anywhere or is it calculated in the Captivate app?
(it took a while to find but this is how I got a similar reading - rawSensor = 1960-PRX00.pCycle[0]->pElements[0]->filterCount.ui16Natural;)
Will the timeout or prox detection in the generated project cause problems with continuous capacitive measurements - in the order of 24hrs+?
Worded another way;
If the update time is set to 50ms, will the generated code allow this without timing out or moving through the threshold?
In the CCS energy trace, I get a fairly high mean current of 4.1mA, is this expected?
Here is the sensor setup;
//***************************************************************************** // CAPT_UserConfig.c // // \version 1.83.00.05 // Released on May 15, 2020 // //***************************************************************************** //***************************************************************************** // // 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: PRX00, Element: E00 uint16_t PRX00_E00_RawCnts[CAPT_SELF_FREQ_CNT]; tCaptivateElementTuning PRX00_E00_Tuning[CAPT_SELF_FREQ_CNT]; tElement PRX00_E00 = { .ui8RxPin = 0, .ui8RxBlock = 0, .ui8TouchThreshold = 60, .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: 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: 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 = 2000, .ui16ConversionGain = 100, .ui8FreqDiv = 1, .ui8ChargeLength = 1, .ui8TransferLength = 1, .bModEnable = false, .ui8BiasControl = 3, .bCsDischarge = true, .bLpmControl = false, .ui8InputSyncControl = 0, .bTimerSyncControl = false, .bIdleState = true, // Tuning Parameters .ui16ProxThreshold = 60, .ui16NegativeTouchThreshold = 30, .ui16ErrorThreshold = 8191, .ui16TimeoutThreshold = 65535, .ProxDbThreshold.DbIn = 1, .ProxDbThreshold.DbOut = 0, .TouchDbThreshold.DbIn = 1, .TouchDbThreshold.DbOut = 0, .bCountFilterEnable = true, .ui8CntBeta = 1, .bSensorHalt = false, .bPTSensorHalt = true, .bPTElementHalt = true, .ui8LTABeta = 7, .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 = CAPT_SELF_MODE_CONVERSION_STYLE, .projModeConversionStyle = CAPT_PROJ_MODE_CONVERSION_STYLE, // Oversampling Style .selfModeOversamplingStyle = CAPT_SELF_MODE_OVERSAMPLING_STYLE, .projModeOversamplingStyle = CAPT_PROJ_MODE_OVERSAMPLING_STYLE, // Jitter Filter Enable .bJitterFilterEnable = true, // Noise Thresholds and Calibration Noise Limits .ui8NoiseThreshold = CAPT_NOISE_THRESHOLD, .ui16CalibrationNoiseLimit = CAPT_CALIBRATION_NOISE_LIMIT, .ui8CalibrationTestSampleSize = 8, // Dynamic Threshold Adjustment Parameters .bEnableDynamicThresholdAdjustment = CAPT_DYNAMIC_THRESHOLD_ADJUSTMENT, .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] = { &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 = 50, .ui16WakeOnProxModeScanPeriod = 50, .ui16InactivityTimeout = 303, .ui8WakeupInterval = 7, };
Thanks