AN3031
AN3031
AN3031
Introduction
1 2
Contents
Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 Basic Temperature Sensor Reading . . . . . . . . . . . . . . . . 2 2.1 Using Typical Parameters Provided by the Data Sheet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 Optimizing the Temperature Sensor . . . . . . . . . . . . . . . . 5 3.1 Calibration: . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 3.2 Bold Digital Filtering. . . . . . . . . . . . . . . . . . . . . . . . . 6 Processor Expert Floating-Point Implementation . . . . . . 6 4.1 Averaging ADC Readings . . . . . . . . . . . . . . . . . . . . 7 4.2 Using the Approximate Transfer Function . . . . . . . 8 Fixed-Point Approximation . . . . . . . . . . . . . . . . . . . . . . . 8 5.1 Calculating VDD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 5.2 Fixed-Pointed Calculations . . . . . . . . . . . . . . . . . . 13 5.3 Initialization Flowcharts . . . . . . . . . . . . . . . . . . . . . 15
This document explains how to use the temperature sensor available in the analog-to-digital converter (S08ADCV1) peripheral of the HCS08 family of devices. Devices in this family use the high performance HCS08 core and are ideal for a range of applications such as: Small appliances Security systems Handheld devices Control systems This document provides information on how to perform a basic temperature reading, shows example code that demonstrates a temperature reading, and examines methods for optimizing the accuracy of this temperature sensor.
The outstanding HCS08 ADC peripheral contains numerous features: Linear successive approximation algorithm with 10-bit resolution Up to 28 analog inputs Output formatted in 10- or 8-bit right-justified format Single or continuous conversion (automatic return to idle after single conversion) Configurable sample time and conversion speed/power Conversion complete flag and interrupt Input clock selectable from up to four sources Operation in wait or stop modes for lower noise operation Asynchronous clock source for lower noise operation Selectable asynchronous hardware conversion trigger Automatic compare with interrupt for less-than, greater-than, or equal-to programmable value The automatic compare with interrupt and operation in low-power modes features add unique functionality to this ADC peripheral. ADC also contains an on-chip temperature sensor connected to one of the ADC channel inputs. This allows the MCU to monitor the board temperature and take action such as: Enter a low power mode to reduce excess battery drain at high temperatures Adjust calibration tables for temperature dependant sensors Shut down system loading to prevent damage to mechanical components
The SO8ADC module has a P-N transistor junction with temperature dependent properties acting as an embedded temperature sensor. The voltage across this junction rises or lowers with temperature allowing silicon to act as a temperature sensor. Figure 1 shows the typical ADC readings of the temperature sensor output across a range of temperatures.
Temperature Sensor for the HCS08 Microcontroller Family, Rev. 1 2 Freescale Semiconductor
Basic Temperature Sensor Reading 500 450 400 350 ADC (Decimal) 300 250 200 150 100 50 1.9 V 2.4 V 3.0 V 3.6 V
60
40
20
0 0 20 40
Temp (Degrees C)
60
80
100
120
140
The graph shows that the temperature sensor output is linear and dependant on VDD. The temperature sensor output voltage is highest at cold temperatures and lowest at hot temperatures. For VDD = 3 V, the readings range from 277d at 40C down to 176d at 130C. An approximate transfer function demonstrated in the following sections represents this behavior. The temperature sensor reading most accurately represents the temperature of the die and, due to proximity, the leads and the PCB board connected to it. For many applications, the desired temperature may differ from the dies temperature. For example, the die temperature can differ from the temperature of a rooms air flow. Using calibration methods can make approximations of this delta. Some conditions will require special considerations, such as if the PCB board and the parameter that the application measures have different temperatures. These scenarios have many different solutions. Resolve this scenario by thermally connecting the IC to the target with epoxy or placing the IC as near as possible to the monitored element. Calibration aids in modifying the issue of temperature offset. Correct calibration will ensure that the target elements temperature, as opposed to the die, will correlate to the resulting temperature sensor voltage readings. In this way, you can understand and account for the offset due to location. The following sections further discuss calibration benefits.
2.1
Use the typical parameters provided by the HCS08 data sheet to perform a temperature reading. An approximate transfer function describes the temperature sensor.
Temperature Sensor for the HCS08 Microcontroller Family, Rev. 1 Freescale Semiconductor 3
Eqn. 1
Where: VTEMP is the voltage of the temperature sensor channel at the ambient temperature VTEMP25 is the voltage of the temperature sensor channel at 25C and VDD = 3 V m is the hot or cold voltage versus temperature slope in V/C The parameter m is different for the hot or the cold slope of the equation. Hot slope parameter m applies to readings greater than 25C Cold slope parameter m applies to readings less than 25C
In the electrical characteristics section of some data sheets, typical parameters are provided for VTEMP25 and m (both hot and cold slope). These parameters perform a temperature reading according to the flowchart shown in Figure 2. For this example, parameters from the MC9S08QG8 data sheet were used.
Initialize
Cold Slope Is
Hot Slope
V TEMP V TEMP25
Yes ? No
m = 1.646
m = 1.769
Calculate
As shown in this implementation, software initializes the ADC; next, an ADC reading of the temperature sensor is completed. Based on this reading, a decision is made to use the cold or the hot slope parameter. Finally, the calculation is performed. Floating-point math facilitates the temperature calculations. The software files accompanying this application note show both a floating point and a non-floating point implementation of this flowchart using C code. Both implementations have benefits and drawbacks.
Temperature Sensor for the HCS08 Microcontroller Family, Rev. 1 4 Freescale Semiconductor
You can receive the most accuracy from the temperature sensor in many ways. 1. Analog-to-digital Configuration Configure the analog-to-digital for long sample time and a maximum of 1MHz ADC CLK. Use a MCU low power mode to do an analog-to-digital reading. Wait or preferably stop mode reduces the effect of internal MCU noise on the temperature sensor reading. 2. Averaging ADC readings as demonstrated in the Processor Expert example. Averaging is the most basic of digital filtering techniques and can reduce the effect system noise on ADC readings. This smooths the temperature sensor input and increases the effective resolution of the analog-to-digital converter. 3. Determine a current reading of VDD by using the bandgap voltage to calculate VDD. Using a current value of VDD more accurately represents VTEMP25 and VTEMP. This leads to a better result for the approximate transfer function. 4. A floating-point implementation results in more accurate math when using the approximate transfer function if you can spare the code space.
3.1
Calibration
Along with the methods listed, there are other ways to improve accuracy. Ideally, the final application would use the data shown in Figure 1. You could store this data in the MCU as a look-up table. With this method, each ADC reading of the temperature sensor would correlate to a temperature. For example, the data in the graph shows that at 3 V and 0C the ADC will read 254d. At a constant voltage, you can use the data shown in the graph to get the best temperature accuracy. Unfortunately, this method requires a great deal of effort. You will have to correlate the final application at many temperatures, and this takes time. Also, each of the test points must reside in code space. Although this calibration results in the best results, it is very costly. A very suitable alternative is to calibrate at a smaller sample of test points. Calibrating at 25C results in a typical temp sensor Accuracy of 4.5C. This method involves determining the VTEMP25 parameter from the approximate transfer function (Equation 1) and using this parameter in the temperature calculation. The unit that created the data from Figure 1 VTEMP25 (3 V) is 0.703125V. Using this parameter as VTEMP25 results in more accurate temperature readings. Calibrating at three points, 40, 25, and 105C results in a typical temp sensor accuracy of 2.5C. This method requires that you calculate the cold and hot slope (m) for the approximate transfer function. Use the data from Graph 1 to solve for m(hot) and m(cold) as shown here: ( V TEMP40 V TEMP25 ) m ( cold ) = ------------------------------------------------------------( 40 ) 25 ( V TEMP105 V TEMP25 ) m ( hot ) = -----------------------------------------------------------105 25 m ( cold ) = 0.001668 m ( hot ) = 0.001758
Temperature Sensor for the HCS08 Microcontroller Family, Rev. 1 Freescale Semiconductor 5
These calculated parameters differ slightly from the typical parameters provided by the data sheet and result in a more accurate temperature sensor reading.
3.2
Digital Filtering
The handling of the ADC readings generated by the temperature sensor is a very important part of generating an accurate temperature reading. In the calibration methods discussed, the calculated VTEMP readings are dependant on the ADC readings. Along with averaging, you can apply other digital filtering methods to the ADC readings to make improvements to the data sample. Implement a simple software filter to reduce the affect of jumpy ADC readings. Use a digital filter to apply weighting to each of the temp sensor readings. For example, divide each reading by two and add the previous output divided by 2 to make the current output. The result would be a weighted average that places equal weight on the present reading and the contributions of all the previous readings. In pseudo C code, this is implemented using shifts to do the divides: Output = Current_Reading 1 + Output 1 Sharp change in temperature sensor readings smooths with this method. Using digital filtering reduces the impact of erroneous temperature readings. This is one implementation of a digital filter. In other implementations, you can change the parameters to set the weight of the current reading to a different value. Additional software could look for erroneous temperature sensor ADC readings. If previous readings differ greatly from the current reading, you could ignore the current reading as bad data.
This implementation demonstrates a quick and straightforward process to determine a temperature reading. For this example, the DEMOQG8 board and Processor Expert complete a temperature reading. The CodeWarrior project, QG8_Floating-Point_Temp, demonstrates this implementation. When using the method from QG8_Floating-Point_Temp code example, the expected accuracy of the temperature sensor is typically 8C. In this example, use Processor Expert to initialize and complete the ADC reading for this project. Figure 3 shows the ADC bean parameters.
Temperature Sensor for the HCS08 Microcontroller Family, Rev. 1 6 Freescale Semiconductor
The Bean Inspector view displays the ADC configuration necessary to perform a temperature reading. The bean allows the Temp Sensor to be selected as one of the channels. Processor Expert initializes the ADC for long sample time and 10 bits of resolution. The selected conversion time configures an ADC input clock of 1 MHz or lower. As shown in Figure 3, select the asynchronous clock as the source clock input to the ADC and the longest conversion time, 46 s. This configuration sets an ADCCLK prescaler of 8, creating an ADCCLK below 1 MHz. Later, we will discuss the importance for generating an accurate reading from the temperature sensor with these parameters.
4.1
The Processor Expert ADC Bean easily allows for the averaging of analog conversions. As shown in Figure 3, selecting the number of conversions enables averaging. For this example, we set 64 conversions. Averaging is an excellent way to filter some of the errors involved in using the ADC. The averaging of ADC readings can filter noise caused by external system activity. Averaging results in a steady reading that more accurately represents the temperature. The most basic digital filtering done on the temperature sensor readings involves averaging results.
Temperature Sensor for the HCS08 Microcontroller Family, Rev. 1 Freescale Semiconductor 7
Fixed-Point Approximation
4.2
In the Processor Expert Basic_Temp example code, floating-point math is enabled. This allows you to perform the mathematical equations shown in the C code below. This code represents the previous flowchart (see Figure 2).
Vtemp = Vtemp * 0.0029296875 if (Vtemp => .7012){ Temp1 = 25 ((Vtemp .7012)/.001646) }else { Temp1 = 25 ((Vtemp.7012)/.001749) ; //Convert the ADC reading into voltage ; //Check for Hot or Cold Slope ; //Cold Slope)
; //Hot Slope)
In this floating-point implementation, the compiler uses 32-bit IEEE floating-point support selected during the creation of this project. The generated assembly code manages the floating-point math necessary to perform the computations. Files created with the project provide all of the subroutines for floating-point computations. Using the floating-point support provided by CodeWarrior simplifies the use of the approximate transfer function.
Fixed-Point Approximation
Use a fixed-point method to reduce code size with a small degradation in accuracy. The following example explains how to use a fixed-point method to create a temperature reading. See the example provided in the Fixed_Point_Basic_Temp folder associated with this application note. When using fixed-point operations, keep in mind the precision used for all the operations. A number can represent different things for our application; for instance, the number 1000 in our application can mean 100.0, 10.00, 1.000, 0.1000, or even smaller numbers. At every step of our application, we decide the precision used for each number, so we know where the decimal point is for the variables. Remember the important step of adding comments to each operation to simplify the understanding of what we do, for either us or other people that can use our code. The amount of code size and execution speed saved in these implementations is significant. This allows this implementation to help give a much better performance of a design working with an 8-bit machine.
5.1
Calculating VDD
V TEMP V TEMP25 Temp = 25 ------------------------------------------------ m
The value of VTEMP25 given in the data sheet is also the typical value calculated for VDD = 3 V. If the system voltage can vary or it is not set to 3 V, then one important step in calculating temperature is determining the value of VDD. Determine the value of VTEMP25 by using the value of VDD.
Temperature Sensor for the HCS08 Microcontroller Family, Rev. 1 8 Freescale Semiconductor
Fixed-Point Approximation
Knowing that the value of VDD equals the maximum return value for the ATD, with a 10-bit resolution ATD conversion like the one possibly used for the MC9S08QG8, 0x3FF hexadecimal (1023 decimal) will represent the VDD. We can easily determine the value of the supply voltage with the following equations: V DD = 1023 = ADCR V DD V BG = 1.2volts = ADCR BG Where: ADCRBG results from the ATD conversion of the Bandgap channel stored in the ADC result register. ADCRVDD is the analog to digital conversion of VDD. Because we can make a conversion for the Bandgap channel and get a value for ADCRBG, we can solve with the following expression with a one-variable equation: ADCR V V DD DD ----------- = --------------------------V BG ADCR BG ADCR V V BG DD V DD = --------------------------------------------ADCR BG 1023 1.2volts V DD = -------------------------------------ADCR BG We can determine the precision needed here because we want a fixed-point representation of the value. The floating-point variables represent a value in a predefined format by an IEEE standard where we have a sign bit, eight bits for the exponent and 23 bits for the fraction, but at the end is a 32 bit (or 64 bit) variable with a special interpretation. The standard was intended to represent values from 2-126 to (2-2-23) 2127 (approximately from 10-44.85 to 1038.53) when using 32-bit format. However, our application has a very limited range of possible values (and many of the applications we see in embedded systems are the same). In cases like this application note, we can choose the way to represent the value in a fixed-point way that helps the MCU to perform all the operations in an easier, smaller, and faster way by having a couple of digits after the decimal point for most of the operations and in each of the operations. The first approach has a representation of the supply voltage with one value after the decimal point with the intention of adding precision to the final result. The easiest way is to have the original value multiplied times 10. From Equation 3, we can tell that: ( 1023 1.2 ) - 10 V DD 10 = ----------------------------ADCR BG
Eqn. 3 Eqn. 2
Temperature Sensor for the HCS08 Microcontroller Family, Rev. 1 Freescale Semiconductor 9
Fixed-Point Approximation
The value of 1023 1.2 10 will always stay fixed; this codes operation will be something like: V DD 12276 = -----------------------ADCR BG
Eqn. 4
CODE
The division then performs with 16-bit fixed-point operations that are much cheaper and faster than floating-point operations. This gives a fixed-point result with one decimal value interpretation and the rest as the integer part. For instance, for a conversion value of ADCRBG = 409 we have the following result: 1023 1.2 V DD 10 = ------------------------- 10 = 12276 -------------- = 30 ADCR BG 409 30.0 - = 3.00 volts V DD = --------10 In the code, VDD will have a calculated value of 30, and we know that the interpretation for that value is one integer and one decimal value (3.0 in our case). The same kind of equations can lead to calculate a representation of in an equivalent ADC conversion value and use it directly in the original equation. It is possible to make the conversion in the other way where the result from the Temperature Channel would convert to a voltage value and then perform the operation. They have similar steps in either case. At the beginning of the execution, we can calculate all the values needed for the conversion. In addition, every time a new conversion finishes after this, it will perform the conversion to a temperature value faster. In the software files, the equations meant to determine the ATD conversion value for 0.7012 volts (which is the typical VTEMP25). To simplify the writing of further expressions we will use: V DD CONV = 10 VDD Because the example uses everything in values equivalent to ATD conversion values, we have to find a representation of VTEMP25. Knowing the value of VDD from the previous equations, we can tell that: ADCRV V DD = ------------------------------------V TEMP25 ADCR TEMP25
DD ---------------------
ADCRV V TEMP25 DD ADCRTEMP25 = ------------------------------------------------------------V DD Replacing VDD with (10 VDD, the value in our code) and replacing with the typical values, we have the following equation: ADCR V V TEMP25 10 DD ADCR TEMP25 = ---------------------------------------------------------------------------V DD CONV 0.7012 10 ------------------------------------------------------ADCRTEMP25 = 1023 V DDCONV
Temperature Sensor for the HCS08 Microcontroller Family, Rev. 1 10 Freescale Semiconductor
Fixed-Point Approximation
Again, the divided value is fixed and the code with the result of the operation (approximately 7173) replaces it. For the previous example where VDD = 3 V and replacing VDD with VDDCONV = 30, we have: 7173 ADCRTEMP25 = -----------------------V DD CONV ADCRTEMP25 = 7173 ----------30 ADCRTEMP25 239 The equivalency between VTEMP25 and its conversion to a digital value as ADCRTEMP25 helps make a direct subtraction between the result of the Temperature Sensor channel conversion and ADCRTEMP25. From the original equation, we need a useful value for m to perform the operations directly with fixed-point. Because of the precision used for each of the operations and the small value of m, (either 1.769 or 1.646 millivolts) we need to have a big multiplier. If we perform the operations without any multiplier, we will have: ADCR V V DD DD --------- = -------------------------m ADCR m ADCR V m ADCRV m 10 DD DD ADCR m = ------------------------------------- = ------------------------------------------------V DD V DD CONV 0.001646 10 ADCR m = 1023 ---------------------------------------------------V DD CONV However, if we keep these values, we will see a smaller result of the multiplication than the minor value allowed for VDD. This means that a fixed-point approximation is impossible if we do not multiply for a fixed value to make the previous division possible. Because of the small value, we multiply everything by 100(or 10 or 1,000 because the idea is to use a value that helps to improve the precision with 16-bit operations). The result will be: ADCR V m 100 ADCRV m 10 100 DD DD ADCR 100m = ---------------------------------------------------- = ---------------------------------------------------------------V DD VDD CONV 1023 0.001646 10 100 1684 - ------------------ 40 C < Temp < 25 C ADCR 100m = ------------------------------------------------------------------VDD CONV V DD CONV 1023 0.001769 10 100 1810 - ------------------ADCR 100m = ------------------------------------------------------------------ 25 C < Temp < 85 C V DD CONV V DDCONV
Eqn. 7 Eqn. 6 Eqn. 5
Temperature Sensor for the HCS08 Microcontroller Family, Rev. 1 Freescale Semiconductor 11
Fixed-Point Approximation
After this point, we have a representation of each of the values needed for the conversion. In order to know where the decimal point for our operations lies, recall if those values were previously multiplied: Temp25 Temp = 25 Temp ----------------------------------------m ADCR T ADCR TEMP25 Temp = 25 --------------------------------------------------------------ADCR m Where ADCRT = analog to digital conversion of the Temperature sensor channel If we replace ADCRm with ADCR100m (100 ADCRm), we have to multiply all the expression times 100 to keep the same units. If we do that, we will have the following result: ADCR T ADCR TEMP25 - 100 Temp = 25 --------------------------------------------------------------ADCR 100m
Eqn. 8
Here is a full example using all the previous equations in the way possibly written into the code. The only value we have is the Bandgap conversion which is 380. Calculate the value of the supply voltage as the first step. Knowing that the Bandgap voltage is typically 1.2 volts, we can say that:
From Equation 4, we have; CalcVDD = 12276/ADCR; CalcVDD = 32; /* we know that this means 3.2 volts */ After this, we have to determine the value of ADCRTemp25. From Equation 5, we have that ADCRTemp25 = 7173/CalcVDD; ADCRTemp25 = 224/* this value is the direct equivalency to its ATD conversion in our system*/ As the final step, calculate the two possible used temperature slopes. From Equation 7, TempSlopeCold = 1684/CalcVDD; TempSlopeCold = 52/* this value is times 100*/
Temperature Sensor for the HCS08 Microcontroller Family, Rev. 1 12 Freescale Semiconductor
Fixed-Point Approximation
Calculate all these values at the start of the code. After this, we only need to make the conversion of the Temperature Sensor channel in the MC9S08QG8 and then apply it to the formula. For two values in the conversion, ADCR = 235 and ADCR = 210 we will have the following results: Fixed-point Equation Example 1: ADCR = 235
( 235 224 ) 100 Temp = 25 ------------------------------------------52 Temp = 25 20 Temp = 5 C
Floating-point Equation
V TEMP = 235 0.003125 = 0.7343 0.7343 0.7012 Temp = 25 -------------------------------------0.001646 Temp = 25 20.155 = 4.845 C V TEMP = 210 0.003125 = 0.6562 0.6562 0.7012 Temp = 25 -------------------------------------0.001769 Temp = 25 ( 25.4 ) = 50.4 C
In this example, VDD = 3.2 volts for the VTEMP conversion In this example, we see that the result with fixed-point and floating-point is almost the same. Because we determine the precision in each operation, we can make it with determine positions for each operation and can establish the accuracy of the result. The good thing about this implementation is the smaller code size and a faster execution time because everything uses fixed-point and has 16-bit operations. The bandgap channel (channel 27 of the ADC peripheral in the MC9S08QG8) has a typical value of 1.2 V. We can start an ADC conversion for the bandgap channel and use the result (ADCR) in Equation 9 to determine the value of VDD.
1023 1.2 Volts V DD = --------------------------------------ADCR Eqn. 9
5.2
Fixed-Point Calculations
To use fixed point, multiply VDD (calculated in Equation 9) by 10. Knowing the supply voltage value (CalcVDD), make an equivalency of the value of VTEMP25 (VADCTEMP25). Using this method, you can also calculate the value to use for slope (m). See Equation 10.
Temperature Sensor for the HCS08 Microcontroller Family, Rev. 1 Freescale Semiconductor 13
Fixed-Point Approximation
CalcVDD = VDD 10 VTEMP25 = 0.7012 Volts VADCTEMP25 = (1023 .7012 Volts) (1023 7.012 Volts) 7173 = VDD CalcVDD CalcVDD
Eqn. 10
mADC = mADC =
(1000 m) 1023 CalCVDD 1.769 1.023 1809 = Temp 25C CalcVDD CalcVDD 1.646 1.023 1685 = Temp < 25C CalcVDD CalcVDD
mADC =
After calculating the VTEMP25 value in an ADC conversion (VADCTEMP25), start a conversion in the temperature sensor channel and use Equation 11 to approximate the temperature. Use fixed-point values to perform all the needed operations using the result of the ADC conversion (ADCR).
ADCR VADCTEMP25 mADC Eqn. 11 1000
Temperature = 25
Remember the real value multiplied by 1000 equals the value used for the temperature slope; also, you used a VDD multiplied by 10 in all your calculations. You must multiply the subtraction by 100 to have the same order in the final result. This gives the final equation (Equation 12).
Temperature = 25 (ADCR VADCTEMP25) 100 (mADC) Eqn. 12
Also, the VDD is calculated with only one decimal value and can add errors for some scenarios of the calculation. For instance, if VDD = 2.97 volts, the calculated VDD will be 2.9 and all the results carry the same error. Fix this and add more precision by having two decimal digits; it is up to the user to determine the way to obtain the best results according to the application. In this case, the finished project is an example on how to implement this.
Temperature Sensor for the HCS08 Microcontroller Family, Rev. 1 14 Freescale Semiconductor
Fixed-Point Approximation
5.3
Initialization Flowcharts
Init parameters
No
Return
Get temperature
No
Return
Temperature Sensor for the HCS08 Microcontroller Family, Rev. 1 Freescale Semiconductor 15
Fixed-Point Approximation
Uncalibrated
Calibrated (3 Points)
Uncalibrated
Calibrated (3 Points)
Using calibrated parameters to calculate temperature does not affect code size or execution times.
Temperature Sensor for the HCS08 Microcontroller Family, Rev. 1 16 Freescale Semiconductor
Temperature Sensor for the HCS08 Microcontroller Family, Rev. 1 Freescale Semiconductor 17
Information in this document is provided solely to enable system and software implementers to use Freescale Semiconductor products. There are no express or implied copyright licenses granted hereunder to design or fabricate any integrated circuits or integrated circuits based on the information in this document. Freescale Semiconductor reserves the right to make changes without further notice to any products herein. Freescale Semiconductor makes no warranty, representation or guarantee regarding the suitability of its products for any particular purpose, nor does Freescale Semiconductor assume any liability arising out of the application or use of any product or circuit, and specifically disclaims any and all liability, including without limitation consequential or incidental damages. Typical parameters that may be provided in Freescale Semiconductor data sheets and/or specifications can and do vary in different applications and actual performance may vary over time. All operating parameters, including Typicals, must be validated for each customer application by customers technical experts. Freescale Semiconductor does not convey any license under its patent rights nor the rights of others. Freescale Semiconductor products are not designed, intended, or authorized for use as components in systems intended for surgical implant into the body, or other applications intended to support or sustain life, or for any other application in which the failure of the Freescale Semiconductor product could create a situation where personal injury or death may occur. Should Buyer purchase or use Freescale Semiconductor products for any such unintended or unauthorized application, Buyer shall indemnify and hold Freescale Semiconductor and its officers, employees, subsidiaries, affiliates, and distributors harmless against all claims, costs, damages, and expenses, and reasonable attorney fees arising out of, directly or indirectly, any claim of personal injury or death associated with such unintended or unauthorized use, even if such claim alleges that Freescale Semiconductor was negligent regarding the design or manufacture of the part. Freescale and the Freescale logo are trademarks of Freescale Semiconductor, Inc. All other product or service names are the property of their respective owners. Freescale Semiconductor, Inc. 2006, 2010. All rights reserved. RoHS-compliant and/or Pb-free versions of Freescale products have the functionality and electrical characteristics as their non-RoHS-compliant and/or non-Pb-free counterparts. For further information, see http://www.freescale.com or contact your Freescale sales representative. For information on Freescales Environmental Products program, go to http://www.freescale.com/epp.