atmel at08774: sam d20 ptc with i2c...

42
Atmel QTouch AT08774: SAM D20 PTC with I2C Slave APPLICATION NOTE Introduction This application note explains the firmware solution implemented on Atmel ® ATSAMD20J18 device using ARM ® Cortex ® -M0+ processor. The firmware solution demonstrates SAM D20 PTC self and mutual-capacitance sensor measurements and transmit/receive touch data using I2C slave. This implementation is useful in applications where the Host MCU need to control various touch setup parameters over I2C. For instance, applications that target low power consumption can adjust clock prescaler and scan interval. Applications that target best noise performance can adjust noise counter options dynamically. The firmware solution is implemented using two SAM D20 Xplained Pro boards, one acting as User board and the other for QDebug which streams touch data to QTouch ® Analyzer. The demonstration program is implemented in C and supports GCC Compiler used by Atmel Studio 7. Features Host MCU based touch parameter control I2C in slave mode Hardware Touch Acquisition using PTC Demonstration Program Uses I2C driver in ASF QTouch Composer generated touch project Utilizes SAM D20 Xplained Pro Atmel-42325C-SAM-D20-PTC-with-I2C-Slave_Application Note-04/2016

Upload: duonghanh

Post on 21-Apr-2018

246 views

Category:

Documents


2 download

TRANSCRIPT

  • Atmel QTouch

    AT08774: SAM D20 PTC with I2C Slave

    APPLICATION NOTE

    Introduction

    This application note explains the firmware solution implemented on Atmel

    ATSAMD20J18 device using ARM Cortex-M0+ processor. The firmwaresolution demonstrates SAM D20 PTC self and mutual-capacitance sensormeasurements and transmit/receive touch data using I2C slave.

    This implementation is useful in applications where the Host MCU need tocontrol various touch setup parameters over I2C. For instance, applicationsthat target low power consumption can adjust clock prescaler and scaninterval. Applications that target best noise performance can adjust noisecounter options dynamically.

    The firmware solution is implemented using two SAM D20 Xplained Proboards, one acting as User board and the other for QDebug which streamstouch data to QTouch Analyzer.

    The demonstration program is implemented in C and supports GCCCompiler used by Atmel Studio 7.

    Features

    Host MCU based touch parameter control I2C in slave mode Hardware Touch Acquisition using PTC Demonstration Program Uses I2C driver in ASF QTouch Composer generated touch project Utilizes SAM D20 Xplained Pro

    Atmel-42325C-SAM-D20-PTC-with-I2C-Slave_Application Note-04/2016

  • Table of Contents

    Introduction......................................................................................................................1

    Features.......................................................................................................................... 1

    1. Abbreviations and Definitions.................................................................................... 4

    2. Overview....................................................................................................................5

    3. Hardware and Functional...........................................................................................63.1. Hardware Requisites.................................................................................................................... 63.2. Circuit Configuration.....................................................................................................................63.3. Test Setup.....................................................................................................................................73.4. Startup/Calibration Times............................................................................................................. 83.5. Calibration.................................................................................................................................... 83.6. Sleep............................................................................................................................................ 83.7. Touch Data Debug........................................................................................................................8

    4. I2C Operation.......................................................................................................... 104.1. I2C-Compatible Address............................................................................................................ 104.2. CHANGE Pin..............................................................................................................................10

    5. Firmware.................................................................................................................. 115.1. Application Flow..........................................................................................................................115.2. Creating Self/Mutual Combined Project......................................................................................115.3. Adding ASF Component (SERCOM I2C - Slave Mode Driver).................................................. 155.4. Configure and Process I2C........................................................................................................ 165.5. Files............................................................................................................................................175.6. Functions....................................................................................................................................18

    6. Communication Protocol..........................................................................................216.1. Introduction.................................................................................................................................216.2. Address 0: Chip ID..................................................................................................................... 246.3. Address 1: Major/Minor Code Version........................................................................................246.4. Address 2: SelfCap Sensor Status.............................................................................................246.5. Address 3: MutualCap Sensor Status........................................................................................ 246.6. Address 4: Rotor/Slider Position.................................................................................................246.7. Address 6: Calibrate...................................................................................................................256.8. Address 7: Reset........................................................................................................................256.9. Address 8: Scan Interval............................................................................................................ 256.10. Address 10-11, 52-55: GAIN...................................................................................................... 256.11. Address 12, 64: Frequency Mode.............................................................................................. 266.12. Address 13-14, 65-68: PTC Prescaler........................................................................................266.13. Address 15-16, 69-72: Series Resistor...................................................................................... 276.14. Address 17-18, 73-76: PTC Prescaler CC Cal........................................................................276.15. Address 16, 60: Series Resistor CC Cal................................................................................. 276.16. Address 21-23, 81-83: Frequency Hops.................................................................................... 27

    Atmel AT08774: SAM D20 PTC with I2C Slave [APPLICATION NOTE]Atmel-42325C-SAM-D20-PTC-with-I2C-Slave_Application Note-04/2016

    2

  • 6.17. Address 24-25, 84-87: Filter Level............................................................................................. 286.18. Address 26-27, 88-91: Auto OS................................................................................................. 286.19. Address 28, 92: Auto Tune.........................................................................................................296.20. Address 29-30, 93: AKS.............................................................................................................296.21. Address 31-32, 94: Detect Threshold.........................................................................................306.22. Address 33-34, 95: Detect Hysteresis........................................................................................306.23. Address 35-36, 96: Position Resolution..................................................................................... 306.24. Address 97: Position Hysteresis.................................................................................................316.25. Address 37, 99: Detect Integration.............................................................................................316.26. Address 38, 100: Away From Touch Drift (Positive Drift)........................................................... 326.27. Address 39, 101: Towards Touch Drift (Negative Drift).............................................................. 326.28. Address 40, 102: Max On Duration............................................................................................ 336.29. Address 41, 103: Drift Hold Time............................................................................................... 336.30. Address 42, 104: Away from Touch Recalibration Delay............................................................336.31. Address 43, 105: Calibration Burst Count - Seq1...................................................................... 346.32. Address 44, 106: Calibration Burst Count - Seq2...................................................................... 346.33. Address 45, 107: Recalibration Threshold................................................................................. 346.34. Address 46-47,108-109: Sensor Post-processing Mode............................................................356.35. Address 48-49, 110-111: Auto OS Signal Stability Limit.............................................................356.36. Address 50-51,112-113: Frequency Auto Tune Stability Limit....................................................356.37. Address 52,114: Frequency Auto Tune In Counter.................................................................... 366.38. Address 54-55,116-117: Noise Measurement Signal Stability Limit .......................................... 366.39. Address 56,118: Noise Measurement Noise Limit......................................................................366.40. Address 57,119: Noise Measurement Sensor Lockout Setting.................................................. 376.41. Address 58,120: Noise Measurement Lockout Count Down......................................................376.42. Address 122 125: SelfCap Signal........................................................................................... 376.43. Address 126 129: SelfCap Reference.....................................................................................386.44. Address 130-137: MutualCap Signal..........................................................................................386.45. Address 138-145: MutualCap Reference................................................................................... 38

    7. References.............................................................................................................. 40

    8. Revision History.......................................................................................................41

    Atmel AT08774: SAM D20 PTC with I2C Slave [APPLICATION NOTE]Atmel-42325C-SAM-D20-PTC-with-I2C-Slave_Application Note-04/2016

    3

  • 1. Abbreviations and Definitions Acquisition cycle: A single capacitive measurement process ASF: Atmel Software Framework Calibration: Multiple touch measurements carried out continuously to set Reference Delta: Difference between Reference and Signal (Reference Signal) Detect Threshold: Determines delta required for a valid touch DGI: Data Gateway Interface EDBG: Embedded Debugger Drift: AdjustingReference level to track changes in signal level due to environmental changes I2C: Inter-Integrated Circuit Max on Duration: Duration for which sensor stays detected PTC: Peripheral Touch Controller Reference: Long term average measurement on a channel Recalibration Threshold: It is the level above which automatic recalibration occurs Scan Interval: Duration in which touch measurement is performed SCL: Serial Clock Line SDA: Serial Data Line SERCOM: Serial Communication Module Signal: Raw measurement for capacitance change on a channel X Line: The Sense Line connected to the X Electrode in Mutual capacitance method Y Line: The Sense Line connected to the Y Electrode used in Self-capacitance method

    Atmel AT08774: SAM D20 PTC with I2C Slave [APPLICATION NOTE]Atmel-42325C-SAM-D20-PTC-with-I2C-Slave_Application Note-04/2016

    4

  • 2. OverviewThe SAM D20 series device is a 32-bit ARM Cortex-M0+ based microcontroller, which supports hardwaretouch acquisition using PTC peripheral. PTC supports capacitive touch sensing on both self and mutualcapacitance sensors, without any external components (Series resistors might be required to handleextreme noise scenarios). Refer PTC User guide for detailed information on PTC and QTouch Library.

    The firmware solution demonstrated in this application note uses two self-capacitance button sensors andone mutual capacitance slider sensor. This solution can be easily scaled to support various sensorconfiguration with appropriate modifications in firmware.

    The device series provides up to six SERCOMs that can be configured to operate as an I2C, SPI, andUSART interface. The firmware solution configures SERCOM4 (PA12, PA13) of ATSAMD20J18 device asI2C communication interface in slave mode.

    Atmel AT08774: SAM D20 PTC with I2C Slave [APPLICATION NOTE]Atmel-42325C-SAM-D20-PTC-with-I2C-Slave_Application Note-04/2016

    5

    http://www.atmel.com/Images/Atmel-42195-Qtouch-Library-Peripheral-Touch-Controller_User-Guide.pdf

  • 3. Hardware and Functional

    3.1. Hardware RequisitesThe following table lists the hardware required to build the test setup for analyzing this firmware solution.

    Table 3-1.Hardware Requisites

    Hardware Quantity

    SAM D20 Xplained Pro board 2

    QT1 QTouch Self-capacitance sensor board 1

    QT1 QTouch Mutual capacitance sensor board 1

    STK600 1

    STK600 ATMEGA2560 board 1

    3.2. Circuit ConfigurationThe following table shows connections used in this firmware solution.

    Table 3-2.Sensor Pin Configuration used in SAM D20 User Board

    SAM D20 Xplained Pro (User Board) QT1 Xplained Pro Sensor Board

    PA02 (Y0) Self-capacitance Button_0 (Y_8)

    PA03 (Y1) Self-capacitance Button_1 (Y_7)

    PA10 (X2) Mutual capacitance Slider Channel_0 (X_1)

    PA11 (X3) Mutual capacitance Slider Channel_1 (X_2)

    PA20 (X8) Mutual capacitance Slider Channel_2 (X_3)

    PA21 (X9) Mutual capacitance Slider Channel_3 (X_4)

    PB06 (Y12) Mutual capacitance Slider (Y_S)

    Note: The sense line (X / Y) numbers specified in table preceeding table under SAM D20 Xplained Proboard are as based on the information in the SAM D20 Datasheet. The X / Y numbers specified underQT1 sensor board are generic (as marked in QT1 sensor boards).

    Table 3-3.Connection between SAM D20 User Board and AVR3009 Host Microcontroller

    SAM D20 Xplained Pro (User Board) AVR3009 Host (ATmega2560)

    PA12 (SDA) PD1

    PA13 (SCL) PD0

    PA27 (CHANGE pin) PD2

    Atmel AT08774: SAM D20 PTC with I2C Slave [APPLICATION NOTE]Atmel-42325C-SAM-D20-PTC-with-I2C-Slave_Application Note-04/2016

    6

  • Table 3-4.Connection between SAM D20 User Board and SAM D20 Xplained Pro for QDebug

    SAM D20 Xplained Pro (User Board) SAM D20 Xplained Pro (QDebug)

    PA17 (SS) - Connect to GND -

    PA18 (MOSI) PB22

    PA16 (MISO) PB16

    PA19 (SCK) PB23

    GND GND

    Figure 3-1.Circuit Configuration

    The firmware solution provided is applicable for ATSAMD20J18 device operating as I2C Slave.

    Firmware validation uses the demonstration code provided with the application note AVR3009: DrivingQTouch Device with IIC Interface with the required modifications.

    An external pull-up resistor of 10k is required on CHANGE line and 4.7k is required on SCL and SDAlines. Using external pull-up resistor of 10k on RESET line is optional, as the device features an internalpull-up resistor on this pin.

    3.3. Test SetupTable 3-2Sensor Pin Configuration used in SAM D20 User Board represents the actual test setup usedfor the firmware validation.

    This setup uses one SAM D20 Xplained Pro board, which acts as user board and the same board is usedfor QDebug. This Xplained Pro board is directly connected to QT1 Mutual capacitance sensor board(slider sensor) and hooked wires for connecting to QT1 Self-capacitance sensor board (button sensor). Todemonstrate the firmware solution, the interconnection between Master and Slave uses wires as shown inthe following image:.

    Atmel AT08774: SAM D20 PTC with I2C Slave [APPLICATION NOTE]Atmel-42325C-SAM-D20-PTC-with-I2C-Slave_Application Note-04/2016

    7

    http://www.atmel.com/products/touchsolutions/bsw/default.aspx?tab=documentshttp://www.atmel.com/products/touchsolutions/bsw/default.aspx?tab=documents

  • Figure 3-2.Test Setup

    3.4. Startup/Calibration TimesThe device requires an initialization time of approximately 300ms. This includes calibration time of around200ms. Any subsequent recalibration will also take approximately 200ms.

    The CHANGE line is asserted at startup, after initialization.

    3.5. CalibrationThe calibration does not occur periodically. Keys are calibrated when one of the following conditionsoccur:

    Power up Sensor signal value is greater than the Positive Recalibration Threshold

    Default = 50% of Detect Threshold At the end of Max on Duration (if enabled)

    Default = Disabled Host MCU issues a Calibrate Command

    If any sensor was in detect state before recalibration, it will go out of detect after recalibration. This willchange the Status Bytes and trigger the CHANGE line to go low.

    3.6. SleepThe default scan interval of the device is set as 20ms. In the firmware solution touch measurement isperformed on the configured sensors. To reduce power consumption, CPU sleeps during touchacquisition as well as for the remaining period of scan interval.

    3.7. Touch Data DebugThe SAM D20 Xplained Pro contains Embedded Debugger (EDBG) that features an Atmel Data GatewayInterface (DGI) using SPI and I2C. The DGI can be used to transmit a variety of data from the XplainedPro kit to the host PC. This arrangement can be used to send QDebug data from a user board to PCrunning QTouch Analyzer for touch sensor data analysis and tuning. The example project generatedusing QTouch composer transfers QDebug data over SPI.

    Atmel AT08774: SAM D20 PTC with I2C Slave [APPLICATION NOTE]Atmel-42325C-SAM-D20-PTC-with-I2C-Slave_Application Note-04/2016

    8

  • To stream QDebug data from the user board (SAM D20 Xplained Pro) using another SAM D20 XplainedPro board, refer Table 3-4Connection between SAM D20 User Board and SAM D20 Xplained Pro forQDebug for connection details and refer to procedure provided in PTC User Guide.

    The same user board SAM D20 Xplained Pro board can also be used to stream QDebug data for testingthe firmware solution provided. Required SPI debug line connections to EDBG is hard wired in SAM D20Xplained Pro board. So, using the corresponding debug related pin definitions in touch.h file as shownin the following table is sufficient to enable QDebug in the same Xplained Pro board.

    Table 3-5.Using the Same SAM D20 (User Board) Xplained Pro for QDebug

    SAM D20 Xplained Pro (User Board)

    Pin Function

    PB22 MOSI

    PB16 MISO

    PB23 SCK

    PB31 SS

    Atmel AT08774: SAM D20 PTC with I2C Slave [APPLICATION NOTE]Atmel-42325C-SAM-D20-PTC-with-I2C-Slave_Application Note-04/2016

    9

    http://www.atmel.com/Images/Atmel-42195-Qtouch-Library-Peripheral-Touch-Controller_User-Guide.pdf

  • 4. I2C OperationThe firmware solution use SERCOM I2C interface to communicate with Master MCU. This Atmel Two-wire Serial Interface is compatible with Philips I2C Bus/Protocol.

    Refer to ATSAMD20J18 device datasheet for details of operation.

    4.1. I2C-Compatible AddressThe I2C address for the slave ATSAMD20J18 device is set as 0x12.

    4.2. CHANGE PinThe CHANGE pin is an active low open drain output that can be used to alert the host about any changein any of the sensor status, thus reducing the need for wasteful I2C communications. CHANGE pin goeslow when there is change in status bytes of any sensor or slider position values (Memory map address 2to 4, detailed in Table 6-1Memory Map). When the master performs a read from all the status bytes,CHANGE pin becomes high.

    Poll rate: The host can make use of CHANGE pin output to initiate a communication; this will guaranteethe optimal polling rate.

    If the host cannot make use of CHANGE pin, the poll rate should be no faster than once per acquisitioncycle. The default scan interval is 20ms. A faster scan interval will not provide new information and willslow down the chip operation.

    Atmel AT08774: SAM D20 PTC with I2C Slave [APPLICATION NOTE]Atmel-42325C-SAM-D20-PTC-with-I2C-Slave_Application Note-04/2016

    10

    http://www.atmel.com/Images/Atmel-42129-SAM-D20_Datasheet.pdf

  • 5. Firmware

    5.1. Application Flow

    5.2. Creating Self/Mutual Combined ProjectThe following procedure explains creating a combined project for both self and mutual capacitancesensors.

    5.2.1. Create Self-capacitance ProjectUse QTouch Composer Project builder wizard and create self-capacitance project for two buttonsensors as per configuration in the following table, with QDebug enabled. This project name is referred asselfcap in the following sections.

    Table 5-1.Self-capacitance Sensor Pin Configuration used in SAM D20 User Board

    Parameter Sensepin

    Gain Detectthreshold

    Filterlevel

    Autooversampling

    Autotuning

    Seriesresistor

    Frequencymode

    Button0 Y0(PA02)

    1 30 8 Disable PRSC 100K None

    Atmel AT08774: SAM D20 PTC with I2C Slave [APPLICATION NOTE]Atmel-42325C-SAM-D20-PTC-with-I2C-Slave_Application Note-04/2016

    11

  • Table 5-2.Debug Pin Configuration used in SAM D20 User Board

    Parameter ATSAMD20J18 port pin

    SPI_BB_SS PA17

    SPI_BB_SCK PA19

    SPI_BB_MOSI PA18

    SPI_BB_MISO PA16

    Y lines used in this project are custom configuration, based on available unused pins in the SAM D20Xplained Pro board. Note that the Y lines are not the same as used in standard ASF example projectSAM D20 Xplained Pro and QT1 Xplained Pro Self-capacitance example application.

    5.2.2. Create Mutual capacitance ProjectUse QTouch Composer Project builder wizard and create mutual capacitance project for one slider sensoras per configuration in the following table, with QDebug disabled. This project name is referred asmutualcap in the following sections.

    Table 5-3.Mutual Capacitance Sensor Pin Configuration used in SAM D20 User Board

    Parameter X Line Y Line Gain Detectthreshold

    Filterlevel

    Autooversampling

    Autotuning

    Seriesresistor

    Frequencymode

    SliderChannel0

    X2(PA10)

    Y12(PB06)

    1 30 8 Disable PRSC 100K None

    SliderChannel1

    X3(PA11)

    Y12(PB06)

    1

    SliderChannel2

    X8(PA20)

    Y12(PB06)

    1

    SliderChannel3

    X9(PA21)

    Y12(PB06)

    1

    5.2.3. Create Combined (Self + Mutual capacitance) ProjectThe self-capacitance project created is set as base application project and the mutual capacitance projectcreated is used as reference. Append the required contents from mutual capacitance to self-capacitanceproject, for enabling touch measurement on both self and mutual capacitance sensors.

    The following procedure details the steps to include required contents. Use the demonstration projectavailable for reference.

    1. Copy all the macros (excluding DEF_TOUCH_PTC_ISR_LVL) from the touch.h file in themutualcap project and paste in the touch.h file from the selfcap project.

    2. Compare both touch.c files, copy the required contents from the mutual capacitance project andperform the following changes in the selfcap base project.2.1. Declare the data block array for the mutual capacitance method, after the self-capacitance

    data array declaration./** * Mutual Cap Data block provided as input to Touch library. */static uint8_t mutlcap_data_blk[PRIV_MUTLCAP_DATA_BLK_SIZE];

    Atmel AT08774: SAM D20 PTC with I2C Slave [APPLICATION NOTE]Atmel-42325C-SAM-D20-PTC-with-I2C-Slave_Application Note-04/2016

    12

  • 2.2. Declare mutual capacitance sensors pin information, along with the self-capacitancesensor details./** * Mutual Cap Sensor Pins Info. */uint16_t mutlcap_xy_nodes[DEF_MUTLCAP_NUM_CHANNELS * 2] = {DEF_MUTLCAP_NODES};filter_level_t mutlcap_filter_level_per_node[DEF_MUTLCAP_NUM_CHANNELS] = {DEF_MUTLCAP_FILTER_LEVEL_PER_NODE};uint8_t mutlcap_auto_os_per_node[DEF_MUTLCAP_NUM_CHANNELS]= {DEF_MUTLCAP_AUTO_OS_PER_NODE};gain_t mutlcap_gain_per_node[DEF_MUTLCAP_NUM_CHANNELS] = {DEF_MUTLCAP_GAIN_PER_NODE};rsel_val_t mutlcap_resistor_per_node[DEF_MUTLCAP_NUM_CHANNELS] = {DEF_MUTLCAP_SENSE_RESISTOR_PER_NODE };prsc_div_sel_t mutlcap_prsc_per_node[DEF_MUTLCAP_NUM_CHANNELS] = {DEF_MUTLCAP_CLK_PRESCALE_PER_NODE };prsc_div_sel_t mutlcap_boot_prsc_per_node[DEF_MUTLCAP_NUM_CHANNELS] = {DEF_MUTLCAP_CC_CAL_CLK_PRESCALE_PER_NODE};rsel_val_t mutlcap_boot_resistor_per_node[DEF_MUTLCAP_NUM_CHANNELS] = {DEF_MUTLCAP_CC_CAL_SENSE_RESISTOR_PER_NODE};freq_hop_sel_t mutlcap_freq_hops[3u] = {DEF_MUTLCAP_HOP_FREQS};

    2.3. Define Configuration structure for mutual capacitance after self-capacitance structure.2.4. Update the touch_config structure with the address of mutual capacitance configuration

    parameter, as shown in following code snippet.touch_config_t touch_config = { &mutlcap_config, &selfcap_config, /* Pointer to Self Cap configuration structure.*/DEF_TOUCH_PTC_ISR_LVL, /* PTC interrupt level. */};

    2.5. Define the measure complete callback prototype, after self cap measure complete callbackroutine.void touch_mutlcap_measure_complete_callback( void );

    2.6. Similar to measure complete callback function for self-capacitance, define the mutualcapacitance measure complete call back function in the end of touch.c file.

    3. To invoke the mutual capacitance measurement related APIs as follows. Use the mutualcapacitance project touch.c file as reference.3.1. Invoke touch_mutlcap_sensors_init API after invoking

    touch_selfcap_sensors_init.touch_ret = touch_mutlcap_sensors_init(&touch_config); if (touch_ret != TOUCH_SUCCESS) { touch_app_err_handler(TOUCH_INIT_CONFIG_ERR, touch_ret); }

    3.2. Similarly invoke touch_mutlcap_sensors_calibrate after invokingtouch_selfcap_sensors_calibrate. touch_ret = touch_mutlcap_sensors_calibrate(DEF_MUTL_AUTO_TUNE_VALUE); if (touch_ret != TOUCH_SUCCESS) { touch_app_err_handler(TOUCH_INIT_CALIB_ERR, touch_ret); } return (touch_ret);

    3.3. Next, configure the mutual capacitance sensors in the touch_sensors_config routinedefinition. Append the mutual capacitance sensor configuration next to the self-capacitancesensors.touch_ret_t touch_sensors_config(void){ touch_ret_t touch_ret = TOUCH_SUCCESS; sensor_id_t sensor_id;

    touch_ret = touch_selfcap_sensor_config(SENSOR_TYPE_KEY,

    Atmel AT08774: SAM D20 PTC with I2C Slave [APPLICATION NOTE]Atmel-42325C-SAM-D20-PTC-with-I2C-Slave_Application Note-04/2016

    13

  • CHANNEL_0,CHANNEL_0, NO_AKS_GROUP, 15u, HYST_25,RES_8_BIT, &sensor_id); if (touch_ret != TOUCH_SUCCESS) { touch_app_err_handler(TOUCH_SENSOR_CONFIG_ERR, touch_ret); }

    touch_ret = touch_selfcap_sensor_config(SENSOR_TYPE_KEY, CHANNEL_1,CHANNEL_1, NO_AKS_GROUP, 15u, HYST_25,RES_8_BIT, &sensor_id); if (touch_ret != TOUCH_SUCCESS) { touch_app_err_handler(TOUCH_SENSOR_CONFIG_ERR, touch_ret); }

    touch_ret = touch_mutlcap_sensor_config(SENSOR_TYPE_SLIDER, CHANNEL_0,CHANNEL_3, NO_AKS_GROUP, 10u, HYST_25,RES_8_BIT, 0u, &sensor_id); if (touch_ret != TOUCH_SUCCESS) { touch_app_err_handler(TOUCH_SENSOR_CONFIG_ERR, touch_ret); }

    return (touch_ret);}

    3.4. Finally, invoke the mutual capacitance sensor measure routine next to the self-capacitancesensor measure routine. The touch acquisition process is sequential in case of SAM D20PTC. So, before invoking the mutual capacitance sensor acquisition, the application needsto ensure that the acquisition is complete on the self-capacitance sensors and vice-versa.The following code snippet shows the conditional implementation required for invokingtouch acquisition.

    touch_ret_t touch_sensors_measure(void){ touch_ret_t touch_ret = TOUCH_SUCCESS; if (!(p_selfcap_measure_data->acq_status & TOUCH_CC_CALIB_ERROR)) {

    if (touch_time.time_to_measure_touch == 1u) { if(start_check == 1 || p_mutlcap_measure_data->measurement_done_touch == 1u) { touch_ret = touch_selfcap_sensors_measure( touch_time.current_time_ms, NORMAL_ACQ_MODE, touch_selfcap_measure_complete_callback);

    if ((touch_ret != TOUCH_ACQ_INCOMPLETE) && (touch_ret == TOUCH_SUCCESS)) { p_mutlcap_measure_data->measurement_done_touch = 0u; start_check = 0; } else if ((touch_ret != TOUCH_SUCCESS) && (touch_ret != TOUCH_ACQ_INCOMPLETE)) { touch_app_err_handler(TOUCH_MEASURE_INCOMPLETE, touch_ret); /* Reaching this point can be due to - * 1. The api has retured an error due to a invalid * input parameter. * 2. The api has been called during a invalid Touch * Library state. */ } } } if(p_selfcap_measure_data->measurement_done_touch == 1u) { touch_ret = touch_mutlcap_sensors_measure( touch_time.current_time_ms, NORMAL_ACQ_MODE, touch_mutlcap_measure_complete_callback);

    if ((touch_ret != TOUCH_ACQ_INCOMPLETE) && (touch_ret == TOUCH_SUCCESS)) { p_selfcap_measure_data->measurement_done_touch = 0u; touch_time.time_to_measure_touch = 0u; } else if ((touch_ret != TOUCH_SUCCESS) && (touch_ret != TOUCH_ACQ_INCOMPLETE)) {

    Atmel AT08774: SAM D20 PTC with I2C Slave [APPLICATION NOTE]Atmel-42325C-SAM-D20-PTC-with-I2C-Slave_Application Note-04/2016

    14

  • touch_app_err_handler(TOUCH_MEASURE_INCOMPLETE, touch_ret); /* Reaching this point can be due to - * 1. The api has retured an error due to a invalid * input parameter. * 2. The api has been called during a invalid Touch * Library state. */ } } } else { /* To find which sensor failed in the calibration, check p_xxxxcap_measure_data->p_sensors[].state == SENSOR_CALIBRATION_ERROR */ touch_app_err_handler(TOUCH_MEASURE_CC_CAL_FAILED, touch_ret); }

    return (touch_ret);}

    Note: In the above code, the start_check variable is used to invoke touch acquisition atpower up. This should be initialized to "1" in touch.c file (uint8_t start_check =1u;).

    Build and Test:The project creation, which can perform measurement on both self and mutualcapacitance sensors is complete. Build the project at this stage and ensure there are no errors /warnings. Then download it into the ATSAMD20J18 device in SAM D20 Xplained Pro user board.

    QDebug:The combined project has QDebug enabled for self-capacitance sensors. So, the performanceof self-capacitance sensors can be analyzed using QTouch Analyzer.

    To enable QDebug for the mutual capacitance sensor, enable the required macro definition in thetouch.h file as follows.//#define DEF_TOUCH_QDEBUG_ENABLE_SELFCAP#define DEF_TOUCH_QDEBUG_ENABLE_MUTLCAP #define DEF_TOUCH_QDEBUG_ENABLE 1u

    Build and load the project again. Now, mutual capacitance slider performance can be analyzed in QTouchAnalyzer.Note: The QTouch Analyzer can only provide either self or mutual capacitance sensor data,simultaneously.

    5.3. Adding ASF Component (SERCOM I2C - Slave Mode Driver)Next step is to add SERCOM I2C Slave Mode Callback driver from ASF, into the combined projectcreated. To open the ASF wizard in the project, click on ASF -> ASF Wizard. Then search and selectSERCOM I2C Slave Mode I2C driver (Callback) under the Available Modules. Click on the Addbutton as shown in the following figure.

    Atmel AT08774: SAM D20 PTC with I2C Slave [APPLICATION NOTE]Atmel-42325C-SAM-D20-PTC-with-I2C-Slave_Application Note-04/2016

    15

  • Figure 5-1.Selecting SERCOM I2C Slave Driver from ASF

    The SERCOM I2C driver is available under the Selected Modules list. Click on the Apply button toinclude the selected I2C diver module into the combined project. Save the changes and perform a testbuild using the project.Figure 5-2.Adding SERCOM I2C Slave Driver into the Project

    5.4. Configure and Process I2CIn the user project (combined project created) which includes required I2C drivers from ASF, I2C shouldbe configured in slave mode and the necessary callbacks should be defined.

    The I2C driver added from ASF does not handle internal memory addressing. So the application codeneeds to process the read and write commands appropriately.

    In the user project, include the source and header files available in the apps_src folder in thedemonstration project. Among the included source files, i2c_process.c file takes care of configuringthe I2C in slave mode and define I2C callbacks for read request, write request, read complete, writecomplete operations.

    Atmel AT08774: SAM D20 PTC with I2C Slave [APPLICATION NOTE]Atmel-42325C-SAM-D20-PTC-with-I2C-Slave_Application Note-04/2016

    16

  • As well, this file handles internal memory addressing to comply with master requests. This internaladdressing implementation requires number of bytes written by master to the slave device. So, in thei2c_slave_interrupt.c file in the interrupt handler _i2c_slave_interrupt_handler definition,a variable for number of bytes written is incremented whenever request is received for write, as shown infollowing code snippet./* Continue buffer write/read */ } else if (module->buffer_length > 0 && module->buffer_remaining > 0) { /* Call function based on transfer direction */ if (module->transfer_direction == I2C_TRANSFER_WRITE) { _i2c_slave_read(module); num_bytes_written++; } else { _i2c_slave_write(module);

    The variable num_bytes_written should be declared as extern in the i2c_slave_interrupt.cfile.extern uint8_t num_bytes_written;

    Based on the number of bytes written, the slave decides whether it is a master write instruction or readinstruction.

    Case 1: If the number of bytes written is one, then slave determines this as a read request from master.The data byte received is considered as address to be read and the slave points to that address for readoperation.

    Case 2: If the number of bytes written is more than one, then slave determines this as a write requestfrom master. Slave writes the received data bytes into a data buffer.

    Process received data:

    During write operation, data bytes written are stored in a data buffer. This data must be processedappropriately, where the first byte in buffer represents the address to be written into and the followingbytes are the data bytes to be written. These data bytes written updates / configures the touch setupparameters, discussed in following sections. The i2c_process.c file also handles processing of thereceived data bytes and updating the memory map.

    To complete configuring and data processing, replace the main.c file available in demonstration projectin the user project. This completes the demonstration project creation by the user.

    Build the project and test it using any I2C Master MCU.

    5.5. FilesThe folder structure of the firmware solution is as follows:

    Atmel AT08774: SAM D20 PTC with I2C Slave [APPLICATION NOTE]Atmel-42325C-SAM-D20-PTC-with-I2C-Slave_Application Note-04/2016

    17

  • Figure 5-3.Folder Structure

    The following table provides a brief description of additional files used in this firmware solution.Table 5-4.File Description

    File name Description

    configuration.h Configuration for Change pin is provided here.memorymap.h Defines memory map structure which contains touch setup parameters as objects.memorymap.c Provides a default value to the touch setup parameters in memory map.i2c_process.h It consist of function prototypes and macro definitions used in i2c_process.ci2c_process.c It configures I2C and processes data bytes received.

    5.6. FunctionsA brief description of functions used in the additional files included in the firmware solution are provided inthe following table.Table 5-5.Functions

    Function Description

    void memorymap_defaults(void) Provides default values totouch setup parameters inmemory map.

    Input None

    Output None

    Atmel AT08774: SAM D20 PTC with I2C Slave [APPLICATION NOTE]Atmel-42325C-SAM-D20-PTC-with-I2C-Slave_Application Note-04/2016

    18

  • Function Description

    void i2c_read_request_callback(structi2c_slave_module *const module)

    This function points theread location to theappropriate memory maplocation requested bymaster.

    Input *const pointerto the I2C slavemodulestructure.

    Output None

    void i2c_write_request_callback(structi2c_slave_module *const module)

    This function points thewrite location to the writebuffer.

    Input *const pointerto the I2C slavemodulestructure.

    Output None

    void i2c_read_complete_callback(structi2c_slave_module *const module)

    Updates the change pinstatus when the statusbytes is read by master.

    Input *const pointerto the I2C slavemodulestructure.

    Output None

    void i2c_write_complete_callback(structi2c_slave_module *const module)

    Checks the number ofbytes written and takesnecessary action for read/write request.

    Input *const pointerto the I2C slavemodulestructure.

    Output None

    void configure_i2c_slave(void) Configures SERCOM4I2C in Slave mode.

    Input None

    Output None

    Atmel AT08774: SAM D20 PTC with I2C Slave [APPLICATION NOTE]Atmel-42325C-SAM-D20-PTC-with-I2C-Slave_Application Note-04/2016

    19

  • Function Description

    void configure_i2c_slave_callbacks(void) Register and enable I2CSlave callback routines.

    Input None

    Output None

    void update_sensor_data(void) Updates touch sensordata measured in thememory map structureand updates change pinstatus based on sensorstate.

    Input type - type codefor the objectdetailsrequested

    Output None

    void update_setup_config(void) Updates touch setupparameters based ondata written by master.

    Input None

    Output None

    void update_memory_map(void) Updates the memory mapwith data written bymaster.

    Input None

    Output None

    Atmel AT08774: SAM D20 PTC with I2C Slave [APPLICATION NOTE]Atmel-42325C-SAM-D20-PTC-with-I2C-Slave_Application Note-04/2016

    20

  • 6. Communication Protocol

    6.1. IntroductionThe device is address mapped. All communications consist of write and read access to the locations in an8-bit address map.

    The memory map structure that contains the touch status / setup parameters used in firmware solutionare provided in the following table. The touch setup parameters can be modified as required for the userapplication.

    Table 6-1.Memory Map

    Address Use Access

    0 Chip ID Read

    1 Major/Minor Code Version Read

    2 SelfCap Sensor Status Read

    3 MutualCap Sensor Status Read

    4 Rotor/Slider Position Read

    5 Reserved_1 Read

    6 Calibrate Read/Write

    7 Reset Read/Write

    8 Scan Interval Read/Write

    9 Reserved_2 Read/Write

    Self-capacitance Setup Block

    10 Gain for Button_0 Read/Write

    11 Gain for Button_1 Read/Write

    12 Frequency_Mode Read/Write

    13 PTC Prescaler for Channel_0 Read/Write

    14 PTC Prescaler for Channel_1 Read/Write

    15 Series Resistor for Channel_0 Read/Write

    16 Series Resistor for Channel_1 Read/Write

    17 PTC Prescaler - CC Cal for Channel_0 Read/Write

    18 PTC Prescaler - CC Cal for Channel_1 Read/Write

    19 Series Resistor - CC Cal for Channel_0 Read/Write

    20 Series Resistor - CC Cal for Channel_1 Read/Write

    21 23 Frequency Hops Read/Write

    24 Filter Level for Channel_0 Read/Write

    Atmel AT08774: SAM D20 PTC with I2C Slave [APPLICATION NOTE]Atmel-42325C-SAM-D20-PTC-with-I2C-Slave_Application Note-04/2016

    21

  • Address Use Access

    25 Filter Level for Channel_1

    26 Auto OS for Channel_0 Read/Write

    27 Auto OS for Channel_1

    28 Auto Tune Read/Write

    29 30 AKS (Key 0 1) Read/Write

    31 32 Detect Threshold (Button 0 1) Read/Write

    33 34 Detect Hysteresis (Button 0 1) Read/Write

    35 36 Position Resolution (Button 0 1) Read/Write

    37 Detect Integration Read/Write

    38 Away From Touch Drift Read/Write

    39 Towards Touch Drift Read/Write

    40 Max On Duration Read/Write

    41 Drift Hold Time Read/Write

    42 Away from touch Recalibration Delay Read/Write

    43 Calibration burst count - Seq1 Read/Write

    44 Calibration burst count Seq2 Read/Write

    45 Recalibration Threshold Read/Write

    46 47 Sensor post-processing mode Read/Write

    48 49 Auto OS signal stability limit

    50 51 Frequency auto tune stability limit Read/Write

    52 Frequency auto tune In counter Read/Write

    53 Reserved_3 Read/Write

    54 55 Noise measurement signal stability limit Read/Write

    56 Noise measurement noise limit Read/Write

    57 Noise measurement sensor lockout setting Read/Write

    58 Noise measurement lockout count down Read/Write

    59 Reserved_4 Read/Write

    Mutual capacitance Setup Block

    60 Gain for Slider Channel_0 Read/Write

    61 Gain for Slider Channel_1 Read/Write

    62 Gain for Slider Channel_2 Read/Write

    63 Gain for Slider Channel_3 Read/Write

    64 Frequency_Mode Read/Write

    Atmel AT08774: SAM D20 PTC with I2C Slave [APPLICATION NOTE]Atmel-42325C-SAM-D20-PTC-with-I2C-Slave_Application Note-04/2016

    22

  • Address Use Access

    65 68 PTC Prescaler (Channel_0 to Channel_3) Read/Write

    69 72 Series Resistor (Channel_0 to Channel_3) Read/Write

    73 76 PTC Prescaler - CC Cal (Channel_0 to Channel_3)

    77 80 Series Resistor - CC Cal (Channel_0 to Channel_3) Read/Write

    81 83 Frequency Hops Read/Write

    84 87 Filter Level (Channel_0 to Channel_3) Read/Write

    88 91 Auto OS (Channel_0 to Channel_3) Read/Write

    92 Auto Tune Read/Write

    93 Slider AKS Read/Write

    94 Slider Detect Threshold Read/Write

    95 Slider Detect Hysteresis Read/Write

    96 Slider Position Resolution Read/Write

    97 Slider Position Hysteresis Read/Write

    98 Reserved_5 Read/Write

    99 Detect Integration Read/Write

    100 Away From Touch Drift Read/Write

    101 Towards Touch Drift Read/Write

    102 Max On Duration Read/Write

    103 Drift Hold Time Read/Write

    104 Away from touch Recalibration Delay Read/Write

    105 Calibration burst count - Seq1 Read/Write

    106 Calibration burst count Seq2 Read/Write

    107 Recalibration Threshold Read/Write

    108 109 Sensor post-processing mode Read/Write

    110 111 Auto OS signal stability limit Read/Write

    112 113 Frequency auto tune stability limit Read/Write

    114 Frequency auto tune In counter Read/Write

    115 Reserved_6 Read/Write

    116 117 Noise measurement signal stability limit Read/Write

    118 Noise measurement noise limit Read/Write

    119 Noise measurement sensor lockout setting Read/Write

    120 Noise measurement lockout count down Read/Write

    121 Reserved_7 Read

    Atmel AT08774: SAM D20 PTC with I2C Slave [APPLICATION NOTE]Atmel-42325C-SAM-D20-PTC-with-I2C-Slave_Application Note-04/2016

    23

  • Address Use Access

    122 125 SelfCap Signal Read

    126 129 SelfCap Reference Read

    130 137 MutualCap Signal Read

    138 145 MutualCap Reference Read

    6.2. Address 0: Chip ID

    Address Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0

    0 Chip ID

    This address holds the Chip ID, always reads 0x1A.

    6.3. Address 1: Major/Minor Code Version

    Address Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0

    1 Major Version Minor Version

    There is an 8-bit major and minor version of the firmware revision. The top nibble of the firmware versionregister contains the major version (1.0) and the bottom nibble contains the minor version (1.0).

    6.4. Address 2: SelfCap Sensor Status

    Address Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0

    2 0 0 0 0 0 0 Button_1 Button_0

    The last two bits indicate touch status of two self-capacitance buttons. It is reported as 1 if button istouched else reports 0 when untouched. A change in this status bits causes CHANGE line to assert low.

    6.5. Address 3: MutualCap Sensor Status

    Address Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0

    3 0 0 0 0 0 0 0 Slider_State

    The last bit indicates touch status of mutual capacitance slider. It is reported as 1 if slider is touched elsereports 0 when slider is not in detection. A change in this status bit causes CHANGE line to assert low.

    6.6. Address 4: Rotor/Slider Position

    Address Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0

    4 Slider Position

    Atmel AT08774: SAM D20 PTC with I2C Slave [APPLICATION NOTE]Atmel-42325C-SAM-D20-PTC-with-I2C-Slave_Application Note-04/2016

    24

  • This byte reports slider position output. This is valid only when slider is in detect state. A change in thisvalue causes CHANGE line to assert low.

    6.7. Address 6: Calibrate

    Address Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0

    6 CALIBRATE

    Writing any non-zero value into this address will trigger the device to start a recalibration on all enabledsensors.

    6.8. Address 7: Reset

    Address Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0

    7 RESET

    Any non-zero value will trigger the device to reset. After reset, the device will revert to default settingsprovided to touch setup parameters.

    The host must wait for at least 300ms for the operation to be completed before communications can bere-established.

    6.9. Address 8: Scan Interval

    Address Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0

    8 SCAN INTERVAL

    This 8-bit value represents the duration (in ms) to invoke touch measurement. Longer the interval yieldslower power consumption, as the device sleeps longer after touch measurement, but at the cost of slowerresponse to touch.

    6.10. Address 10-11, 52-55: GAIN

    Address Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0

    10 GAIN for SelfCap Button_0

    11 GAIN for SelfCap Button_1

    52 GAIN for MutualCap Slider Channel _0

    53 GAIN for MutualCap Slider Channel _1

    54 GAIN for MutualCap Slider Channel _2

    55 GAIN for MutualCap Slider Channel _3

    Address 10-11 represents gain setting for self-capacitance buttons.

    Address 52-55 represents gain setting for mutual capacitance slider channels.

    Atmel AT08774: SAM D20 PTC with I2C Slave [APPLICATION NOTE]Atmel-42325C-SAM-D20-PTC-with-I2C-Slave_Application Note-04/2016

    25

  • Gain setting is applied on a per-channel basis to allow scaling-up of the touch delta upon contact. Gainsetting depends on the sensor design and touch panel thickness.

    Range: GAIN_1 to GAIN_32Default: GAIN_1 ( Self-capacitance), GAIN_2 (Mutual capacitance)

    6.11. Address 12, 64: Frequency Mode

    Address Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0

    12 Frequency Mode for SelfCap

    56 Frequency Mode for MutualCap

    Address 12 represents frequency mode to be used for self-capacitance buttons.

    Address 56 represents frequency mode to be used for mutual capacitance slider.

    Frequency mode setting allows users to tune the PTC touch acquisition frequency characteristics tocounter environment noise. The different frequency modes available are:

    FREQ_MODE_HOP FREQ_MODE_SPREAD FREQ_MODE_SPREAD_MEDIAN FREQ_MODE_NONE

    Refer to PTC User guide for more details.

    Default: FREQ_MODE_NONE (For both Self-capacitance and Mutual capacitance).

    6.12. Address 13-14, 65-68: PTC Prescaler

    Address Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0

    13 16 PTC Prescaler for SelfCap

    65 68 PTC Prescaler for MutualCap

    This setting controls the clock pre-scaler to the Generic clock input to PTC. The Generic clock input toPTC should be set to 4MHz. The pre-scaler setting scales down the PTC clock as follows:

    PRSC_DIV_SEL_1 sets PTC Clock to 4MHz PRSC_DIV_SEL_2 sets PTC Clock to 2MHz PRSC_DIV_SEL_4 sets PTC Clock to 1MHz PRSC_DIV_SEL_8 sets PTC Clock to 500kHz

    Range: PRSC_DIV_SEL_1 to PRSC_DIV_SEL_8Default: PRSC_DIV_SEL_1 (For both Self-capacitance and Mutual capacitance)

    Atmel AT08774: SAM D20 PTC with I2C Slave [APPLICATION NOTE]Atmel-42325C-SAM-D20-PTC-with-I2C-Slave_Application Note-04/2016

    26

    http://www.atmel.com/Images/Atmel-42195-Qtouch-Library-Peripheral-Touch-Controller_User-Guide.pdf

  • 6.13. Address 15-16, 69-72: Series Resistor

    Address Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0

    15 16 Series Resistor for SelfCap

    77 80 Series Resistor for MutualCap

    This setting controls the value of internal series resistor on the Y line. RSEL_VAL_0 sets internal series resistor to 0 RSEL_VAL_20 sets internal series resistor to 20k RSEL_VAL_50 sets internal series resistor to 50k RSEL_VAL_100 sets internal series resistor to 100k

    Range: RSEL_VAL_0 to RSEL_VAL_100Default: RSEL_VAL_100 (For both Self-capacitance and Mutual capacitance)

    6.14. Address 17-18, 73-76: PTC Prescaler CC Cal

    Address Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0

    17 18 CC Cal PTC Prescaler for SelfCap

    73 76 CC Cal PTC Prescaler for MutualCap

    This setting controls PTC Prescaler to be used during compensation capacitor calibration.

    6.15. Address 16, 60: Series Resistor CC Cal

    Address Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0

    16 CC Cal Series Resistor for SelfCap

    60 CC Cal Series Resistor for MutualCap

    This setting controls Series Resistor to be used during compensation capacitor calibration.

    6.16. Address 21-23, 81-83: Frequency Hops

    Address Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0

    21 Frequency Hop_1 for SelfCap

    22 Frequency Hop_2 for SelfCap

    23 Frequency Hop_3 for SelfCap

    81 Frequency Hop_1 for MutualCap

    82 Frequency Hop_2 for MutualCap

    83 Frequency Hop_3 for MutualCap

    Atmel AT08774: SAM D20 PTC with I2C Slave [APPLICATION NOTE]Atmel-42325C-SAM-D20-PTC-with-I2C-Slave_Application Note-04/2016

    27

  • This frequency hop delay setting is used when the Frequency mode is set to FREQ_MODE_HOP.A set of three frequency hop delay settings should be specified. This delay setting inserts n PTC clockcycles between consecutive measurements on a given sensor, thereby changing the PTC acquisitionfrequency.

    FREQ_HOP_SEL_1 setting inserts 1 PTC clock cycle between consecutive measurements.FREQ_HOP_SEL_15 setting inserts 15 PTC clock cycles.Higher delay setting will increase the total time taken for capacitance measurement on a given sensor ascompared to a lower delay setting. A desired setting can be used to avoid noise around the samefrequency as the acquisition frequency.

    Range:FREQ_HOP_SEL_1 to FREQ_HOP_SEL_16

    6.17. Address 24-25, 84-87: Filter Level

    Address Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0

    24-25 Filter Level for SelfCap

    84 87 Filter Level for MutualCap

    This filter level setting controls the number of samples taken to resolve each acquisition. A higher filterlevel setting provides improved signal to noise ratio under noisy conditions, while increasing the total timefor measurement resulting in increased power consumption and response time.

    Range: FILTER_LEVEL_1 to FILTER_LEVEL_64Default: FILTER_LEVEL_8 (For both Self-capacitance and Mutual capacitance)

    6.18. Address 26-27, 88-91: Auto OS

    Address Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0

    26 27 Auto OS for SelfCap

    88 91 Auto OS for MutualCap

    Auto oversample controls the automatic oversampling of sensor channels when unstable signals aredetected with the default setting of 'Filter level'.

    Enabling Auto oversample results in 'Filter level' x 'Auto Oversample' number of samples taken on thecorresponding sensor channel when an unstable signal is observed. In a case where 'Filter level' is set toFILTER_LEVEL_4 and 'Auto Oversample' is set to AUTO_OS_4, 4 oversamples are taken with stablesignal values and 16 oversamples are taken when unstable signal is detected.

    Range: AUTO_OS_DISABLE to AUTO_OS_128Default: AUTO_OS_DISABLE (For both Self-capacitance and Mutual capacitance)

    Atmel AT08774: SAM D20 PTC with I2C Slave [APPLICATION NOTE]Atmel-42325C-SAM-D20-PTC-with-I2C-Slave_Application Note-04/2016

    28

  • 6.19. Address 28, 92: Auto Tune

    Address Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0

    22 Auto Tune for SelfCap

    66 Auto Tune for MutualCap

    Auto tune parameter setting is passed to the touch_xx_sensors_calibrate API in order to allowusers to tune the PTC module for power consumption or noise performance.

    AUTO_TUNE_PRSC

    When Auto tuning of pre-scaler is selected the PTC uses the user defined internal series resistor setting(DEF_MUTLCAP_SENSE_RESISTOR) and the pre-scaler is adjusted to slow down the PTC operation toensure full charge transfer. Auto tuning of pre-scaler with RSEL_VAL_100 as the series resistor results inbest noise performance while resulting in increased power consumption and touch response time.

    AUTO_TUNE_RSEL

    When Auto tuning of the series resistor is selected the PTC runs at user defined pre-scaler setting speed(DEF_MUTLCAP_CLK_PRESCALE) and the internal series resistor is tuned automatically to the optimumvalue to allow for full charge transfer. Auto tuning of series resistor with PRSC_DIV_SEL_1 as the PTCpre-scale results in best case power consumption.

    AUTO_TUNE_NONE

    When manual tuning option is selected, the user defined values of PTC pre-scaler and series resistor isused for PTC operation as given in DEF_MUTLCAP_CLK_PRESCALE andDEF_MUTLCAP_SENSE_RESISTOR.Default: AUTO_TUNE_PRSC (For both Self-capacitance and Mutual capacitance)

    6.20. Address 29-30, 93: AKS

    Address Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0

    29 AKS for SelfCap Button_0

    30 AKS for SelfCap Button_1

    93 AKS for MutualCap Slider

    In designs, where the sensors are close together or configured for high sensitivity, multiple sensors mightreport a detect simultaneously. To allow applications to determine the intended single touch, the touchlibrary provides the user the ability to configure a certain number of sensors in an AKS group.

    When a group of sensors are in the same AKS group, only the first strongest sensor will report detection.The sensor reporting detection will continue to report detection even if another sensor's delta becomesstronger. The sensor stays in detect until its delta falls below its detection threshold. If any more sensorsin the AKS group are still in detect only the strongest will report detection. At a given time point, only onesensor from each AKS group is reported to be in detect.

    Range: NO_AKS_GROUP to AKS_GROUP_7Default: NO_AKS_GROUP (For all Self and Mutual capacitance sensors)

    Atmel AT08774: SAM D20 PTC with I2C Slave [APPLICATION NOTE]Atmel-42325C-SAM-D20-PTC-with-I2C-Slave_Application Note-04/2016

    29

  • 6.21. Address 31-32, 94: Detect Threshold

    Address Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0

    31 Detect Threshold for SelfCap Button_0

    32 Detect Threshold for SelfCap Button_1

    94 Detect Threshold for MutualCap Slider

    A sensors detect threshold define the quantity the signal must increase above its reference level toqualify as a potential touch detect. However, the final detection confirmation must satisfy the DetectIntegrator (DI) limit. Larger threshold values desensitize sensors since the signal must change more (i.e.requires larger touch) to exceed the threshold level. Conversely, lower threshold levels make sensorsmore sensitive.

    Threshold setting depends on the amount of signal swing when a sensor is touched. Usually, thicker frontpanels or smaller electrodes have smaller signal swing on touch, thus require lower threshold levels.

    Range: 3 to 255

    Default: 20 (Self-capacitance), 30 (Mutual capacitance)

    6.22. Address 33-34, 95: Detect Hysteresis

    Address Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0

    33 Detect Hysteresis for SelfCap Button_0

    34 Detect Hysteresis for SelfCap Button_1

    95 Detect Hysteresis for MutualCap Slider

    This setting is sensor detection hysteresis value. It is expressed as a percentage of the sensor detectionthreshold setting. When a sensor goes into detect its threshold level is reduced (by the hysteresis value)in order to avoid the sensor dither in and out of detect if the signal level is close to original threshold level.

    Setting of 0 = 50% of detect threshold value (HYST_50) Setting of 1 = 25% of detect threshold value (HYST_25) Setting of 2 = 12.5% of detect threshold value (HYST_12_5) Setting of 3 = 6.25% of detect threshold value (HYST_6_25)

    Range: HYST_6_25 to HYST_50Default: HYST_25 (For all Self and Mutual capacitance sensors)

    6.23. Address 35-36, 96: Position Resolution

    Address Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0

    35 Position Resolution for SelfCap Button_0

    36 Position Resolution for SelfCap Button_1

    96 Position Resolution for MutualCap Slider

    Atmel AT08774: SAM D20 PTC with I2C Slave [APPLICATION NOTE]Atmel-42325C-SAM-D20-PTC-with-I2C-Slave_Application Note-04/2016

    30

  • The rotor or slider needs the position resolution (angle resolution in case of rotor and linear resolution incase of slider) to be set. Resolution is the number of bits needed to report the position of rotor or slider.

    Range: 2 bits to 8 bits

    Default: 8bits (For all Self and Mutual capacitance sensors)

    6.24. Address 97: Position Hysteresis

    Address Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0

    97 Position Hysteresis for MutualCap Slider

    In case of Mutual Cap, the rotor or slider needs the position hysteresis (angle hysteresis in case of rotorand linear hysteresis in case of slider) to be set. It is the number of positions the user has to move back,before touch position is reported when the direction of scrolling is changed and during the first scrollingafter user press.

    Hysteresis can range from 0 (1 position) to 7 (8 positions). The hysteresis is carried out at 8 bitsresolution internally and scaled to desired resolution; therefore at resolutions lower than 8 bits there mightbe a difference of 1 reported position from the hysteresis setting, depending on where the touch isdetected.

    Position hysteresis is not used in case of self-capacitance method sensors.

    Range: 0 to 7

    Default: 0 (For Mutual capacitance Slider)

    6.25. Address 37, 99: Detect Integration

    Address Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0

    37 Detect Integration for SelfCap

    99 Detect Integration for MutualCap

    The QTouch Library features a detect integration mechanism, which confirm detection in a robustenvironment. The detect integration (DI) acts as a simple signal filter to suppress false detections causedby spurious events such as electrical noise.

    A counter is incremented each time the sensor delta has exceeded its threshold and stayed there for aspecific number of acquisitions, without going below the threshold levels. When this counter reaches apreset limit (the DI value) the sensor is finally declared to be touched. If on any acquisition the deltaexceeds the threshold level, the counter is cleared and the process has to start from the beginning. TheDI process is applicable to a 'release' (going out of detect) event as well.

    For example, if the DI value is 10, the device has to exceed its threshold and stay there for 10 successiveacquisitions without going below the threshold level, before the sensor is declared to be touched.

    Range: 0 to 255

    Default: 4

    Atmel AT08774: SAM D20 PTC with I2C Slave [APPLICATION NOTE]Atmel-42325C-SAM-D20-PTC-with-I2C-Slave_Application Note-04/2016

    31

  • 6.26. Address 38, 100: Away From Touch Drift (Positive Drift)

    Address Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0

    38 Away From Touch Drift for SelfCap

    100 Away From Touch Drift for MutualCap

    6.27. Address 39, 101: Towards Touch Drift (Negative Drift)

    Address Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0

    39 Towards Touch Drift for SelfCap

    101 Towards Touch Drift for MutualCap

    Drift in a general sense means adjusting reference level (of a sensor) to allow compensation fortemperature (or other factor) effect on physical sensor characteristics. Decreasing reference level forsuch compensation is called Negative drift and increasing reference level is called Positive drift.Specifically, the drift compensation should be set to compensate faster for increasing signals than fordecreasing signals.

    Signals can drift because of changes in physical sensor characteristics over time and temperature. It iscrucial that such drift be compensated for; otherwise false detections and sensitivity shifts can occur. Driftcompensation occurs only while there is no detection in effect. Once a finger is sensed, the driftcompensation mechanism ceases since the signal is legitimately detecting an object. Drift compensationworks only when the signal in question has not crossed the 'Detect threshold' level.

    The drift compensation mechanism can be asymmetric; it can be made to occur in one direction fasterthan it does in the other simply by changing the appropriate setup parameters. Signal values of a sensortend to increase when an object (touch) is approaching it or a characteristic change of sensor over timeand temperature. Increasing signals should not be compensated quickly, as an approaching finger couldbe compensated for partially or entirely before even touching the channel (towards touch drift).

    However, an object over the channel which does not cause detection, and for which the sensor hasalready made full allowance (over some period of time), could suddenly be removed leaving the sensorwith an artificially suppressed reference level and thus become insensitive to touch. In the latter case, thesensor should compensate for the object's removal by raising the reference level relatively quickly (awayfrom touch drift).

    Away from Touch Drift Range: 0 to 127

    Default: 5

    Towards Touch Drift Range: 0 to 127

    Default: 20

    Atmel AT08774: SAM D20 PTC with I2C Slave [APPLICATION NOTE]Atmel-42325C-SAM-D20-PTC-with-I2C-Slave_Application Note-04/2016

    32

  • 6.28. Address 40, 102: Max On Duration

    Address Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0

    40 Max On Duration for SelfCap

    102 Max On Duration for MutualCap

    The Maximum ON duration timer monitors such detections; if detection exceeds the timer's settings, thesensor is automatically recalibrated. After a recalibration has taken place, the affected sensor once againfunctions normally even if it still in contact with the foreign object.

    Max on duration can be disabled by setting it to zero (infinite timeout) in which case the channel neverrecalibrates during a continuous detection (but the host could still command it).

    Range: 0 to 255

    Default: 0

    6.29. Address 41, 103: Drift Hold Time

    Address Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0

    41 Drift Hold Time for SelfCap

    103 Drift Hold Time for MutualCap

    Drift Hold Time (DHT) is used to restrict drift on all sensors while one or more sensors are activated. Itdefines the length of time the drift is halted after a key detection. This feature is useful in cases of highdensity keypads where touching a key or floating a finger over the keypad would cause untouched keysto drift, and therefore create a sensitivity shift, and ultimately inhibit any touch detection.

    Range: 1 to 255

    Default: 20

    6.30. Address 42, 104: Away from Touch Recalibration Delay

    Address Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0

    36 Away from Touch Recalibration Delay for SelfCap

    78 Away from Touch Recalibration Delay for MutualCap

    If any key is found to have a significant negative delta, it is deemed to be an error condition. If thiscondition persists beyond away from touch recalibration delay period, then an automatic recalibration iscarried out.

    A counter is incremented each time the sensor delta is equal to the away from touch recalibrationthreshold and stayed there for a specific number of acquisitions. When this counter reaches a preset limit(the PRD value) the sensor is finally recalibrated. If on any acquisition the delta is seen to be greater thanthe away from touch recalibration threshold level, the counter is cleared and the away from touch driftingis performed.

    Atmel AT08774: SAM D20 PTC with I2C Slave [APPLICATION NOTE]Atmel-42325C-SAM-D20-PTC-with-I2C-Slave_Application Note-04/2016

    33

  • For example, if the away from touch recalibration delay setting is 10, then the delta has to drop below therecalibration threshold and stay there for 10 acquisitions in succession without going below the thresholdlevel, before the sensor is declared to be recalibrated.

    Range: 1 to 255

    Default: 20

    6.31. Address 43, 105: Calibration Burst Count - Seq1

    Address Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0

    37 Calibration burst count - Seq1 for SelfCap

    79 Calibration burst count - Seq1 for MutualCap

    This setting represents the total number of measurements carried out during sensor calibration.

    Range: 1 to 255

    Default: 8

    6.32. Address 44, 106: Calibration Burst Count - Seq2

    Address Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0

    38 Calibration burst count - Seq2 for SelfCap

    80 Calibration burst count - Seq2 for MutualCap

    This setting represents the total number of measurements that is considered for performing driftingreference value during sensor calibration. This value should be less than the Seq1 count value set, asthis is subset of calibration operation.

    Range: 1 to 255

    Default: 4

    6.33. Address 45, 107: Recalibration Threshold

    Address Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0

    39 Recalibration Threshold for SelfCap

    81 Recalibration Threshold for MutualCap

    Recalibration threshold is the level beyond which automatic recalibration occurs. Recalibration thresholdis expressed as a percentage of the detection threshold setting. This setting is an enumerated value andits settings are as follows:

    Setting of 0 = 100% of detect threshold (RECAL_100) Setting of 1 = 50% of detect threshold (RECAL_50) Setting of 2 = 25% of detect threshold (RECAL_25) Setting of 3 = 12.5% of detect threshold (RECAL_12_5)

    Atmel AT08774: SAM D20 PTC with I2C Slave [APPLICATION NOTE]Atmel-42325C-SAM-D20-PTC-with-I2C-Slave_Application Note-04/2016

    34

  • Setting of 4 = 6.25% of detect threshold (RECAL_6_25)However, an absolute value of 4 is the hard limit for this setting. For example, if the detection threshold is40 and the Recalibration threshold value is set to 4. Although this implies an absolute value of 2 (40 *6.25% = 2.5), it is hard limited to 4.

    Range: RECAL_6_25 to RECAL_100Default: RECAL_50

    6.34. Address 46-47,108-109: Sensor Post-processing Mode

    Address Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0

    40-41 Sensor post-processing mode for SelfCap

    82-83 Sensor post-processing mode for MutualCap

    This setting controls the touch library post-processing mode options. Setting of 0 = TOUCH_LIBRARY_DRIVEN Setting of 1 = TOUCH_APPLN_DRIVEN

    When TOUCH_LIBRARY_DRIVEN mode is selected, the library self-initiates repeated touchmeasurements to resolve touch press, release and calibration. This mode is suited for best responsetime.

    When TOUCH_APPLN_DRIVEN mode is selected, the library does not initiate repeated touchmeasurement to resolve touch press, release and calibration. This mode suits deterministic PTC interruptexecution time for applications requiring stringent CPU time requirements.

    Default: 0

    6.35. Address 48-49, 110-111: Auto OS Signal Stability Limit

    Address Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0

    48-49 Auto OS signal stability limit for SelfCap

    110-111 Auto OS signal stability limit for MutualCap

    This setting defines the stability limit of the signals for performing over-samples.

    Range: 1 to 1000

    Default: 20

    6.36. Address 50-51,112-113: Frequency Auto Tune Stability Limit

    Address Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0

    42-43 Frequency auto tune stability limit for SelfCap

    84-85 Frequency auto tune stability limit for MutualCap

    This setting defines the stability limit of signals for Frequency auto tune calculation.

    Atmel AT08774: SAM D20 PTC with I2C Slave [APPLICATION NOTE]Atmel-42325C-SAM-D20-PTC-with-I2C-Slave_Application Note-04/2016

    35

  • Range: 1 to 1000

    Default: 10

    Note: This applies only for FREQ_MODE_HOP

    6.37. Address 52,114: Frequency Auto Tune In Counter

    Address Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0

    44 Frequency auto tune in counter for SelfCap

    86 Frequency auto tune in counter for MutualCap

    The DEF_XXXXCAP_FREQ_AUTO_TUNE_IN_CNT parameter is used to trigger the frequency auto tune. Ifsensor signal change at each frequency exceeds the value specified as DEF_XXXXCAP_FREQ_AUTO_SIGNAL_STABILITY_LIMIT for DEF_XXXXCAP_FREQ_AUTO_TUNE_IN_CNT, thenfrequency auto tune will be triggered at this frequency.

    Range: 1 to 255

    Default: 12

    Note: The Frequency Auto Tune feature and related parameters are available only in FREQ_MODE_HOPmode.

    6.38. Address 54-55,116-117: Noise Measurement Signal Stability Limit

    Address Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0

    46-47 Noise measurement signal stability limit for SelfCap

    88-89 Noise measurement signal stability limit for MutualCap

    This setting defines the stability limit of signals for noise calculation.

    Range: 1 to1000

    Default: 10

    6.39. Address 56,118: Noise Measurement Noise LimitThis setting uses to set the noise limit cou

    Address Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0

    48 Noise measurement noise limit for SelfCap

    90 Noise measurement noise limit for MutualCap

    nter to trigger sensor lockout functionality.

    Range: 1 to 255

    Default: 12

    Atmel AT08774: SAM D20 PTC with I2C Slave [APPLICATION NOTE]Atmel-42325C-SAM-D20-PTC-with-I2C-Slave_Application Note-04/2016

    36

  • 6.40. Address 57,119: Noise Measurement Sensor Lockout Setting

    Address Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0

    49 Noise measurement sensor lockout setting for SelfCap

    91 Noise measurement sensor lockout setting for MutualCap

    This setting defines noisy senor lockout setting when the measured noise exceeds the noise limit anddoes not report a touch.

    Setting of 0 = SINGLE_SENSOR_LOCKOUT Setting of 1 = GLOBAL_SENSOR_LOCKOUT Setting of 2 = NO_LOCKOUT

    Default: 0

    6.41. Address 58,120: Noise Measurement Lockout Count Down

    Address Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0

    50 Noise measurement lockout count down for SelfCap

    92 Noise measurement lockout count down for MutualCap

    If the sensor signal moves from noisy to a good condition and stays there for a Lockout Countdownnumber of measurements, the sensor is unlocked and sensors are ready for touch detection and driftingis enabled.

    Note: This parameter is valid only for global lockout.

    Range: 1 to 255

    Default: 10

    6.42. Address 122 125: SelfCap Signal

    Address Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0

    122 SelfCap Button_0 Signal LSB

    123 SelfCap Button_0 Signal MSB

    124 SelfCap Button_1 Signal LSB

    125 SelfCap Button_1 Signal MSB

    Addresses 122 125 allow signal data to be read for self-capacitance buttons. There are two bytes ofdata for each button. The 16-bit signal which is accessed as two 8-bit bytes, stored LSB first.

    Atmel AT08774: SAM D20 PTC with I2C Slave [APPLICATION NOTE]Atmel-42325C-SAM-D20-PTC-with-I2C-Slave_Application Note-04/2016

    37

  • 6.43. Address 126 129: SelfCap Reference

    Address Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0

    126 SelfCap Button_0 Reference LSB

    127 SelfCap Button_0 Reference MSB

    128 SelfCap Button_1 Reference LSB

    129 SelfCap Button_1 Reference MSB

    Addresses 126 129 allow reference data to be read for self-capacitance buttons. There are two bytes ofdata for each button. The 16-bit reference which is accessed as two 8-bit bytes, stored LSB first.

    6.44. Address 130-137: MutualCap Signal

    Address Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0

    130 MutualCap Slider Channel_0 Signal LSB

    131 MutualCap Slider Channel_0 Signal MSB

    132 MutualCap Slider Channel_1 Signal LSB

    133 MutualCap Slider Channel_1 Signal MSB

    134 MutualCap Slider Channel_2 Signal LSB

    135 MutualCap Slider Channel_2 Signal MSB

    136 MutualCap Slider Channel_3 Signal LSB

    137 MutualCap Slider Channel_3 Signal MSB

    Addresses 130 137 allow signal data to be read for each channel of mutual capacitance slider. Thereare two bytes of data for each channel. The 16-bit signal which is accessed as two 8-bit bytes, storedLSB first.

    6.45. Address 138-145: MutualCap Reference

    Address Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0

    138 MutualCap Slider Channel_0 Reference LSB

    139 MutualCap Slider Channel_0 Reference MSB

    140 MutualCap Slider Channel_1 Reference LSB

    141 MutualCap Slider Channel_1 Reference MSB

    142 MutualCap Slider Channel_2 Reference LSB

    143 MutualCap Slider Channel_2 Reference MSB

    144 MutualCap Slider Channel_3 Reference LSB

    145 MutualCap Slider Channel_3 Reference MSB

    Atmel AT08774: SAM D20 PTC with I2C Slave [APPLICATION NOTE]Atmel-42325C-SAM-D20-PTC-with-I2C-Slave_Application Note-04/2016

    38

  • Addresses 138 145 allow reference data to be read for each channel of mutual capacitance slider. Thereare two bytes of data for each channel. The 16-bit reference which is accessed as two 8-bit bytes, storedLSB first.

    Atmel AT08774: SAM D20 PTC with I2C Slave [APPLICATION NOTE]Atmel-42325C-SAM-D20-PTC-with-I2C-Slave_Application Note-04/2016

    39

  • 7. References SAM D20 PTC User Guide - http://www.atmel.com/Images/Atmel-42195-Qtouch-Library-Peripheral-

    Touch-Controller_User-Guide.pdf Atmel SAM D20 Xplained Pro User Guide - http://www.atmel.com/images/atmel-42102-samd20-

    xplained-pro_user-guide.pdf Atmel AVR3009: Driving QTouch Device with IIC Interface - http://www.atmel.com/images/

    doc42064.pdf Atmel QTouch Library User Guide - http://www.atmel.com/Images/doc8207.pdf ATSAMD20J18 device datasheet - http://www.atmel.com/Images/Atmel-42129-SAM-

    D20_Datasheet.pdf Atmel AT03665: ASF Manual (SAM D20) - http://www.atmel.com/images/atmel-42139-asf-manual-

    sam-d20_application-note_at03665.pdf

    Atmel AT08774: SAM D20 PTC with I2C Slave [APPLICATION NOTE]Atmel-42325C-SAM-D20-PTC-with-I2C-Slave_Application Note-04/2016

    40

    http://www.atmel.com/Images/Atmel-42195-Qtouch-Library-Peripheral-Touch-Controller_User-Guide.pdfhttp://www.atmel.com/Images/Atmel-42195-Qtouch-Library-Peripheral-Touch-Controller_User-Guide.pdfhttp://www.atmel.com/images/atmel-42102-samd20-xplained-pro_user-guide.pdfhttp://www.atmel.com/images/atmel-42102-samd20-xplained-pro_user-guide.pdfhttp://www.atmel.com/images/doc42064.pdfhttp://www.atmel.com/images/doc42064.pdfhttp://www.atmel.com/Images/doc8207.pdfhttp://www.atmel.com/Images/Atmel-42129-SAM-D20_Datasheet.pdfhttp://www.atmel.com/Images/Atmel-42129-SAM-D20_Datasheet.pdfhttp://www.atmel.com/images/atmel-42139-asf-manual-sam-d20_application-note_at03665.pdfhttp://www.atmel.com/images/atmel-42139-asf-manual-sam-d20_application-note_at03665.pdf

  • 8. Revision HistoryDoc Rev. Date Comments

    42325C 04/2016 Revised for QTouch Library 5.8

    42325B 01/2015 Revised for QTouch Library 5.4

    42325A 06/2014 Initial document release

    Atmel AT08774: SAM D20 PTC with I2C Slave [APPLICATION NOTE]Atmel-42325C-SAM-D20-PTC-with-I2C-Slave_Application Note-04/2016

    41

  • Atmel Corporation 1600 Technology Drive, San Jose, CA 95110 USA T: (+1)(408) 441.0311 F: (+1)(408) 436.4200 | www.atmel.com

    2016 Atmel Corporation. / Rev.: Atmel-42325C-SAM-D20-PTC-with-I2C-Slave_Application Note-04/2016

    Atmel, Atmel logo and combinations thereof, Enabling Unlimited Possibilities, QTouch and others are registered trademarks or trademarks of Atmel Corporation inU.S. and other countries. ARM, Cortex, ARM Connected logo, and others are the registered trademarks or trademarks of ARM Ltd. Other terms and productnames may be trademarks of others.

    DISCLAIMER: The information in this document is provided in connection with Atmel products. No license, express or implied, by estoppel or otherwise, to anyintellectual property right is granted by this document or in connection with the sale of Atmel products. EXCEPT AS SET FORTH IN THE ATMEL TERMS ANDCONDITIONS OF SALES LOCATED ON THE ATMEL WEBSITE, ATMEL ASSUMES NO LIABILITY WHATSOEVER AND DISCLAIMS ANY EXPRESS, IMPLIEDOR STATUTORY WARRANTY RELATING TO ITS PRODUCTS INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTY OF MERCHANTABILITY,FITNESS FOR A PARTICULAR PURPOSE, OR NON-INFRINGEMENT. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,CONSEQUENTIAL, PUNITIVE, SPECIAL OR INCIDENTAL DAMAGES (INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOSS AND PROFITS, BUSINESSINTERRUPTION, OR LOSS OF INFORMATION) ARISING OUT OF THE USE OR INABILITY TO USE THIS DOCUMENT, EVEN IF ATMEL HAS BEEN ADVISEDOF THE POSSIBILITY OF SUCH DAMAGES. Atmel makes no representations or warranties with respect to the accuracy or completeness of the contents of thisdocument and reserves the right to make changes to specifications and products descriptions at any time without notice. Atmel does not make any commitment toupdate the information contained herein. Unless specifically provided otherwise, Atmel products are not suitable for, and shall not be used in, automotiveapplications. Atmel products are not intended, authorized, or warranted for use as components in applications intended to support or sustain life.

    SAFETY-CRITICAL, MILITARY, AND AUTOMOTIVE APPLICATIONS DISCLAIMER: Atmel products are not designed for and will not be used in connection with anyapplications where the failure of such products would reasonably be expected to result in significant personal injury or death (Safety-Critical Applications) withoutan Atmel officer's specific written consent. Safety-Critical Applications include, without limitation, life support devices and systems, equipment or systems for theoperation of nuclear facilities and weapons systems. Atmel products are not designed nor intended for use in military or aerospace applications or environmentsunless specifically designated by Atmel as military-grade. Atmel products are not designed nor intended for use in automotive applications unless specificallydesignated by Atmel as automotive-grade.

    https://www.facebook.com/AtmelCorporationhttps://twitter.com/Atmelhttp://www.linkedin.com/company/atmel-corporationhttps://plus.google.com/106109247591403112418/postshttp://www.youtube.com/user/AtmelCorporationhttp://en.wikipedia.org/wiki/Atmelhttp://www.atmel.com

    IntroductionFeaturesTable of Contents1.Abbreviations and Definitions2.Overview3.Hardware and Functional3.1.Hardware Requisites3.2.Circuit Configuration3.3.Test Setup3.4.Startup/Calibration Times3.5.Calibration3.6.Sleep3.7.Touch Data Debug

    4.I2C Operation4.1.I2C-Compatible Address4.2.CHANGE Pin

    5.Firmware5.1.Application Flow5.2.Creating Self/Mutual Combined Project5.2.1.Create Self-capacitance Project5.2.2.Create Mutual capacitance Project5.2.3.Create Combined (Self + Mutual capacitance) Project

    5.3.Adding ASF Component (SERCOM I2C - Slave Mode Driver)5.4.Configure and Process I2C5.5.Files5.6.Functions

    6.Communication Protocol6.1.Introduction6.2.Address 0: Chip ID6.3.Address 1: Major/Minor Code Version6.4.Address 2: SelfCap Sensor Status6.5.Address 3: MutualCap Sensor Status6.6.Address 4: Rotor/Slider Position6.7.Address 6: Calibrate6.8.Address 7: Reset6.9.Address 8: Scan Interval6.10.Address 10-11, 52-55: GAIN6.11.Address 12, 64: Frequency Mode6.12.Address 13-14, 65-68: PTC Prescaler6.13.Address 15-16, 69-72: Series Resistor6.14.Address 17-18, 73-76: PTC Prescaler CC Cal6.15.Address 16, 60: Series Resistor CC Cal6.16.Address 21-23, 81-83: Frequency Hops6.17.Address 24-25, 84-87: Filter Level6.18.Address 26-27, 88-91: Auto OS6.19.Address 28, 92: Auto Tune6.20.Address 29-30, 93: AKS6.21.Address 31-32, 94: Detect Threshold6.22.Address 33-34, 95: Detect Hysteresis6.23.Address 35-36, 96: Position Resolution6.24.Address 97: Position Hysteresis6.25.Address 37, 99: Detect Integration6.26.Address 38, 100: Away From Touch Drift (Positive Drift)6.27.Address 39, 101: Towards Touch Drift (Negative Drift)6.28.Address 40, 102: Max On Duration6.29.Address 41, 103: Drift Hold Time6.30.Address 42, 104: Away from Touch Recalibration Delay6.31.Address 43, 105: Calibration Burst Count - Seq16.32.Address 44, 106: Calibration Burst Count - Seq26.33.Address 45, 107: Recalibration Threshold6.34.Address 46-47,108-109: Sensor Post-processing Mode6.35.Address 48-49, 110-111: Auto OS Signal Stability Limit6.36.Address 50-51,112-113: Frequency Auto Tune Stability Limit6.37.Address 52,114: Frequency Auto Tune In Counter6.38.Address 54-55,116-117: Noise Measurement Signal Stability Limit6.39.Address 56,118: Noise Measurement Noise Limit6.40.Address 57,119: Noise Measurement Sensor Lockout Setting6.41.Address 58,120: Noise Measurement Lockout Count Down6.42.Address 122 125: SelfCap Signal6.43.Address 126 129: SelfCap Reference6.44.Address 130-137: MutualCap Signal6.45.Address 138-145: MutualCap Reference

    7.References8.Revision History