HOME     STORE     BLOG     SCHEMATICS     TUTORIALS     DOWNLOADS     CONTACT

Using MCP9700, MCP9700A, MCP9701 and MCP9701A Temperature Sensors
 
Using MCP9700, MCP9700A, MCP9701 and MCP9701A Temperature Sensors


 

Using MCP9700, MCP9700A, MCP9701 and MCP9701A Temperature Sensors

 


The MCP9700, MCP9700A, MCP9701 and MCP9701A Temperature Sensors from Microchip offer exceptional performance for the low price. Each have different temperature ratings and accuracy parameters. MCP9700, MCP9700A, MCP9701 and MCP9701A sensors are available in different packaging and are very simple to interface with. Vdd, GND and Vout are all that are required. You should check the datasheet to get a better idea of the parameters for the device you decide to use, though keep in mind that the user module listed below will automatically calculate the temperature depending on the device in use.


Using MCP9700, MCP9700A, MCP9701 and MCP9701A Temperature Sensors

Here's a list of features:
Tiny Analog Temperature Sensor
Available Packages: TO-92, SC70-5, SOT-23-5
Wide Temperature Measurement Range:
-40°C to +125°C (Extended Temperature)
-40°C to +150°C (High Temperature) (MCP9700/9700A)
Accuracy:
±2°C (max.), 0°C to +70°C (MCP9700A/9701A)
±4°C (max.), 0°C to +70°C (MCP9700/9701)
Optimized for Analog-to-Digital Converters (ADCs):
10.0 mV/°C (typical) MCP9700/9700A
19.5 mV/°C (typical) MCP9701/9701A

Example Code
Here are some code snippets that would make interfacing with the MCP9700, MCP9700A, MCP9701 and MCP9701A devices very easy. The user module is listed at the end of this article, and here's an example of using the module:
(this example will sample the temperature sensor and display the result in Word and Integer format every 500mS)


Device = 18F2520
Clock = 32
Config MCLRE = OFF

Include "InternalOscillator.bas" // configures the internal oscillator
Include "Utils.bas" // used for the 'Digit' function
Include "ADC.bas" // ADC routines
Include "Convert.bas" // convert numbers to strings
Include "USART.bas" // for UART support
Include "MCP97.bas" // MCP97xxx sensor routines

// display the temperature via USART
Sub DisplayTemperature()
USART.Write("_____________________",13,10) // separate each output with a line
// this code demonstrates the use of various public variables that are
// pre-calculated by MCP97.ReadTemperature
USART.Write("Word Output: ")
If Temperature.Positive Then
USART.Write("+")
Else
USART.Write("-")
EndIf
USART.Write(DecToStr((Temperature.WordVal/10),3)) // write the first two digits of the temperature
USART.Write(".",DecToStr(Digit(Temperature.WordVal,1)), " C",13,10) // display the "." and decimal place, followed by " C"

// this code demonstrates use of the public integer variable pre-calculated
// by MCP97.ReadTemperature
// note - can't use 'Digit' as it does not support Integer type variables
USART.Write("Integer Output: ")
USART.Write(DecToStr((Temperature.IntVal),4),13,10) // write the whole integer value
End Sub

USART.SetBaudrate(br57600) // initialise UART for 57600 baud
ADCON1 = $E // configure AN0 as an input

// main program loop...
While True
MCP97.ReadTemperature(0) // sample the sensor on CH0 and calculate the results
DisplayTemperature() // display the temperature
DelayMS(500) // delay 500mS between samples
Wend


Notes
The pin connected from the PIC to Vout should be configured as analogue before calling the user module. I have done this in the above example with the statement "ADCON1 = $E".
Once "MCP97.ReadTemperature(pChannel)" has been called, the temperature results are stored in a public structure with multiple variable types. This makes it easy to quickly use the type of variable for different scenarios (for example, "Utils.Digit" can only parse byte, word and longword type variables - not integers.
Temperature.WordVal - stores the temperature result as a word type variable with a scale of 10 (-12.1 = 121, +25 = 250)
Temperature.Positive - if the WordVal is postive, then this flag is set true. Otherwise it is set false. (-12.1 = false, +25 = true)
Temperature.IntVal - stores the temperature result as an integer type variable with a scale of 10 (-12.1 = -121, +25 = 250)
You can use different devices by including the option definition like so: #option MCP97_Device = MCP9701A
Valid options are MCP9700, MCP9700A, MCP9701, MCP9701A.

User Module MCP9700/9700A/9701/9701A
Save the following code to the "UserLibrary" folder, and call it "MCP97.bas"


{
______________________________________________________________________________________________________________
MCP9700/9700A/9701/9701A Temperature Sensor Module
* Ensure the ADC Port.Pin is configured as analogue before calling ReadTemperature
______________________________________________________________________________________________________________
}

Module MCP97

#option MCP97_Device = MCP9701A

#if Not(MCP97_Device in (MCP9700, MCP9700A, MCP9701, MCP9701A))
#error MCP97_Device, "Unknown device. Please define either MCP9700, MCP9700A, MCP9701, MCP9701A"
#endif

Structure TTemperature
IntVal As Integer
WordVal As Word
Positive As Boolean
End Structure
// public structure to store different variable types of temperature results
Public Dim Temperature As TTemperature

Include "ADC.bas"

// convert the temperature result into various types for simple use in main
Sub LoadStructure(ByVal pResult As Integer)
Temperature.IntVal = pResult // store integer type result
If pResult < 0 Then // check if less than zero (negative)
Temperature.Positive = False // yes, clear positive flag
Temperature.WordVal = 65536 - Word(pResult) // and load word type variable
Else //
Temperature.Positive = True // no, set positive flag
Temperature.WordVal = Word(pResult) //and load word type variable
EndIf
End Sub

// read the ADC port + and convert to degrees C (scaled integer math)
// if temperature = 25.3 then it will calculate 253
// if temperature = -13.4 then it will calculate -134
Public Sub ReadTemperature(ByVal pChannel As Byte)
Dim tmpInt As Integer
Dim tmpLongInt As LongInt
tmpInt = (ADC.Read(pChannel)) // make a 10-bit sample of the ADC.0
#if MCP97_Device in (MCP9701, MCP9701A) // check which device is in use
tmpInt = tmpInt - 82 // calculate difference from zero offset
#else
tmpInt = tmpInt - 102 // calculate difference from zero offset
#endif
tmpLongInt = tmpInt * 1000 // scale up by 1,000
#if MCP97_Device in (MCP9701, MCP9701A) // check which device is in use
tmpInt = tmpLongInt / 400 // convert +/- degrees C
#else
tmpInt = tmpLongInt / 205 // convert +/- degrees C
#endif
LoadStructure(tmpInt)
End Sub









Accurate LC Meter Capacitance Inductance Meter with 16F628 and LCD
Volt Ampere Meter with 16F876 Microcontroller and LCD display
 
Accurate LC Meter

Build your own Accurate LC Meter (Capacitance Inductance Meter) and start making your own coils and inductors. This LC Meter allows to measure incredibly small inductances making it perfect tool for making all types of RF coils and inductors. LC Meter can measure inductances starting from 10nH - 1000nH, 1uH - 1000uH, 1mH - 100mH and capacitances from 0.1pF up to 900nF. The circuit includes an auto ranging as well as reset switch and produces very accurate and stable readings.
PIC Volt Ampere Meter

Volt Ampere Meter measures voltage of 0-70V or 0-500V with 100mV resolution and current consumption 0-10A or more with 10mA resolution. The meter is a perfect addition to any power supply, battery chargers and other electronic projects where voltage and current must be monitored. The meter uses PIC16F876A microcontroller with 16x2 backlighted LCD.

50MHz 60MHz Frequency Meter / Counter with 16F628 & LCD
1Hz - 2MHz XR2206 Function Generator
60MHz Frequency Meter / Counter

Frequency Meter / Counter measures frequency from 10Hz to 60MHz with 10Hz resolution. It is a very useful bench test equipment for testing and finding out the frequency of various devices with unknown frequency such as oscillators, radio receivers, transmitters, function generators, crystals, etc.
1Hz - 2MHz XR2206 Function Generator

1Hz - 2MHz XR2206 Function Generator produces high quality sine, square and triangle waveforms of high-stability and accuracy. The output waveforms can be both amplitude and frequency modulated. Output of 1Hz - 2MHz XR2206 Function Generator can be connected directly to 60MHz Counter for setting precise frequency output.

BA1404 HI-FI Stereo FM Transmitter
USB IO Board PIC18F2455 / PIC18F2550
BA1404 HI-FI Stereo FM Transmitter

Be "On Air" with your own radio station! BA1404 HI-FI Stereo FM Transmitter broadcasts high quality stereo signal in 88MHz - 108MHz FM band. It can be connected to any type of stereo audio source such as iPod, Computer, Laptop, CD Player, Walkman, Television, Satellite Receiver, Tape Deck or other stereo system to transmit stereo sound with excellent clarity throughout your home, office, yard or camp ground.
USB IO Board

USB IO Board is a tiny spectacular little development board / parallel port replacement featuring PIC18F2455/PIC18F2550 microcontroller. USB IO Board is compatible with Windows / Mac OSX / Linux computers. When attached to Windows IO board will show up as RS232 COM port. You can control 16 individual microcontroller I/O pins by sending simple serial commands. USB IO Board is self-powered by USB port and can provide up to 500mA for electronic projects. USB IO Board is breadboard compatible.

ESR Meter / Transistor Tester Kit
Audiophile Headphone Amplifier Kit
 
ESR Meter / Capacitance / Inductance / Transistor Tester Kit

ESR Meter kit is an amazing multimeter that measures ESR values, capacitance (100pF - 20,000uF), inductance, resistance (0.1 Ohm - 20 MOhm), tests many different types of transistors such as NPN, PNP, FETs, MOSFETs, Thyristors, SCRs, Triacs and many types of diodes. It also analyzes transistor's characteristics such as voltage and gain. It is an irreplaceable tool for troubleshooting and repairing electronic equipment by determining performance and health of electrolytic capacitors. Unlike other ESR Meters that only measure ESR value this one measures capacitor's ESR value as well as its capacitance all at the same time.
Audiophile Headphone Amplifier Kit

Audiophile headphone amplifier kit includes high quality audio grade components such as Burr Brown OPA2134 opamp, ALPS volume control potentiometer, Ti TLE2426 rail splitter, Ultra-Low ESR 220uF/25V Panasonic FM filtering capacitors, High quality WIMA input and decoupling capacitors and Vishay Dale resistors. 8-DIP machined IC socket allows to swap OPA2134 with many other dual opamp chips such as OPA2132, OPA2227, OPA2228, dual OPA132, OPA627, etc. Headphone amplifier is small enough to fit in Altoids tin box, and thanks to low power consumption may be supplied from a single 9V battery.
 

Arduino Prototype Kit
RF Remote Control 433MHz Four Channel
 
Arduino Prototype Kit

Arduino Prototype is a spectacular development board fully compatible with Arduino Pro. It's breadboard compatible so it can be plugged into a breadboard for quick prototyping, and it has VCC & GND power pins available on both sides of PCB. It's small, power efficient, yet customizable through onboard 2 x 7 perfboard that can be used for connecting various sensors and connectors. Arduino Prototype uses all standard through-hole components for easy construction, two of which are hidden underneath IC socket. Board features 28-PIN DIP IC socket, user replaceable ATmega328 microcontroller flashed with Arduino bootloader, 16MHz crystal resonator and a reset switch. It has 14 digital input/output pins (0-13) of which 6 can be used as PWM outputs and 6 analog inputs (A0-A5). Arduino sketches are uploaded through any USB-Serial adapter connected to 6-PIN ICSP female header. Board is supplied by 2-5V voltage and may be powered by a battery such as Lithium Ion cell, two AA cells, external power supply or USB power adapter.
200m 4-Channel 433MHz Wireless RF Remote Control

Having the ability to control various appliances inside or outside of your house wirelessly is a huge convenience, and can make your life much easier and fun. RF remote control provides long range of up to 200m / 650ft and can find many uses for controlling different devices, and it works even through the walls. You can control lights, fans, AC system, computer, printer, amplifier, robots, garage door, security systems, motor-driven curtains, motorized window blinds, door locks, sprinklers, motorized projection screens and anything else you can think of.
 

Electronics-DIY.com © 2002-2024. All Rights Reserved.