MICROCHIP AN1250

AN1250
Microchip CTMU for Capacitive Touch Applications
Author:
Bruce Bohn
Microchip Technology Inc.
INTRODUCTION
This application note describes the use of Microchip’s
Charge Time Measurement Unit (CTMU) for capacitive
touch applications. The CTMU is an excellent peripheral for use in touch sensing applications. The following
are some of the benefits of using the CTMU for touch
sensing applications:
• Easy hardware setup
• Simple to use software algorithms, available free
of charge
• High speed allows for greater scan rate of
capacitive touch switches and for many other
processor tasks
• Low cost and low component count; no external
hardware other than a connection to the copper
sensor pad
The purpose of this application note is to inform
prospective users of the CTMU for capacitive touch on
general usage guidelines, CTMU setup and software
algorithms, hardware and layout considerations, and
advanced capacitive touch applications, such as matrix
keys, sliders and multiple press keys.
The CTMU is currently available on selected PIC24
and PIC18F parts. Wherever possible, sample code for
both has been included.
All hardware examples used in this application note
directly pertain to the PICDEM™ Touch Sense 2
Demonstration Board (Part Number DM164128). The
PICDEM Touch Sense 2 Demo Board uses a PIC24F
device-based microcontroller (PIC24FJ256GB110).
This demo board is not necessary for understanding this
application note.
© 2009 Microchip Technology Inc.
GENERAL FEATURES OF THE CTMU
The CTMU is made up of a constant current source and
several logic blocks for it to operate:
• The constant current source is connected to the
A/D converter of the microcontroller.
• A switch connected to the CTMU constant current
source (and the A/D converter) is provided to
allow accumulated charge to be drained.
• Two external pins are provided to trigger the
constant current source.
• An output pin is also available for CTMU use.
For the purposes of capacitive touch, the external
pins for triggering the CTMU and the CTMU output
pin are not used.
The connection of the CTMU to the A/D converter is all
that is needed for capacitive touch applications. For a
more in-depth discussion on the CTMU module and
how it is used to measure charge or time, refer to the
CTMU chapter of the “PIC24F Family Reference Manual” for PIC24F microcontrollers, or the appropriate
data sheet for PIC18F microcontrollers on the
Microchip web site (http://www.microchip.com).
See Figure 1 for a block diagram of the CTMU hardware.
Note that there are a few slight differences in the CTMU
module from the PIC18F and the PIC24F. The PIC18F
CTMU module does not have an automatic ADC
conversion trigger. This is of no consequence for
capacitive touch applications. For clarity, the automatic
ADC trigger present on the PIC24F has not been used
in the sample code so that it more closely matches the
PIC18F code.
Also note that the CTMU on the PIC18F has different
internal trigger sources. (ECCP1 and ECCP2 for
PIC18F and Timer1 and OC1 for PIC24F). This is
mentioned purely for reference, and again, makes no
difference for capacitive touch applications. The sample
code listings in this application note manually set/clear
the EDG1STAT1 and/or EDG2STAT bits in the CTMU
control register for starting and stopping the CTMU
current source.
DS01250A-page 1
AN1250
FIGURE 1:
CTMU BLOCK DIAGRAM
CTMUCON
(CTMUCONH and CTMUCONL for PIC18F)
CTMUICON
Current Source
External Edge
Trigger Pins
CTMU
Control
Logic
Edge
Control
Logic
A/D Conversion
Trigger
(PIC24F only)
Current
Control
Timer1
(PIC24F only)
OC1
(PIC24F only)
ECCP1/ECCP2
(PIC18F only)
Pulse
Generation
Logic
A/D Converter
Pulse Output
Pin
Comparator 2 Input
Comparator 2
Output
DS01250A-page 2
© 2009 Microchip Technology Inc.
AN1250
OVERVIEW OF CAPACITIVE TOUCH
APPLICATIONS
The CTMU is used in capacitive touch applications by
applying the constant current source of the CTMU to
the capacitive touch pad using the following equation:
IxT=CxV
itance of the touch circuit will ultimately affect the
voltage that the circuit charges to in the fixed period.
The A/D converter is used to read the voltage that the
touch circuit is charged to with the CTMU.
When the capacitance of a human finger is added to
the touch sensor pad, the capacitance increases and
the result is a lowering of the voltage seen by the A/D
converter (since I and T are held constant).
Where:
Setting Up of the CTMU
• I is the constant current source of the CTMU
• T is a fixed period that the CTMU charges the
capacitive touch circuit
• C is the capacitance of the touch circuit
• V is the voltage read by the A/D converter after
the capacitive touch circuit is finished charging
It is possible to sense a relative shift in capacitance by
observing a change in voltage. The above equation can
be rearranged to:
V = (I x T)/C
Since the CTMU current source is constant (I), the
voltage present on the capacitive touch sensor (V)
relies on two variables: the amount of time the touch
circuit is charged (T) and the capacitive size of the
touch circuit (C). If the amount of time the touch circuit
is charged is held constant, then changes in the capac-
FIGURE 2:
For a capacitive touch application, each sensor must
be connected directly to a channel of the A/D converter.
See Figure 2 for a block diagram of a Microchip
microcontroller with a CTMU peripheral. This diagram
illustrates that the CTMU is internally connected to the
A/D converter and allows for selection of any of the A/D
channels. With this configuration, a single CTMU unit
can measure many capacitive touch sensors. Note that
the CTMU has been simplified in order to show only the
elements required for capacitive touch, namely the current source, the current source control and the current
drain mechanism. These will be explained in detail in
later sections. The current source control, labeled
“Trigger” in Figure 2, is manually controlled in software
by manipulating bits in the CTMU Control register.
CAPACITIVE TOUCH BLOCK DIAGRAM
Current Source
Trigger
Discharge
Sensor 0
CTMU
C A/D
A/D Converter
A/D MUX
© 2009 Microchip Technology Inc.
DS01250A-page 3
AN1250
The current source of the CTMU is available in three
ranges: 0.55 μA, 5.5 μA and 55 μA. The current range
selection is made in the CTMUICON register. The current precision for each of the three ranges is ±20%. For
many capacitive touch applications, the highest current
range setting (55 μA) works best. This allows for the
quickest charging of the capacitive touch circuit. The
CTMUICON register also has bits used to trim the
current source in ±2% increments up to ±62% for each
of the three current ranges.
The CTMU current source is enabled and disabled
using software. Two control bits, EDG1STAT and
EDG2STAT in the CTMU control register, determine if
the current source is enabled. These bits are exclusively ORed. That is, if EDG1STAT and EDG2STAT are
both set or cleared, the current source is off. If either bit
is set while the other is cleared, the current source is
enabled and charging the circuit.
The IDISSEN bit is enabled to drain charge from the
A/D converter to insure the charging process begins at
zero potential. If the bit is set, the circuit is connected to
VSS (grounded). Note that the discharge of the entire
circuit is not accomplished with this feature. This is
because the A/D converter is not always connected to
the external circuitry (i.e., touch sensor pad).
source is configured using the CTMUICON register.
For detailed information on the CTMU registers on the
PIC24F, refer to Section 11. “Charge Time Measurement Unit (CTMU)” of the “PIC24F Family Reference
Manual”.
The registers that control the CTMU on the PIC18F parts
are identical, with the exception that they are 8-bit
registers: CTMUCONH and CTMUCONL. The CTMU
also has different external trigger sources available,
namely the ECCP1 and ECCP2 Special Event Triggers.
For detailed information on the CTMU registers for
PIC18F, refer to the specific product data sheet.
See Example 1 for a typical setup of the required
CTMU and A/D converter registers. Note that the
CTMU has been configured so that the external pins
are not enabled. For the purposes of this application
note, all control of the CTMU is handled through
software. The A/D converter is set up to do manual
conversion.
For capacitive touch sensing, a relative change in
capacitance due to the presence of a finger is required.
The absolute measurement of capacitance is not
required.
Note:
The CTMU Configuration register (CTMUCON) is set
up so that the external triggers are not used (these pins
may be used for general purpose I/Os). The same is
true of the CTMU pulse output pin. The CTMU current
EXAMPLE 1:
All PIC18F code examples are written for
the PIC18F46J11 family. For other PIC18F
parts with the CTMU module, see the
device data sheet for specific CTMU
register configurations and CTMU usage.
CTMU AND A/D CONVERTER SETUP FOR PIC24F
//setup CTMU
//CTMUCON
CTMUCONbits.CTMUEN =
CTMUCONbits.CTMUSIDL =
CTMUCONbits.TGEN =
CTMUCONbits.EDGEN =
CTMUCONbits.EDGSEQEN =
CTMUCONbits.IDISSEN =
CTMUCONbits.CTTRIG =
CTMUCONbits.EDG2POL =
CTMUCONbits.EDG2SEL =
CTMUCONbits.EDG1POL =
CTMUCONbits.EDG1SEL =
0;
0;
0;
0;
0;
0;
0;
0;
0x3;
1;
0x3;
//CTMUICON
CTMUICON = 0x300;
CTMUICON.ITRIM = 0;
//make sure CTMU is disabled
//CTMU continues to run in idle mode
//disable edge delay generation mode of the CTMU
//edges are blocked
//edge sequence not needed
//Do not ground the current source
//Trigger Output is disabled
//Edge2 Src = OC1 (don’t care)
//Edge1 Src = Timer1 (don’t care)
//55uA
//Nominal - No Adjustment
//setup A/D converter
AD1PCFGL = 0x0000;
AD1CON1 = 0x0000;
AD1CHS =
0x0000;
AD1CSSL=0x0000;
AD1CON1bits.FORM = 0x0;
AD1CON3 = 0x0000;
AD1CON2 = 0x0000;
AD1CON1bits.ADON = 1;
CTMUCONbits.CTMUEN = 1;
DS01250A-page 4
//select the analog channel 0
//Unsigned fractional format
//bits.ADRC=0;
//Turn On A/D
//Enable CTMU
© 2009 Microchip Technology Inc.
AN1250
EXAMPLE 2:
CTMU AND A/D CONVERTER SETUP FOR PIC18F
//setup CTMU
//CTMUCON
CTMUCONHbits.CTMUEN = 0;
CTMUCONHbits.CTMUSIDL = 0;
CTMUCONHbits.TGEN = 0;
CTMUCONHbits.EDGEN = 0;
CTMUCONHbits.EDGSEQEN = 0;
CTMUCONHbits.IDISSEN = 0;
CTMUCONHbits.CTTRIG = 0;
CTMUCONLbits.EDG2POL = 0;
CTMUCONLbits.EDG2SEL = 0x0;
CTMUCONLbits.EDG1POL = 1;
CTMUCONLbits.EDG1SEL = 0x1;
//CTMUICON
CTMUICON = 0x03;
CTMUICON.ITRIM = 0;
//setup A/D converter
ANCON0bits.PCFG = 0x00;
ANCON1 = 0x0000;
ADCON0bits.CHS = 0x00;
ADCON1bits.ADFM = 0x00;
ADCON1bits.ADON = 1;
CTMUCONHbits.CTMUEN = 1;
//make sure CTMU is disabled
//CTMU continues to run in idle mode
//disable edge delay generation mode of the CTMU
//edges are blocked
//edge sequence not needed
//Do not ground the current source
//Trigger Output is disabled
//Edge2 Src = ECCP2 (don’t care)
//Edge1 Src = ECCP1 pin (don’t care)
//55uA
//Nominal - No Adjustment
//select the analog channel 0
//right justified result
//Turn On A/D
//Enable CTMU
In the case of the PIDEM Touch Sense 2 Demo Board,
all 16 A/D channels are used for capacitive touch. Reading of each of the sensor channels (A/D channels) is
controlled by Timer1. Timer1 is setup to fire at a 1 ms
interval. Each time that the Timer1 interrupt handler
runs, it increments the channel number of the A/D and
© 2009 Microchip Technology Inc.
the capacitive sensor connected to that channel is read.
After all 16 touch sensors have been read, the Timer1
interrupt handler sets a flag called, “dataReadyCTMU”,
and the main routine uses this flag to know when to
process the new data just gathered from all 16 capacitive
touch sensors.
DS01250A-page 5
AN1250
The software routine for reading each of the sensor
channels consists of the following 13 steps:
1.
2.
3.
4.
5.
6.
7.
8.
Set all of the A/D converter channels to digital
I/O pins and set them to logic zero (‘0’).
This has the effect of grounding all of the
capacitive touch sensor pads, so they are at
zero (0) volts potential.
Set the A/D channel to be read to an analog input.
Set the A/D converter to the selected channel.
Set the discharge bit, IDISSEN, of the CTMUCON
register.
This step insures that the internal capacitance of
the A/D converter starts at zero (0) volts potential.
Wait for charge to drain (a few NOPs).
Clear the discharge bit, IDISSEN.
Set the sample bit, SAMP (AD1CON1), to begin
sampling the selected channel (PIC24F only).
Set either of the edge status bits of the CTMU.
For PIC24F:
EDG1STAT OR EDG2STAT (CTMUCON) bits
For PIC18F:
EDG1STAT OR EDG2STAT (CTMUCONL) bits
FIGURE 3:
9.
10.
11.
12.
13.
This step turns on the CTMU current source to
the selected A/D channel and begins charging
the connected capacitive touch sensor.
Wait for a fixed period of time. For most capacitive
touch applications, this is approximately 2-10 μS.
In this case, the fixed time period is a loop set up
to do nothing until the allotted time has expired.
Clear the edge status bit that was set above.
For PIC24F:
EDG1STAT OR EDG2STAT (CTMUCON) bits
For PIC18F:
EDG1STAT OR EDG2STAT (CTMUCONL) bits
This step turns off the CTMU current source and
stops charging the connected capacitive touch
sensor.
Initiate an A/D conversion on the selected
channel:
a) On PIC24F, clear the SAMP bit (AD1CON1).
b) On PIC18F, set the GO/DONE bit (ADCON0).
Wait for the conversion to complete.
Store the value read by the A/D converter.
Figure 3 provides a software flowchart of the CTMU
capacitive touch sensor, reading as outlined above.
CTMU CAPACITIVE TOUCH SENSOR READ FLOWCHART
Start
Set all of ADC as
digital outputs (‘0’)
to insure all sensors
at zero potential
2
1
Wait for charge to
drain (a few NOPs)
5
Set selected ADC
channel to analog
Clear Discharge bit,
IDISSEN
6
Set ADC to sample
selected channel
4
3
Begin sampling by
setting the SAMP
bit of the ADC
(PIC24F only)
7
Set Discharge bit,
IDISSEN
Set the Edge 1
Status bit of the
CTMU (EDG1STAT)
Wait for the
Capacitive Touch
Circuit to charge
9
8
Clear Edge 1
Status bit of the
CTMU (EDG1STAT)
Start ADC
conversion by:
Clearing the SAMP
bit (PIC24F)
Setting GO/DONE
bit (PIC18F)
Wait for conversion to
to complete:
Wait for ADC Interrupt
flag (PIC24F)
Wait for GO/DONE = 0
(PIC18F)
Move the data
from the ADC
conversion to a
temporary variable
10
11
12
13
End
ADC Operation
CTMU Operation
DS01250A-page 6
© 2009 Microchip Technology Inc.
AN1250
Example 3 provides the equivalent code for reading the
capacitive touch sensors using the CTMU on a PIC24F
device. Example 4 has the same algorithm for a
PIC18F device. Note that the channel number being
read is referenced by the Index variable. The
ADSELECT array is setup to have the correct bits set for
EXAMPLE 3:
the corresponding Index variable so that the correct
channel is set to an analog A/D. The A/D value is
temporarily stored in the variable, immediateValue.
The LoopCount determines how long the CTMU
current source charges the capacitive touch circuit.
READING THE CAPACITIVE TOUCH SENSOR CIRCUIT SOFTWARE ALGORITHM
(PIC24F)
//Read CTMU (Get the raw sensor reading)
AD1PCFGL= 0xFFFF;
TRISB = 0x0000;
LATB = 0x0000;
PORTB = 0x0000;
Nop(); Nop(); Nop(); Nop();
Nop(); Nop(); Nop(); Nop();
//Wait for charge to drain
TRISB = ADSELECT[Index];
AD1PCFGL = ~ADSELECT[Index];
Nop(); Nop(); Nop(); Nop();
Nop(); Nop(); Nop(); Nop();
//wait for A/D to connect to channel
AD1CHS = Index;
CTMUCONbits.IDISSEN = 1;
Nop(); Nop(); Nop(); Nop(); Nop();
//Wait for charge to drain
CTMUCONbits.IDISSEN = 0;
IFS0bits.AD1IF
= 0;
AD1CON1bits.SAMP
= 1;
CTMUCONbits.EDG2STAT
= 0;
CTMUCONbits.EDG1STAT
= 1;
for (count = 0; count < loopCount; count++);
CTMUCONbits.EDG1STAT
= 0;
IFS0bits.AD1IF
= 0;
AD1CON1bits.SAMP
= 0;
while(!IFS0bits.AD1IF);
immediateValue = ADC1BUF0;
AD1CON1bits.SAMP
= 0;
IFS0bits.AD1IF
= 0;
AD1CON1bits.DONE
= 0;
//End of CTMU read
© 2009 Microchip Technology Inc.
//set all A/D channels to digital I/O pins
//set all channels to logical 0 outputs
//set selected channel to input
//set selected channel to analog A/D input
//select A/D channel
//Drain any charge on the A/D circuit
//Stop discharge of A/D circuit
//Make sure A/D interrupt flag = 0
//Manually start sampling
// Make sure edge2 is 0
// Set edge1 - Start Charge
// Delay for CTMU charge time
//Clear edge1 - Stop Charge
//Clear SAMP bit to begin manual A/D conversion
//Wait for the A/D conversion to finish
//Read the value from the A/D conversion
//Make sure A/D bits are cleared
DS01250A-page 7
AN1250
EXAMPLE 4:
READING THE CAPACITIVE TOUCH SENSOR CIRCUIT SOFTWARE ALGORITHM
(PIC18F)
//Read CTMU (Get the raw sensor reading)
ANCON0bits.PCFG= 0xFF;
ANCON1bits.PCFG= 0x1F;
TRISA = 0x00;
TRISB = 0x00;
TRISC = 0x00;
TRISE = 0x00;
LATA = 0x00;
LATB = 0x00;
LATC = 0x00;
LATE = 0x00;
PORTB = 0x00;
Nop(); Nop(); Nop(); Nop();
Nop(); Nop(); Nop(); Nop();
//Wait for charge to drain
TRISA = ADPASELECT[Index];
TRISB = ADPBSELECT[Index];
TRISC = ADPCSELECT[Index];
TRISE = ADPESELECT[Index];
ANCON0bits.PCFG = ~AD0SELECT[Index];
ANCON1bits.PCFG = ~AD1SELECT[Index];
Nop(); Nop(); Nop(); Nop();
Nop(); Nop(); Nop(); Nop();
//wait for A/D to connect to channel
ADCON0bits.CHS = Index;
CTMUCONHbits.IDISSEN = 1;
Nop(); Nop(); Nop(); Nop(); Nop();
//Wait for charge to drain
CTMUCONHbits.IDISSEN = 0;
Nop(); Nop();
CTMUCONLbits.EDG2STAT = 0;
CTMUCONLbits.EDG1STAT = 1;
for (count = 0; count < loopCount; count++);
CTMUCONLbits.EDG1STAT = 0;
AD1CON0bits.GODONE =
1;
while(ANCON0bits.GODONE);
immediateValue = ADRESH;
immediateValue = immediateValue << 8;
immediateValue = immediateValue + ADRESL;
//End of CTMU read
The main() function contains a while(1) loop
(endless) that checks for the dataReadyCTMU flag (set
by the Timer1 interrupt handler). If the dataReadyCTMU
flag is not set, other tasks are performed while it waits. In
the case of the PICDEM Touch Sense 2 Demo Board,
communication of data over the USB is serviced. If the
dataReadyCTMU flag is set, the main() function clears
the flag and calls the routines necessary to process the
newly acquired data. The main() function temporarily
disables Timer1 to insure that no new data is introduced
in the middle of the routines that are handling data
processing. After all processing of the capacitive touch
DS01250A-page 8
//set all A/D channels to digital I/O pins
//set all A/D channels to digital I/O pins
//set all channels to logical 0 outputs
//set selected channel to input
//set selected channel to analog A/D input
//select A/D channel
//Drain any charge on the A/D circuit
//Stop discharge of A/D circuit
// Make sure edge2 is 0
// Set edge1 - Start Charge
// Delay for CTMU charge time
//Clear edge1 - Stop Charge
//Set Go bit to begin A/D conversion
//Wait for the A/D conversion to finish
//Read the value from the A/D conversion
sensor data is complete, and the LED display information is also updated, Timer1 is re-enabled, and the whole
process begins again.
The structuring of the code in this manner is done to
make the system deterministic. Using a fixed timer to
read each capacitive touch sensor channel at a 1 ms
rate fixes the update rate to approximately 16 ms (1 ms
times 16 channels). The actual update rate is slightly
slower, since Timer1 is disabled while the new data is
processed.
© 2009 Microchip Technology Inc.
AN1250
IMPLEMENTATIONS OF SPECIAL
PURPOSE CAPACITIVE TOUCH
This section describes some of the special handling of
the data that is available from reading the capacitive
touch sensors using the CTMU. The following topics
are covered:
• Software algorithms for reliable touch operation
• Software algorithms for special purpose
capacitive touch sensor implementations
• Physical board properties for optimal capacitive
touch sensors
Software Algorithms for Reliable Touch
Operation
There are several software methods used to combat
problems with false sensing of capacitive touch sensing circuits. The following software algorithms are used
not only in the PICDEM Touch Sense 2 Demo Board,
but throughout all of the capacitive touch solutions
offered by Microchip.
• First method – This is to use a slow averaging
routine. This is implemented by simply adding the
value read for any capacitive touch sensor circuit
into a running average. The key to this method is
that a value is only added to the average at a rate
much slower than the actual rate that the
FIGURE 4:
capacitive touch sensor is being read. On the
PICDEM Touch Sense 2 Demo Board, for
example, the average is only updated on every
16th read of the capacitive sensor channel. Since
the update rate is 16 ms, the slower moving
average value is updated at a rate of 256 ms. This
slower moving value is then compared to the
immediate value. If the immediate value varies by
more than what has been established for the trip
point for that capacitive sensor, the sensor is
determined to be “pressed”, or touched. For more
information on the method of slow averaging,
refer to the specific averaging section in AN1103,
“Software Handling for Capacitive Sensing”.
• Second method – This is a debouncing routine.
This algorithm is very similar to that used for
debouncing of mechanical switches. In the case of
capacitive sensors, the debouncing acts as a noise
filtering mechanism. Since noise by definition is
non-periodic, it should not occur repetitively in
multiple sequential scans of a capacitive sensor
channel. Figure 4 provides the routine setup for
both a pressed and unpressed condition. It
requires three consecutive values of pressed or
unpressed before the actual state of the capacitive
touch sensor is ultimately determined. The value
can be changed to suit the application. It should be
noted that if a higher number is used, a slower
response time will be observed.
DEBOUNCE ALGORITHM FLOWCHART
Enter
Read Sensor
Yes
Unpressed_Count = 0
Pressed_Count
> = 3?
Sensor reading
pressed?
Yes
No
Pressed_Count = 0
Unpressed_Count
> = 3?
Yes
Unpressed
Pressed
No
No
Unpressed_Count ++
Pressed_Count ++
Exit
© 2009 Microchip Technology Inc.
DS01250A-page 9
AN1250
• Third method – This is used to improve capacitive
touch sensor reliability in oversampling. This
method takes advantage of the high-speed
capability of the CTMU. Using the PICDEM Touch
Sense 2 Demo Board as an example, each
reading of any of the 16 capacitive touch channels
takes approximately 12 μs. Since the scan rate
has been determined by Timer1 to be 1 ms, there
is sufficient time to reread the capacitive touch
sensor channel multiple times. The PICDEM
Touch Sense 2 Demo Board reads each channel
64 times. The sum of all 64 readings for the
channel is then divided by 64, and this final value
is used as the data used by all other software
routines in the application.
To use this method, a loop is added around the
routine that reads the capacitive touch sensor. The
sum of the reads is tallied for each iteration through
the loop, and at the end of all of the iterations, the
sum is divided by the number of times through the
loop (64 in this case). This routine has the effect of
a low-pass filter. Since the average value of
multiple readings is taken, a noise source that may
cause an incorrect reading is averaged in with
multiple correct readings and has a very minimal
effect on the overall value.
• Fourth method – This is similar to that used for
slow averaging. In this scenario, an array of
previously read values is kept, and when a new
value is read, it is introduced into the data array
and the oldest value is removed. The average
value of the array is used as the data value
passed to all of the other software routines in the
application. This method again causes a spurious
incorrect value to have only a slight impact on the
final value used. This routine is used on every
value read by the capacitive touch routine.
Note that the PICDEM Touch Sense 2 Demo Board
uses all of these methods combined to provide the
most reliable sensing solution.
Capacitive touch sensors can go beyond a simple
button that is pressed and released. In this section, we
will explore some different capacitive touch topologies,
such as multiple key press, paired button press, matrix
keyboard implementation and the use of capacitive
touch sensors as a slider.
Multiple Keys Press
Using software algorithms, it is possible to detect when
two or more buttons are simultaneously pressed. In a
multiple press scenario, the buttons are specifically
designed to allow for multiple presses. The physical
layout of the touch pad sensors is such that an area
exists for a single button press, and the button area is
DS01250A-page 10
extended to an area shared with an adjacent touch pad
sensor. The PICDEM Touch Sense 2 Demo Board has
an area designated as the “directional wheel”. This
area has four capacitive touch sensors laid out as the
four main ordinal compass directions (north, south,
east and west). Each of these sensors is extended to
an area equal to one half (1/2) of the main portion of the
sensor. These “dual” touch sensor areas make up four
more directions (northeast, southeast, southwest and
northwest). Each of the four main sensors also extends
to the center of the wheel, with each having one quarter
(1/4) of the area of the main portion of the sensor. A
“quad” touch sensor is then formed in the center. See
Appendix A: “PICDEM™ Touch Sense 2 Demo
Board”. Note that the cover plate is removed in
Figure A-2. The software algorithm now looks first for
all four sensors being pressed at approximately one
quarter (1/4) of the value of a single pressed key. If all
four are in range, it is determined that the center button
is pressed. Next, it looks for two adjacent keys pressed
at approximately one half (1/2) of a single pressed key.
Lastly, single key presses at a full level of the trip value
are checked. Using this multiple press setup, nine
distinct keys are created from only four capacitive
touch sensor inputs. The directional wheel works nicely
when a finger is moved around the wheel, either clockwise or counter-clockwise. It provides a smooth
fluid-like transition between the keys.
Capacitances for each of the sensors should be
matched as closely as possible, especially when considering that the software algorithm is searching for multiple
button presses. The trace lengths to each sensor and
adjacent sensors, LEDs and other board traces become
important. The CTMU current trimming capability is a
great aid in achieving a “level playing field” in this
respect. The PICDEM Touch Sense 2 Demo Board uses
this trimming capability to match up each of the four
sensors of the directional wheel.
This was done using a manual process, and each of the
A/D readings for the sensors was adjusted using the
CTMUICON register to slightly alter the CTMU current
source up or down so that the unpressed readings
matched. The adjusted values required for each channel
were then stored in an array, and the CTMUICON register was written to with a value that was selected from the
array to match the selected channel being read. This is
done for each channel and is applied to the CTMUICON
register at the beginning of the CTMU channel read
routine provided in Example 3.
Note:
For clarity, the code for CTMU current
adjustment is not included in the example
code, but may be found in the code listing for
the PICDEM Touch Sense 2 Demo Board.
© 2009 Microchip Technology Inc.
AN1250
Paired Keys Press
Matrix Keys Implementation
The paired keys press is similar to the multiple key
press with the exception that all of the combinations of
one half (1/2) are used. In Figure 5, it can be seen that
each button is made up of either a full circle single
touch pad, or two half (1/2) circle touch pads. The software for the paired press is similar to that used for the
multiple key press described above. The “half” pressed
keys are looked for first, and then single keys are
scanned for if no paired press keys are found. This
implementation has the distinction of generating
10 keys from only four capacitive touch sensor inputs.
It should be noted that it is somewhat difficult to
differentiate between two single keys being pressed
and a single paired press key.
Matrix keys use a set of capacitive touch sensors
arranged in rows and columns to provide a maximum
number of buttons or keys with respect to the number of
capacitive touch sensor inputs. The PICDEM Touch
Sense 2 Demo Board makes use of a matrix of four rows
by five columns (4 x 5) to implement a 20-key calculator
type keypad. Notice that the number of channels (9)
yields a total of 20 distinct keys. The number of possible
keys is the multiplication of the number of rows and
columns (4 x 5), while the number of channels required
is the sum of the number of rows plus the number of
columns (4 + 5). Appendix A: “PICDEM™ Touch
Sense 2 Demo Board” depicts the PICDEM Touch
Sense 2 Demo Board with the cover plate removed. The
keypad matrix is in the center of the board. Each key is
a unique combination of a row and a column of the
matrix. Each key is made up of two touch sensors
shaped as half circles, one half circle for the row and one
half circle for the column. See Figure 6 for a visual
example of a keypad matrix. The software algorithm for
the keypad matrix looks for a row pressed and a column
pressed, and decodes the key pressed. The software for
this implementation also looks for the most pressed row
and column. This is done since the proximity of the sensors can sometimes cause adjacent rows or columns to
cross the tripped threshold level. It is important to note
that using matrix keys causes the overall capacitance to
increase. For example, a matrix with four (4) rows will
have approximately two (2) times the capacitance of a
single sensor key of equal size. This factor becomes
important, since the software is looking for the relative
change in capacitance due to a finger on the capacitive
touch sensor key. Another key factor is that since the
rows and columns are very close to each of the actual
keys, capacitive coupling also increases the amount of
capacitance seen by each of the sensor inputs.
FIGURE 5:
PAIRED KEY PRESS
CAPACITIVE TOUCH
SENSOR KEYS
CTMU Channel: 1
2
3
4
It is important to keep the capacitances for each of the
rows and each of the columns matched as closely as
possible, especially when considering that the software
algorithm is searching for the “most pressed” row and
column. The trace lengths to each row/column and
adjacent sensors, LEDs and other board traces
become important. The CTMU current trimming capability, mentioned in the “Multiple Keys Press” section,
is applicable to the matrix keypad as well.
The difference between paired press and matrix keys is
that for the matrix, there is a key for each combination
of row and column, and for the paired press, there is a
key assigned to each capacitive touch channel and a
key assigned to each combination of two capacitive
touch channels.
© 2009 Microchip Technology Inc.
DS01250A-page 11
AN1250
FIGURE 6:
MATRIX KEY PRESS CAPACITIVE TOUCH SENSOR KEYS
C2
C1
C4
C3
R1
R1
R1
R1
R1
C1
C2
C3
C4
R2
R2
R2
R2
C1
C2
C3
C4
R3
R3
R3
R3
C1
C2
C3
C4
R2
R3
DS01250A-page 12
© 2009 Microchip Technology Inc.
AN1250
CAPACITIVE TOUCH SLIDER
The capacitive touch slider senses the position of a
finger along a strip of the circuit board. The area designated as the strip has two capacitive sensor channels,
each formed in the shape of a triangle (see Figure 7 and
Figure A-2). The schematic of the PICDEM Touch
Sense 2 Demo Board with the cover plate removed
shows the slider toward the right hand side of the board.
FIGURE 7:
SLIDER IMPLEMENTATION
COPPER PAD SHAPE
To Input Pin A
from the captured base value. The position of a finger
on the slider is then determined by the following
equations.
EQUATION 1:
Delta Left = (Captured Left Base Capacitance – Current Left Value)
Delta Right = (Captured Right Base Capacitance – Current Right Value
Since the left triangular sensor has its point at the
bottom of the slider, it is expected that the shift in
capacitance from a finger on the slider at the bottom will
be minimal, and maximum when a finger is positioned
at the top. The position of the left sensor (scaled for a
value of 0 to 100) is shown in Equation 2:
EQUATION 2:
Left Position = (Delta Left * 100)/(Delta Left + Delta Right)
Similarly, the right triangular sensor is large at the bottom
of the slider and a finger positioned at the bottom would
cause the largest shift in capacitance, while a finger at
the top of the slider would produce a minimum amount
of capacitance shift. The position of the right sensor
(again scaled for a value 0 to 100) is shown in
Equation 3:
EQUATION 3:
Right Position = ((1 – Delta Right) * 100)/(Delta Left + Delta Right))
To Input Pin B
Finally, the two values may be averaged for the final
position calculation:
EQUATION 4:
Note: Slider is not to scale.
Notice that the trace between the two triangular pads is
grounded. This trace provides additional isolation
between the two triangular capacitive touch sensors by
reducing the effect of capacitive coupling.
The slider works by reading the amount of shift in
capacitance from a normal untouched sensor. The slow
moving average described earlier is used to track the
untouched “base” capacitance of each of the two
sensors. When the value is shifted from this base value
to a value where the trip point is reached for either of
the two slider sensors, the base value is then locked
and the slow moving average is no longer used for
slider position calculations until the value of both slider
sensors is again above the trip threshold. The base
values for each of the two sensors is captured and
used for the slider position calculations. The software
algorithm then looks at the change in the slider value
© 2009 Microchip Technology Inc.
Position = (Left Position + Right Position)/2
It should also be noted that when neither the left nor
right slider has crossed the tripped value (base or
unpressed), the position is not calculated. This
prevents jitter between values that are displayed on the
slider LEDs.
To achieve maximum linearity and accuracy of the slider,
it is important to keep the capacitance for each of the
triangular sensors matched as closely as possible since
the software algorithm is using and comparing the
values for two triangular sensors. The trace lengths to
each triangular sensor and adjacent sensors, LEDs and
other board traces become important. The CTMU current trimming capability, mentioned in the “Multiple
Keys Press” section, is applicable to the slider sensors
as well.
DS01250A-page 13
AN1250
APPLICATION-SPECIFIC
CONSIDERATIONS
Capacitive Touch Covering (Overlay)
Considerations
Every application will have unique needs relative to its
capacitive touch features. Some of the factors include:
environment, response time, number and type of
capacitive touch sensors, and the number of other
tasks that the microcontroller is ultimately responsible
for (such as USB, graphics, I2C™, SPI, UART, etc).
The material and thickness of the covering over the
capacitive touch sensors is very significant. It determines how much of the capacitance of a human finger is
actually transmitted to the capacitive touch sensor.
Therefore, thinner is better than thicker. If a material is
too thin, it may not be mechanically sufficient to support
and protect the circuit board. The dielectric constant of
the material also is a determining factor. A higher
dielectric constant will give better results. Two common
materials used are PLEXIGLAS™ and tempered
window glass. PLEXIGLAS has a dielectric constant of
2.5-3.5, while window glass has a dielectric constant in
the range of 4-8. More information on the topic of
covering capacitive touch sensors can be found in
AN1102, “Layout and Physical Guidelines for Capacitive
Sensing”.
There are typically three common variables that affect
overall performance of capacitive touch sensors.
These are:
• Printed Circuit (PC) board layout including sensor
pad size, shape and proximity to other sensors
• Material and thickness of covering over the
capacitive touch sensors
• Noise susceptibility, both conducted and radiated
PC Board Layout
Basic considerations for PC Board (PCB) layout
include keeping traces as short as possible. Traces to
capacitive touch sensors should not run for long
lengths in parallel due to capacitive coupling effects.
The PICDEM Touch Sense 2 Demo Board was laid out
so that the most sensitive area (i.e., the matrix keypad)
was closest to the microprocessor, so that the traces
run to the capacitive sensors were the shortest, and
capacitance due to trace length was kept to a minimum.
The subject of board layout practice can be quite intricate; refer to AN1102, “Layout and Physical Guidelines
for Capacitive Sensing” for more information. The pad
shape, size and proximity to other sensors is also
covered in AN1102. The PICDEM Touch Sense 2
Demo Board uses a half inch (½") diameter pad with a
quarter inch (¼") spacing between adjacent sensors.
The matrix keypad uses half circle sensor pads that
have a ½" diameter. The directional wheel sensors
have a total area that is approximately double that of
the ½" diameter pads. This was required to allow the
double and quad button areas.
DS01250A-page 14
Noise Susceptibility
The existing noise, which affects capacitive touch applications, should always be considered. The factors
affecting how to protect against noise are very application-specific. The PICDEM Touch Sense 2 Demo Board,
for example, is open on both the front and back. A
hatched ground pattern was added to the back of the
board wherever possible to minimize the effects of noise
that could be introduced from the bottom of the board.
The cross hatched pattern provides a good path to
conduct unwanted noise to ground, and at the same
time, it does not cause an appreciable increase in the
capacitance of the touch sensors due to the coupling
effect of the sensor pad through the PC board material
to the ground plane.
Some applications may have a completely shielded
enclosure which would allow for less ground plane
added to the PC board. Another consideration is the
proximity of the capacitive touch sensors to other noise
producing circuitry on the board, such as communication
busses, inverting power supplies for back lighting displays, RF radio transmitters such as those used for Wi-Fi
or other radio based communications, and so on. In the
case of a radio transmitter and capacitive touch sensors,
it is best to read the buttons only when the RF transmitter
is disabled.
© 2009 Microchip Technology Inc.
AN1250
APPENDIX A:
PICDEM™ TOUCH SENSE 2 DEMO BOARD
Figure A-2 displays the PICDEM Touch Sense 2 Demo Board schematic with the cover plate removed.
FIGURE A-1:
PICDEM™ TOUCH SENSE 2 DEMO BOARD WITH COVER REMOVED
© 2009 Microchip Technology Inc.
DS01250A-page 15
DS01250A-page 16
BTN_3
BTN_2
S11
S7
S4
S1
+/-
MS
MR
MC
Slider
S14
BTN_5
S10
S8
S5
S2
0
1
4
7
S12
S9
S6
S3
BTN_9
BTN_10
BTN_6
.
2
5
8
BTN_7
S27
S25
S28
S26
+
3
6
9
RD10
RD9
RD8
RD5
BTN_8
S23
S21
S24
S22
R12
470
47
R31
47
R17
47
R16
47
R7
=
-
*
/
RD1
GRN
D57
D60
GRN
YEL
D49
D52
YEL
ORN
D43
D16
ORN
RED
D39
D12
RED
R13
470
RE8
RE7
RE6
RE5
RD2
47
R2
47
RED
D40
D13
RED
GRN
D59
D61
GRN
YEL
D51
D53
YEL
ORN
D44
D17
ORN
R10
47
R1
47
R6
D37
RED
D28
RED
D1
RED
R14
470
RD3
+/-
MS
MC
MC
D8
RED
GRN
D63
D62
GRN
YEL
D55
D54
YEL
ORN
D46
D45
ORN
RED
D41
D14
RED
R5
470
RE1
R15
470
0
1
4
7
RD4
D36
RED
D29
RED
D10
RED
D5
RED
GRN
D64
D58
GRN
YEL
D56
D50
YEL
ORN
D48
D47
ORN
RED
D42
D15
RED
R4
470
RE2
*
2
5
8
D35
RED
D30
RED
D7
RED
D4
RED
R9
470
RE3
+
3
6
9
D34
RED
D31
RED
D2
RED
D9
RED
R3
470
RE4
=
-
*
/
D33
RED
D32
RED
D3
RED
D6
RED
FIGURE A-2:
BTN_1
BTN_0
BTN_4
R8
470
RE0
AN1250
PICDEM™ TOUCH SENSE 2 DEMO BOARD SCHEMATIC (PAGE 1 OF 3)
© 2009 Microchip Technology Inc.
+3.3V
BZ1
.1 MF
C5
10K
R41
-
+
+5V
C2
.1 MF
+3.3V
1K
R24
C1
.1 MF
BTN_0
BTN_1
BTN_2
BTN_3
BTN_4
BTN_5
RE9
RE8
MCLR
BUZZ
RG6
RC4
RC3
RC2
RC1
RE7
RE6
RE5
25
24
23
22
21
20
19
18
17
16
15
14
13
12
11
10
9
8
7
6
5
4
3
2
1
RG15
RE2
AN0/SDI1/RB0
AN1/RB1
AN2/RB2
AN3/RB3
AN4/SDO1/RB4
AN5/SCK1/RB5
RE9
RE8
RA0
Vdd
Vss
PMPA2/RG9
MCLR
PMPA3/RG8
PMPA4/RG7
PMPA5/RG6
RC4
RC3
RC2
RC1
SDA3/PMPD7/RE7
SCL3/PMPD6/RE6
PMPD5/RE5
Vdd
AN6/SCK1/RB6
26
BTN_6
+3.3V
RE3
AN7/RB7
27
BTN_7
97
+3.3V
RE1
C13
.1 MF
RE0
93
RE4
100
RE4
99
RE3
98
RE2
VREF-/RA9
28
RG13
96
RG12
29
VREF+/RA10
30
AVdd
95
RG14
AVss
31
94
RE1
AN8/RB8
32
BTN_8
RE0
AN9/RB9
92
C3
U1
+3.3V
RD7
PIC24FJ256GB110
AN10/RB10
34
BTN_10
AN11/RB11
35
C6
.1 MF
BTN_11
Vss
36
Vdd
37
+3.3V
TCK/RA1
38
RF13
39
RF12
40
AN12/RB12
41
BTN_12
33
BTN_9
RA7
91
RA6
90
RG0
89
RG1
88
TC6/RF1
86
ENVREG
87
TC7/VBUSS/RF0
85
VCAP/VDDCORE
84
TC1/RD7
AN13/RB13
42
BTN_13
RD6
83
RD6
AN14/RB14
43
BTN_14
RD5
82
PMPRD/RD5
AN15/RB15
44
C7
.1 MF
+3.3V
BTN_15
RD4
45
RD13
PMPWR/RD4
81
RD12
Vss
80
RD13
Vdd
46
RD2
RD1
Vss
Vss
SCL1/RA14
SDA1/RA15
RD8
RD9
RD10
RD11
INT0/RD0
TA1/RC13
TA0/RC14
USBID
RF2
RF8
VBUS
VUSB
D-/RG3
D+/RG2
SCL2/RA2
SDA2/RA3
TDI/RA4
TDO/RA5
Vdd
OSC1/CLKI/RC12
OSC2/CLK0/RC15
RF4
79
RD12
RD3
RD15
48
RD14
47
78
TA5/RD3
77
TA4D/RD2
76
TA3/RD1
RF5
© 2009 Microchip Technology Inc.
49
RD10
51
52
53
54
55
56
57
VBUS
+3.3V
D-
C9
8 MHz
Y1
22 pF
C4
.1 MF
+3.3V
NL
R25
+3.3V
58
D+
OSC1
OSC2
RD8
RD9
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
22 pF
C10
OSC2
FIGURE A-3:
50
10 MF
AN1250
PICDEM™ TOUCH SENSE 2 DEMO BOARD SCHEMATIC (PAGE 2 OF 3)
DS01250A-page 17
DS01250A-page 18
PJ-002B
J4
2
3
1
BTN_15
BTN_12
D25
MRA4003
POWER
BTN_11
C15
+9V
.1 MF
5
4
3
2
1
3
47 MF
C14
D+
D-
VBUS
IN
1
GND
OUT
2
Southeast
RD7
D20
YEL
R20
470
+3.3V
LM1117IMP-5.0CT-ND
Optional (unpopulated)
6
Shield
D+
D-
VBUS
J3
mini-B
South
RD6
D19
GRN
R19
470
+3.3V
TP3
RC4
VSS
J1
PICkit 2
3
1
2
3
4
5
6
219-2MST
2
1
IN
1
GND
100
OUT
3
4
TP4
PGM2
PGM1
33 MF
C18
2
MCLR
Southwest
RD13
D26
YEL
R27
470
+3.3V
.1 MF
C27
+3.3V
Center
RG6
D38
RED
R30
470
+3.3V
PICkit 2 PROGRAM
HEADER FOR U1
+5V
NO CONNECT
PGM1
PGM2
GND
R18
MCP1702T-3302E/CB
BTN_7
BTN_6
ICSPCLK
ICSPDAT
West
RD12
D27
GRN
R28
470
+3.3V
PICkit™ 2 Program
Header for U1
Northwest
VDD
1 MF
MRA4003
D18
+3.3V
R26
470
D24
YEL
VPP
C26
+5V
North
RC3
D23
GRN
R23
470
+3.3V
C17
TP2
+5V
Northeast
RC2
D22
YEL
R22
470
+3.3V
.1 MF 47 MF
C16
MBR0520L
D11
East
RC1
D21
GRN
R21
470
+3.3V
Power
RE9
D65
YEL
R32
470
+3.3V
FIGURE A-4:
S20
BTN_13
BTN_14
AN1250
PICDEM™ TOUCH SENSE 2 DEMO BOARD SCHEMATIC (PAGE 3 OF 3)
© 2009 Microchip Technology Inc.
AN1250
APPENDIX B:
FIGURE B-1:
OSCILLOSCOPE TRACE
OSCILLOSCOPE TRACE OF CHARGING OF CAP SENSOR CIRCUIT
1
1
2
2
3
3
4
4
Legend: 1. CTMU Current Source OFF.
2. ADC Conversion takes place.
3. Discharge of Capacitive Sense Circuit.
4. CTMU Current Source ON.
© 2009 Microchip Technology Inc.
DS01250A-page 19
AN1250
CONCLUSION
REFERENCES
Microchip’s CTMU-based capacitive touch solutions
provide a reliable solution for the implementation of
capacitive touch and require minimal external hardware. The CTMU unit is fast and software needed for
operation is easy to set up, configure and integrate into
any application requiring capacitive touch.
• http://www.microchip.com/mTouch
• AN1103, “Software Handling for Capacitive
Sensing”
• AN1102, “Layout and Physical Guidelines for
Capacitive Sensing”
• “PICDEM™ Touch Sense 2 Demo Board User's
Guide” (DS51748)
• “Section 11. Charge Time Measurement Unit
(CTMU)” in the “PIC24F Family Reference
Manual” (DS39724)
DS01250A-page 20
© 2009 Microchip Technology Inc.
Note the following details of the code protection feature on Microchip devices:
•
Microchip products meet the specification contained in their particular Microchip Data Sheet.
•
Microchip believes that its family of products is one of the most secure families of its kind on the market today, when used in the
intended manner and under normal conditions.
•
There are dishonest and possibly illegal methods used to breach the code protection feature. All of these methods, to our
knowledge, require using the Microchip products in a manner outside the operating specifications contained in Microchip’s Data
Sheets. Most likely, the person doing so is engaged in theft of intellectual property.
•
Microchip is willing to work with the customer who is concerned about the integrity of their code.
•
Neither Microchip nor any other semiconductor manufacturer can guarantee the security of their code. Code protection does not
mean that we are guaranteeing the product as “unbreakable.”
Code protection is constantly evolving. We at Microchip are committed to continuously improving the code protection features of our
products. Attempts to break Microchip’s code protection feature may be a violation of the Digital Millennium Copyright Act. If such acts
allow unauthorized access to your software or other copyrighted work, you may have a right to sue for relief under that Act.
Information contained in this publication regarding device
applications and the like is provided only for your convenience
and may be superseded by updates. It is your responsibility to
ensure that your application meets with your specifications.
MICROCHIP MAKES NO REPRESENTATIONS OR
WARRANTIES OF ANY KIND WHETHER EXPRESS OR
IMPLIED, WRITTEN OR ORAL, STATUTORY OR
OTHERWISE, RELATED TO THE INFORMATION,
INCLUDING BUT NOT LIMITED TO ITS CONDITION,
QUALITY, PERFORMANCE, MERCHANTABILITY OR
FITNESS FOR PURPOSE. Microchip disclaims all liability
arising from this information and its use. Use of Microchip
devices in life support and/or safety applications is entirely at
the buyer’s risk, and the buyer agrees to defend, indemnify and
hold harmless Microchip from any and all damages, claims,
suits, or expenses resulting from such use. No licenses are
conveyed, implicitly or otherwise, under any Microchip
intellectual property rights.
Trademarks
The Microchip name and logo, the Microchip logo, Accuron,
dsPIC, KEELOQ, KEELOQ logo, MPLAB, PIC, PICmicro,
PICSTART, rfPIC, SmartShunt and UNI/O are registered
trademarks of Microchip Technology Incorporated in the
U.S.A. and other countries.
FilterLab, Linear Active Thermistor, MXDEV, MXLAB,
SEEVAL, SmartSensor and The Embedded Control Solutions
Company are registered trademarks of Microchip Technology
Incorporated in the U.S.A.
Analog-for-the-Digital Age, Application Maestro, CodeGuard,
dsPICDEM, dsPICDEM.net, dsPICworks, dsSPEAK, ECAN,
ECONOMONITOR, FanSense, In-Circuit Serial
Programming, ICSP, ICEPIC, Mindi, MiWi, MPASM, MPLAB
Certified logo, MPLIB, MPLINK, mTouch, PICkit, PICDEM,
PICDEM.net, PICtail, PIC32 logo, PowerCal, PowerInfo,
PowerMate, PowerTool, REAL ICE, rfLAB, Select Mode, Total
Endurance, WiperLock and ZENA are trademarks of
Microchip Technology Incorporated in the U.S.A. and other
countries.
SQTP is a service mark of Microchip Technology Incorporated
in the U.S.A.
All other trademarks mentioned herein are property of their
respective companies.
© 2009, Microchip Technology Incorporated, Printed in the
U.S.A., All Rights Reserved.
Printed on recycled paper.
Microchip received ISO/TS-16949:2002 certification for its worldwide
headquarters, design and wafer fabrication facilities in Chandler and
Tempe, Arizona; Gresham, Oregon and design centers in California
and India. The Company’s quality system processes and procedures
are for its PIC® MCUs and dsPIC® DSCs, KEELOQ® code hopping
devices, Serial EEPROMs, microperipherals, nonvolatile memory and
analog products. In addition, Microchip’s quality system for the design
and manufacture of development systems is ISO 9001:2000 certified.
© 2009 Microchip Technology Inc.
DS01250A-page 21
WORLDWIDE SALES AND SERVICE
AMERICAS
ASIA/PACIFIC
ASIA/PACIFIC
EUROPE
Corporate Office
2355 West Chandler Blvd.
Chandler, AZ 85224-6199
Tel: 480-792-7200
Fax: 480-792-7277
Technical Support:
http://support.microchip.com
Web Address:
www.microchip.com
Asia Pacific Office
Suites 3707-14, 37th Floor
Tower 6, The Gateway
Harbour City, Kowloon
Hong Kong
Tel: 852-2401-1200
Fax: 852-2401-3431
India - Bangalore
Tel: 91-80-3090-4444
Fax: 91-80-3090-4080
India - New Delhi
Tel: 91-11-4160-8631
Fax: 91-11-4160-8632
Austria - Wels
Tel: 43-7242-2244-39
Fax: 43-7242-2244-393
Denmark - Copenhagen
Tel: 45-4450-2828
Fax: 45-4485-2829
India - Pune
Tel: 91-20-2566-1512
Fax: 91-20-2566-1513
France - Paris
Tel: 33-1-69-53-63-20
Fax: 33-1-69-30-90-79
Japan - Yokohama
Tel: 81-45-471- 6166
Fax: 81-45-471-6122
Germany - Munich
Tel: 49-89-627-144-0
Fax: 49-89-627-144-44
Atlanta
Duluth, GA
Tel: 678-957-9614
Fax: 678-957-1455
Boston
Westborough, MA
Tel: 774-760-0087
Fax: 774-760-0088
Chicago
Itasca, IL
Tel: 630-285-0071
Fax: 630-285-0075
Dallas
Addison, TX
Tel: 972-818-7423
Fax: 972-818-2924
Detroit
Farmington Hills, MI
Tel: 248-538-2250
Fax: 248-538-2260
Kokomo
Kokomo, IN
Tel: 765-864-8360
Fax: 765-864-8387
Los Angeles
Mission Viejo, CA
Tel: 949-462-9523
Fax: 949-462-9608
Santa Clara
Santa Clara, CA
Tel: 408-961-6444
Fax: 408-961-6445
Toronto
Mississauga, Ontario,
Canada
Tel: 905-673-0699
Fax: 905-673-6509
Australia - Sydney
Tel: 61-2-9868-6733
Fax: 61-2-9868-6755
China - Beijing
Tel: 86-10-8528-2100
Fax: 86-10-8528-2104
China - Chengdu
Tel: 86-28-8665-5511
Fax: 86-28-8665-7889
Korea - Daegu
Tel: 82-53-744-4301
Fax: 82-53-744-4302
China - Hong Kong SAR
Tel: 852-2401-1200
Fax: 852-2401-3431
Korea - Seoul
Tel: 82-2-554-7200
Fax: 82-2-558-5932 or
82-2-558-5934
China - Nanjing
Tel: 86-25-8473-2460
Fax: 86-25-8473-2470
Malaysia - Kuala Lumpur
Tel: 60-3-6201-9857
Fax: 60-3-6201-9859
China - Qingdao
Tel: 86-532-8502-7355
Fax: 86-532-8502-7205
Malaysia - Penang
Tel: 60-4-227-8870
Fax: 60-4-227-4068
China - Shanghai
Tel: 86-21-5407-5533
Fax: 86-21-5407-5066
Philippines - Manila
Tel: 63-2-634-9065
Fax: 63-2-634-9069
China - Shenyang
Tel: 86-24-2334-2829
Fax: 86-24-2334-2393
Singapore
Tel: 65-6334-8870
Fax: 65-6334-8850
China - Shenzhen
Tel: 86-755-8203-2660
Fax: 86-755-8203-1760
Taiwan - Hsin Chu
Tel: 886-3-572-9526
Fax: 886-3-572-6459
China - Wuhan
Tel: 86-27-5980-5300
Fax: 86-27-5980-5118
Taiwan - Kaohsiung
Tel: 886-7-536-4818
Fax: 886-7-536-4803
China - Xiamen
Tel: 86-592-2388138
Fax: 86-592-2388130
Taiwan - Taipei
Tel: 886-2-2500-6610
Fax: 886-2-2508-0102
China - Xian
Tel: 86-29-8833-7252
Fax: 86-29-8833-7256
Thailand - Bangkok
Tel: 66-2-694-1351
Fax: 66-2-694-1350
Italy - Milan
Tel: 39-0331-742611
Fax: 39-0331-466781
Netherlands - Drunen
Tel: 31-416-690399
Fax: 31-416-690340
Spain - Madrid
Tel: 34-91-708-08-90
Fax: 34-91-708-08-91
UK - Wokingham
Tel: 44-118-921-5869
Fax: 44-118-921-5820
China - Zhuhai
Tel: 86-756-3210040
Fax: 86-756-3210049
01/16/09
DS01250A-page 22
© 2009 Microchip Technology Inc.