Modular Library - Three Group Example for Atmel START QTouch Library
Introduction
The goal of this tutorial is to show you how to combine different touch configurations into a single project. As of now, this is not possible in START or Harmony 3. For example, combining a mutual-capacitance touchpad with self-capacitance buttons and a mutual-capacitance slider.
Apart from self-capacitance plus mutual-capacitance, it may not be possible to share the same drift rate, max-on-duration, frequency hop parameters, etc., due to different physical locations of the sensors, types of sensor construction, or custom application requirements. In such cases, multiple groups can be used, each having a different set of configurations.
Example Application
For ease of demonstration, all three projects in this exercise use mutual-capacitance buttons.
Reference Materials
SAM D20 Xplained Pro Evaluation Kit
QT1 Xplained Pro Extension Kit
Three Configurations
Procedure
Begin by creating three different projects and verify operation. Then combine as follows:
touch.h
- They must all share the same DEF_TOUCH_MEASUREMENT_PERIOD_MS.
- Label the parameters of each configuration by appending one, two, and three as needed.
- You can copy all three configurations to any one project.
Module | touch_set1 | touch_set2 | touch_set3 |
---|---|---|---|
Acquisition | DEF_SENSOR_TYPE_1 | DEF_SENSOR_TYPE_2 | DEF_SENSOR_TYPE_3 |
Acquisition | DEF_PTC_CAL_OPTION_1 | DEF_PTC_CAL_OPTION_2 | DEF_PTC_CAL_OPTION_3 |
Acquisition | DEF_PTC_INTERRUPT_PRIORITY_1 | DEF_PTC_INTERRUPT_PRIORITY_2 | DEF_PTC_INTERRUPT_PRIORITY_3 |
Acquisition | DEF_PTC_TAU_TARGET_1 | DEF_PTC_TAU_TARGET_2 | DEF_PTC_TAU_TARGET_3 |
Acquisition | DEF_PTC_CAL_AUTO_TUNE_1 | DEF_PTC_CAL_AUTO_TUNE_2 | DEF_PTC_CAL_AUTO_TUNE_3 |
Acquisition | DEF_SEL_FREQ_INIT_1 | DEF_SEL_FREQ_INIT_2 | DEF_SEL_FREQ_INIT_3 |
Acquisition | DEF_NUM_CHANNELS_1 | DEF_NUM_CHANNELS_2 | DEF_NUM_CHANNELS_3 |
Acquisition | NODE_x_PARAMS_1 | NODE_x_PARAMS_2 | NODE_x_PARAMS_3 |
Key | DEF_NUM_SENSORS_1 | DEF_NUM_SENSORS_2 | DEF_NUM_SENSORS_3 |
Key | KEY_x_PARAMS_1 | KEY_x_PARAMS_2 | KEY_x_PARAMS_3 |
Key | DEF_TOUCH_DET_INT_1 | DEF_TOUCH_DET_INT_2 | DEF_TOUCH_DET_INT_3 |
Key | DEF_ANTI_TCH_DET_INT_1 | DEF_ANTI_TCH_DET_INT_2 | DEF_ANTI_TCH_DET_INT_1 |
Key | DEF_ANTI_TCH_RECAL_THRSHLD_1 | DEF_ANTI_TCH_RECAL_THRSHLD_2 | DEF_ANTI_TCH_RECAL_THRSHLD_3 |
Key | DEF_TCH_DRIFT_RATE_1 | DEF_TCH_DRIFT_RATE_2 | DEF_TCH_DRIFT_RATE_3 |
Key | DEF_ANTI_TCH_DRIFT_RATE_1 | DEF_ANTI_TCH_DRIFT_RATE_2 | DEF_ANTI_TCH_DRIFT_RATE_3 |
Key | DEF_DRIFT_HOLD_TIME_1 | DEF_DRIFT_HOLD_TIME_2 | DEF_DRIFT_HOLD_TIME_3 |
Key | DEF_REBURST_MODE_1 | DEF_REBURST_MODE_2 | DEF_REBURST_MODE_3 |
Key | DEF_MAX_ON_DURATION_1 | DEF_MAX_ON_DURATION_2 | DEF_MAX_ON_DURATION_3 |
Frequency Hop autotune | NUM_FREQ_STEPS_1 | NUM_FREQ_STEPS_2 | NUM_FREQ_STEPS_3 |
Frequency Hop autotune | DEF_MEDIAN_FILTER_FREQUENCIES_1 | DEF_MEDIAN_FILTER_FREQUENCIES_2 | DEF_MEDIAN_FILTER_FREQUENCIES_3 |
Frequency Hop autotune | DEF_FREQ_AUTOTUNE_ENABLE_1 | DEF_FREQ_AUTOTUNE_ENABLE_2 | DEF_FREQ_AUTOTUNE_ENABLE_3 |
Frequency Hop autotune | FREQ_AUTOTUNE_MAX_VARIANCE_1 | FREQ_AUTOTUNE_MAX_VARIANCE_2 | FREQ_AUTOTUNE_MAX_VARIANCE_3 |
Frequency Hop autotune | FREQ_AUTOTUNE_COUNT_IN_1 | FREQ_AUTOTUNE_COUNT_IN_2 | FREQ_AUTOTUNE_COUNT_IN_3 |
touch.c
- Define a global variable acq_set used for sequencing the three configurations.
- Configuration one, two, and three arrays and structures are declared.
- touch_sensors_config: all configurations are initialized.
- qtm_measure_complete_callback: configuration sequencing takes place with the acquisition index acq_set.
- touch_process: execution of the three configurations.
Module | touch_set1 | touch_set2 | touch_set3 |
---|---|---|---|
Acquisition | ptc_qtlib_acq_gen1 | ptc_qtlib_acq_gen2 | ptc_qtlib_acq_gen3 |
Acquisition | ptc_qtlib_node_stat1 | ptc_qtlib_node_stat2 | ptc_qtlib_node_stat3 |
Acquisition | ptc_seq_node_cfg1 | ptc_seq_node_cfg2 | ptc_seq_node_cfg3 |
Acquisition | qtlib_acq_set1 | qtlib_acq_set2 | qtlib_acq_set3 |
Key | qtlib_key_grp_config_set1 | qtlib_key_grp_config_set2 | qtlib_key_grp_config_set3 |
Key | qtlib_key_grp_data_set1 | qtlib_key_grp_data_set2 | qtlib_key_grp_data_set3 |
Key | qtlib_key_data_set1 | qtlib_key_data_set2 | qtlib_key_data_set3 |
Key | qtlib_key_configs_set1 | qtlib_key_configs_set2 | qtlib_key_configs_set3 |
Key | qtlib_key_set1 | qtlib_key_set2 | qtlib_key_set3 |
Frequency Hop autotune | qtm_freq_hop_autotune_config1 | qtm_freq_hop_autotune_config2 | qtm_freq_hop_autotune_config3 |
Frequency Hop autotune | qtm_freq_hop_autotune_data1 | qtm_freq_hop_autotune_data2 | qtm_freq_hop_autotune_data3 |
Frequency Hop autotune | qtm_freq_hop_autotune_control1 | qtm_freq_hop_autotune_control2 | qtm_freq_hop_autotune_control3 |
Example Project Configuration
Compiler Configuration
- Release – Production code without project debugging and Data Visualizer
- Debug – Project debugging without Data Visualizer
- DataVisualizer – Both project debugging and Data Visualizer enabled
Data Visualizer Flag
- Flag to enable DEF_TOUCH_DATA_STREAMER_ENABLE is removed from the touch.h file and defined in the project configuration (Project/Properties/Toolchain/AVR/GNU C Compiler/Symbols for Data Visualizer Configuration).