AN2030

AN2030
Auto-Calibration of Internal Oscillator Using Signal Measurement
Timer (SMT)
Author:
THEORY OF OPERATION
Elvin Hayes Gentiles
Microchip Technology Inc.
The application uses an external clock as the reference
for calibration. This reference clock serves as the input
signal for the SMT. The SMT is a 24-bit counter/timer
which can be configured for measuring a variety of
digital signal parameters such as pulse width,
frequency, duty cycle, and time difference between the
edges of two signals. For more information about the
SMT, see TB3129, Signal Measurement Timer on PIC®
Microcontrollers (DS90003129).
INTRODUCTION
This application note describes a technique used to
auto-calibrate, within ±1%, the internal oscillator of 8-bit
PIC® microcontrollers using the Signal Measurement
Timer (SMT) peripheral. Typically, the internal oscillator
is factory calibrated at ambient temperatures.
However, temperature variations and different
operating environments can affect the accuracy of the
internal oscillator. Thus, a calibration is useful to
compensate the effect of temperature variations and to
gain higher accuracy in timing-related applications
such as serial communication.
The SMT uses the internal oscillator as the clock
source and operates in Period and Duty Cycle
Acquisition mode. In this mode, either the duty cycle or
the period of the input signal can be measured relative
to the SMT clock. This means that the calibration
method counts the number of SMT clock periods within
a single reference clock period. For example, if the
reference clock is running at 200 Hz and the SMT clock
uses a 1 MHz internal oscillator, then the number of
periods is equal to 500, (using Equation 1).
The code used in this application note was developed
using PIC12F1612. However, with minor changes, this
code can be ported over to any device with the SMT
peripheral.
Note:
EQUATION 1:
Visit www.microchip.com for products with
SMT peripheral.
Clock
SMT
No. of Periods = ----------------------------------------Clock reference
Devices without the SMT could also be calibrated using
other methods, such as the use of Timer0 or Timer1.
For more details about these calibration methods, refer
to AN244, Internal RC Oscillator Calibration (DS00244)
or AN250, Auto-calibration of the PIC12F6XX Internal
RC Oscillator to ±1% (DS00250).
TABLE 1:
Reference
Clock
(Hz)
NUMBER OF PERIODS
To calibrate the internal oscillator within ±1% tolerance,
a known range of calculated periods must be
established. Table 1 shows the range of calculated
periods using different reference and SMT clocks. The
minimum and maximum calculated number of periods
was derived using Equation 2.
RANGE OF CALCULATED PERIODS
Calculated Number of Periods
CLKSMT = 500 kHz
CLKSMT = 1 MHz
CLKSMT = 4 MHz
Min.
Exact
Max.
Min.
Exact
Max.
Min.
Exact
Max.
1
495000
500000
505000
990000
1000000
1010000
3960000
4000000
4040000
5
99000
100000
101000
198000
200000
202000
792000
800000
808000
20
24750
25000
25250
49500
50000
50500
198000
200000
202000
50
9900
10000
10100
19800
20000
20200
79200
80000
80800
100
4950
5000
5050
9900
10000
10100
39600
40000
40400
250
1980
2000
2020
3960
4000
4040
15840
16000
16160
500
990
1000
1010
1980
2000
2020
7920
8000
8080
1000
495
500
505
990
1000
1010
3960
4000
4040
 2015 Microchip Technology Inc.
DS00002030A-page 1
AN2030
EQUATION 2:
CALIBRATION METHOD
MINIMUM AND MAXIMUM
NUMBER OF PERIODS
Figure 1 shows the test circuit used in this application.
An external reference clock, which serves as the input
signal of the SMT, is connected on the SMTSIG2 pin of
the device. The calibration starts by capturing the
number of SMT clock periods within a single period of
the reference clock. If the program determines that the
captured number of periods is within the range, then no
calibration is needed. If not, then the program will
check if the captured number of periods is greater than
the maximum calculated number of periods, or less
than the minimum calculated number of periods. If the
internal oscillator is running faster than the specified
tolerance, the program will decrement the value of
OSCTUNE by one. Otherwise, if the internal oscillator
is running slower than the specified tolerance, the
program will increment the value of OSCTUNE by one.
The Oscillator Tuning Range (OSCTUNE) register
contains a 6-bit value that can adjust the internal
oscillator within a range of ±12% of the selected
frequency. For more details about the OSCTUNE
register, refer to the device data sheet. The changes in
the internal oscillator can be monitored via the
CLKOUT pin of the device. The flowchart in Figure 2
shows the calibration process used in this application
note.
1.01  Clock SMT
No. of Periods
= ------------------------------------------max
Clock reference
0.99  Clock
SMT
No. of Periods min = ------------------------------------------Clock reference
Note:
The value of the SMT clock must be
several times larger than the value of the
reference clock.
FIGURE 1:
TEST CIRCUIT
VDD
1
PIC12F1612
8
VSS
FIRMWARE
CLKOUT
3
4
DS00002030A-page 2
7
SMT
SMTxCLK
Internal
Oscillator
SMTxSIG
2
6
5
SMTSIG2
External Reference Clock
 2015 Microchip Technology Inc.
AN2030
FIGURE 2:
CALIBRATION PROCESS FLOW DIAGRAM
Start
Initialize the Device
Start Capturing
Period using SMT
Is the Captured Period
within the range?
Yes
No
Yes
Is Captured Period
greater than the
Maximum Calculated
Period?
Decrease
OSCTUNE
No
Increase
OSCTUNE
Calibration Done
 2015 Microchip Technology Inc.
DS00002030A-page 3
AN2030
SMT CONFIGURATION USING
MPLAB® CODE CONFIGURATOR
(MCC)
This section shows how to configure the device and the
SMT using MPLAB® Code Configurator (MCC). MCC
is a free and user-friendly plug-in for MPLAB® X IDE
that generates drivers and libraries for controlling and
driving peripherals of PIC® microcontrollers, based on
the settings and selections made in its Graphical User
Interface (GUI). For more information on how to install
and setup MCC, refer to “MPLAB® Code Configurator
User’s Guide” (DS40001725). The following steps
show how to configure the device and the SMT on
PIC12F1612 using MCC:
1.
2.
3.
Go to Tools > Embedded > MPLAB Code
Configurator to launch the MCC.
Click the System under the Project Resources
panel. Set the System Clock Select to INTOSC,
choose the Internal Clock that you want to
calibrate, and enable the CLKOUT function
under CONFIG1 (See Figure 3). The CLKOUT
function is used to monitor the changes in the
internal oscillator while calibrating.
In the Device Resources panel, expand the
SMT>SMT2 tree view and double click on
Synchronous to load the peripheral in the
Project Resources panel.
FIGURE 3:
4.
5.
Click SMT2::Synchronous to configure the
SMT2 peripheral. Set the Operation mode to
Period and Duty-Cycle Acquisition and
choose Repeat for the Data Acquisition. In the
Pin Manager Area, click the Lock icon under
column PORTA2, row SMT2SIG, to set RA2 as
the input pin for the SMT signal. Input pins vary
depending on the device used, so it is
recommended to consult the device data sheet.
Be sure that the Enable SMT is checked, the
Clock Select is set to FOSC, and the Signal
Select is set to SMTxSIG (See Figure 4).
Click the Generate Code button. This will
automatically generate a main.c file with an
empty while(1) loop for custom code entry. It
will also initialize the device and the peripheral
used in the project. Example 1 shows the
generated code for the SMT peripheral.
MCC: SYSTEM SETTING
DS00002030A-page 4
 2015 Microchip Technology Inc.
AN2030
FIGURE 4:
MCC: SMT2 SYNCHRONOUS SETTING
 2015 Microchip Technology Inc.
DS00002030A-page 5
AN2030
Software License Agreement
The software supplied herewith by Microchip Technology Incorporated (the “Company”) is intended and supplied to you, the
Company’s customer, for use solely and exclusively with products manufactured by the Company.
The software is owned by the Company and/or its supplier, and is protected under applicable copyright laws. All rights are reserved.
Any use in violation of the foregoing restrictions may subject the user to criminal sanctions under applicable laws, as well as to civil
liability for the breach of the terms and conditions of this license.
THIS SOFTWARE IS PROVIDED IN AN “AS IS” CONDITION. NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. THE COMPANY SHALL NOT, IN ANY CIRCUMSTANCES, BE LIABLE FOR
SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES, FOR ANY REASON WHATSOEVER.
EXAMPLE 1:
MCC GENERATED CODE FOR SMT
void SMT2_Initialize(void) {
// CPOL rising edge; EN enabled; SPOL high/rising edge enabled; SMT2PS 1:1 Prescaler; STP
rolls over to 24'h000000; WPOL high/rising edge enabled;
SMT2CON0 = 0x80;
// SMT2GO disabled; SMT2MODE Period and Duty-Cycle Acquisition; SMT2REPEAT Repeat Data
Acquisition;
SMT2CON1 = 0x42;
// SMT2TS not incrementing; RST SMT2TMR2 update complete; SMT2WS closed; SMT2CPWUP SMT2CPW2
update complete; SMT2CPRUP SMT2PR2 update complete; SMT2AS acquisition not in progress;
SMT2STAT = 0x00;
// SMT2CSEL FOSC;
SMT2CLK = 0x00;
// SMT2WSEL SMTWINx;
SMT2WIN = 0x00;
// SMT2SSEL SMTxSIG;
SMT2SIG = 0x00;
// SMT2PR16 0x0;
SMT2PRU = 0x00;
// SMT2PR8 0x0;
SMT2PRH = 0x00;
// SMT2PR0 0x0;
SMT2PRL = 0x00;
}
void SMT2_DataAcquisitionEnable(void) {
// Start the SMT module by writing to SMTxGO bit
SMT2CON1bits.SMT2GO = 1;
}
void SMT2_DataAcquisitionDisable(void) {
// Start the SMT module by writing to SMTxGO bit
SMT2CON1bits.SMT2GO = 0;
}
void SMT2_HaltCounter(void) {
SMT2CON0bits.STP = 1;
}
DS00002030A-page 6
 2015 Microchip Technology Inc.
AN2030
EXAMPLE 1:
MCC GENERATED CODE FOR SMT (CONTINUED)
void SMT2_SetPeriod(uint32_t periodVal) {
// Write to the SMT2 Period registers
SMT2PRU = (periodVal >> 16);
SMT2PRH = (periodVal >> 8);
SMT2PRL = periodVal;
}
uint32_t SMT2_GetPeriod() {
return (SMT2PR);
}
void SMT2_SingleDataAcquisition(void) {
SMT2CON1bits.SMT2REPEAT = 0;
void SMT2_RepeatDataAcquisition(void) {
SMT2CON1bits.SMT2REPEAT = 1;
}
void SMT2_ManualPeriodBufferUpdate(void) {
SMT2STATbits.SMT2CPRUP = 1;
}
void SMT2_ManualPulseWidthBufferUpdate(void) {
SMT2STATbits.SMT2CPWUP = 1;
}
void SMT2_ManualTimerReset(void) {
SMT2STATbits.RST = 1;
}
bool SMT2_IsWindowOpen(void) {
return (SMT2STATbits.SMT2WS);
}
bool SMT2_IsSignalAcquisitionInProgress(void) {
return (SMT2STATbits.SMT2AS);
}
bool SMT2_IsTimerIncrementing(void)
{
return (SMT2STATbits.SMT2TS);
}
uint32_t SMT2_GetCapturedPulseWidth() {
return (SMT2CPW);
}
uint32_t SMT2_GetCapturedPeriod() {
return (SMT2CPR);
}
uint32_t SMT2_GetTimerValue() {
return (SMT2TMR);
}
CONCLUSIONS
This application note shows a method to auto-calibrate
the internal oscillator of the 8-bit PIC microcontrollers.
It also provides the calculations of relevant values such
as the number of periods. The Signal Measurement
Timer (SMT) provides an easy way to calibrate the
internal oscillator within ±1% tolerance. The
configuration of SMT is demonstrated using the
MPLAB® Code Configurator (MCC).
 2015 Microchip Technology Inc.
DS00002030A-page 7
AN2030
APPENDIX A:
SOURCE CODE
LISTING
The latest version can be downloaded from the
Microchip website (http://www.microchip.com/). The
user will find the source code appended to the
electronic version of this application note.
DS00002030A-page 8
APPENDIX B:
REVISION HISTORY
Revision A (12/2015)
Initial Release of Document.
 2015 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 unless otherwise stated.
Trademarks
The Microchip name and logo, the Microchip logo, dsPIC,
FlashFlex, flexPWR, JukeBlox, KEELOQ, KEELOQ logo, Kleer,
LANCheck, MediaLB, MOST, MOST logo, MPLAB,
OptoLyzer, PIC, PICSTART, PIC32 logo, RightTouch, SpyNIC,
SST, SST Logo, SuperFlash and UNI/O are registered
trademarks of Microchip Technology Incorporated in the
U.S.A. and other countries.
The Embedded Control Solutions Company and mTouch are
registered trademarks of Microchip Technology Incorporated
in the U.S.A.
Analog-for-the-Digital Age, BodyCom, chipKIT, chipKIT logo,
CodeGuard, dsPICDEM, dsPICDEM.net, ECAN, In-Circuit
Serial Programming, ICSP, Inter-Chip Connectivity, KleerNet,
KleerNet logo, MiWi, motorBench, MPASM, MPF, MPLAB
Certified logo, MPLIB, MPLINK, MultiTRAK, NetDetach,
Omniscient Code Generation, PICDEM, PICDEM.net, PICkit,
PICtail, RightTouch logo, REAL ICE, SQI, Serial Quad I/O,
Total Endurance, TSHARC, USBCheck, VariSense,
ViewSpan, WiperLock, Wireless DNA, 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.
Silicon Storage Technology is a registered trademark of
Microchip Technology Inc. in other countries.
GestIC is a registered trademark of Microchip Technology
Germany II GmbH & Co. KG, a subsidiary of Microchip
Technology Inc., in other countries.
All other trademarks mentioned herein are property of their
respective companies.
© 2015, Microchip Technology Incorporated, Printed in the
U.S.A., All Rights Reserved.
ISBN: 978-1-5224-0057-8
QUALITY MANAGEMENT SYSTEM
CERTIFIED BY DNV
== ISO/TS 16949 ==
 2015 Microchip Technology Inc.
Microchip received ISO/TS-16949:2009 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.
DS00002030A-page 9
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://www.microchip.com/
support
Web Address:
www.microchip.com
Asia Pacific Office
Suites 3707-14, 37th Floor
Tower 6, The Gateway
Harbour City, Kowloon
China - Xiamen
Tel: 86-592-2388138
Fax: 86-592-2388130
Austria - Wels
Tel: 43-7242-2244-39
Fax: 43-7242-2244-393
China - Zhuhai
Tel: 86-756-3210040
Fax: 86-756-3210049
Denmark - Copenhagen
Tel: 45-4450-2828
Fax: 45-4485-2829
India - Bangalore
Tel: 91-80-3090-4444
Fax: 91-80-3090-4123
France - Paris
Tel: 33-1-69-53-63-20
Fax: 33-1-69-30-90-79
India - New Delhi
Tel: 91-11-4160-8631
Fax: 91-11-4160-8632
Germany - Dusseldorf
Tel: 49-2129-3766400
Atlanta
Duluth, GA
Tel: 678-957-9614
Fax: 678-957-1455
Hong Kong
Tel: 852-2943-5100
Fax: 852-2401-3431
Australia - Sydney
Tel: 61-2-9868-6733
Fax: 61-2-9868-6755
China - Beijing
Tel: 86-10-8569-7000
Fax: 86-10-8528-2104
Austin, TX
Tel: 512-257-3370
China - Chengdu
Tel: 86-28-8665-5511
Fax: 86-28-8665-7889
Boston
Westborough, MA
Tel: 774-760-0087
Fax: 774-760-0088
China - Chongqing
Tel: 86-23-8980-9588
Fax: 86-23-8980-9500
Chicago
Itasca, IL
Tel: 630-285-0071
Fax: 630-285-0075
Cleveland
Independence, OH
Tel: 216-447-0464
Fax: 216-447-0643
Dallas
Addison, TX
Tel: 972-818-7423
Fax: 972-818-2924
Detroit
Novi, MI
Tel: 248-848-4000
Houston, TX
Tel: 281-894-5983
Indianapolis
Noblesville, IN
Tel: 317-773-8323
Fax: 317-773-5453
Los Angeles
Mission Viejo, CA
Tel: 949-462-9523
Fax: 949-462-9608
New York, NY
Tel: 631-435-6000
San Jose, CA
Tel: 408-735-9110
Canada - Toronto
Tel: 905-673-0699
Fax: 905-673-6509
China - Dongguan
Tel: 86-769-8702-9880
China - Hangzhou
Tel: 86-571-8792-8115
Fax: 86-571-8792-8116
India - Pune
Tel: 91-20-3019-1500
Japan - Osaka
Tel: 81-6-6152-7160
Fax: 81-6-6152-9310
Japan - Tokyo
Tel: 81-3-6880- 3770
Fax: 81-3-6880-3771
Korea - Daegu
Tel: 82-53-744-4301
Fax: 82-53-744-4302
China - Hong Kong SAR
Tel: 852-2943-5100
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-8864-2200
Fax: 86-755-8203-1760
Taiwan - Hsin Chu
Tel: 886-3-5778-366
Fax: 886-3-5770-955
China - Wuhan
Tel: 86-27-5980-5300
Fax: 86-27-5980-5118
Taiwan - Kaohsiung
Tel: 886-7-213-7828
China - Xian
Tel: 86-29-8833-7252
Fax: 86-29-8833-7256
Germany - Karlsruhe
Tel: 49-721-625370
Germany - Munich
Tel: 49-89-627-144-0
Fax: 49-89-627-144-44
Italy - Milan
Tel: 39-0331-742611
Fax: 39-0331-466781
Italy - Venice
Tel: 39-049-7625286
Netherlands - Drunen
Tel: 31-416-690399
Fax: 31-416-690340
Poland - Warsaw
Tel: 48-22-3325737
Spain - Madrid
Tel: 34-91-708-08-90
Fax: 34-91-708-08-91
Sweden - Stockholm
Tel: 46-8-5090-4654
UK - Wokingham
Tel: 44-118-921-5800
Fax: 44-118-921-5820
Taiwan - Taipei
Tel: 886-2-2508-8600
Fax: 886-2-2508-0102
Thailand - Bangkok
Tel: 66-2-694-1351
Fax: 66-2-694-1350
07/14/15
DS00002030A-page 10
 2015 Microchip Technology Inc.
Similar pages