13/12/2014
HOME
UsingTC74(Microchip)thermalsensorfortemperaturemeasurement|EmbeddedLab
NETDUINO
PIC TUTORIALS
CHIPKIT
AVR XMEGA
PRODUCTS
STM32
ARDUINO PROJECTS
TIPS AND TRICKS
THEORY
PIC PROJECTS
CONTACT US
Embedded Lab
An online teaching laboratory for Microcontrollers and Embedded Systems
USING TC74 (MICROCHIP) THERMAL
SENSOR FOR TEMPERATURE
MEASUREMENT
Posted on July 17, 2011
by R-B
19 comments |
Search...
SUBSCRIBE
The TC74 chip is a serially accessible, digital
temperature sensor from Microchip Technology that
acquires and converts temperature information from its
onboard solid-state sensor with a resolution of 1C. The
Follow
temperature is available as an 8-bit digital word stored in
its internal temperature register, which is accessible
through a 2-wire I2C compatible serial bus. This tutorial
describes how to use the TC74 sensor with a PIC
microcontroller to measure the surrounding temperature.
Read Our Privacy
Policy!
Subscribe through
email
Sign Up
Using TC74 sensor for temperature measurement
Theory
The TC74 digital temperature sensor is available in SOT-23
and TO-220 packages. The communication with the device
is accomplished via a 2-wire I2C compatible serial
bus. Temperature resolution is 1C and conversion rate is
http://embeddedlab.com/blog/?p=3146
EASY PULSE SENSOR
Easy Pulse Sensor is
designed for hobby and
educational
applications to
illustrate the principle
of finger
photoplethysmography
1/13
13/12/2014
UsingTC74(Microchip)thermalsensorfortemperaturemeasurement|EmbeddedLab
a nominal 8 samples/sec. The pin diagram of TC74 chip is
shown below for reference.
(PPG) as a non-invasive
technique for detecting
cardio-vascular pulse
wave. Read More ...
US customers buy here
Pin diagram of TC74
The TC74 stores the measured temperature into its 8-bit
International
customers buy here
internal register as 2s complement binary format. The
most significant bit is the sign bit, which is set to 1 for
negative temperatures. Therefore, the maximum
SERIAL 7-SEGMENT LED
DISPLAYS
measurable positive temperature is + 127 C (0111 1111).
The TC74 has also got another 8-bit Read/Write
Configuration Register (RWCR) that is used to put the
device into a low power (IDD = 5 A, typical) Standby mode.
In this mode, the A/D converter is halted and the
temperature data registers are frozen. Bit 7 of RWCR must
be set to put TC74 into Standby mode.
Temperature conversion table and internal registers
7-segment LED displays
are fun way of
displaying numeric
sensor readings in
Arduino or any other
microcontroller-based
projects. The downside
is they are resource
hungry and requires
lots of I/O pins and CPU
time for continuously
displaying the readings.
We have designed
varieties of 7-segment
displays that support
SPI interface and allows
you an easy control of
every LED segments
using only 3 I/O pins of
your MCU.
Serial port operation
The Serial Clock input (SCLK) and bidirectional data port
(SDA) form a 2-wire bidirectional serial port for
communicating with the TC74. The port is I2C compatible
http://embeddedlab.com/blog/?p=3146
2/13
13/12/2014
UsingTC74(Microchip)thermalsensorfortemperaturemeasurement|EmbeddedLab
and all transfers take place under the control of a host,
usually a microcontroller. The host microcontroller
provides the clock signal for all the data transfers and the
TC74 always operates as a Slave. The default 7-bit I2C
address of TC74 is 1001 101b. However, 7 other address
options are also available which can be identified from the
part number of the device. For example, I have got a
TC74A0 in TO-220 package. A0 corresponds to the device
address 1001 000b. Similarly, TC74A3 has its I2C address
1001 011b. Refer the datasheet for further details. If you
are not familiar with I2C protocol, please read my article,
Inter-Integrated Circuit (I2C) communication in PIC.
Visit our Tindie store
Reading temperature from a TC74 device through I2C port
involves the following steps:
The host microcontroller issues a Start condition
CATEGORIES
followed by the address byte. The address byte
consists of the 7-bit slave address and a Read/Write
bit (R/W). The R/W bit is always 0 (Write) in the first
phase.
If the received 7-bit address matches with its own
slave address, the TC74 responds with an
acknowledge pulse.
The host microcontroller next sends the command
byte to TC74 to indicate which register it wants to
access. For reading the temperature, the command
byte should be 00h. The TC74 responds with an
acknowledge pulse.
The host microcontroller issues a new Start
condition because the direction of data transfer is now
going to be changed. The new address byte with R/W
bit 1 is sent by the host, which is acknowledged by the
slave.
The TC74 transmits the 8-bit temperature data from
the temperature register. Upon receiving the byte, the
host doesnt acknowledge, but generates a Stop
condition.
Circuit diagram
I am using PIC18F2550 to demonstrate here, but it can be
implemented with any other smaller size PIC
microcontrollers that support I2C communication. The
temperature is read from the TC74 sensor and displayed
on a character LCD. Dont forget to put two pull-up
resistors (1K) on SDA and SCL lines of I2C bus. The
PIC18F2550 microcontroller used in this experiment is
from the StartUSB for PIC board.
http://embeddedlab.com/blog/?p=3146
555 Timer (9)
Analog (16)
Arduino (110)
ARM projects (2)
AVR Projects (48)
AVR Tutorials (5)
BeagleBone (1)
chipKIT (16)
Display (1)
dsPIC (1)
Electric Imp (1)
Embedded Lab
Projects (61)
Embedded Labs (25)
Embedded Lessons
(39)
ESP8266 (1)
Internet of Things (1)
littleBits (1)
MCU develeopment
tools (12)
Microcontroller
Programmers (6)
MSP430 Launchpad
(4)
Netduino (9)
Open-source (1)
PIC Projects (89)
PIC Tutorials (46)
PIC18F (10)
Power Supply (13)
Processing (3)
Product Review (16)
Products (34)
Raspberry Pi (10)
3/13
13/12/2014
UsingTC74(Microchip)thermalsensorfortemperaturemeasurement|EmbeddedLab
Robotics (9)
STM32 (7)
Tech News (110)
Texas Instruments (4)
Tips and Tricks (85)
Uncategorized (2)
XMega (4)
Circuit diagram
Circuit setup on breadboard
TC74 temperature sensor
Software
The firmware for PIC18F2550 is developed in C using
mikroC Pro for PIC compiler. The compiler provides the
built-in library for I2C support. The microcontroller reads
the temperature word from the TC74s internal
temperature register and displays it on the LCD. The
http://embeddedlab.com/blog/?p=3146
4/13
13/12/2014
UsingTC74(Microchip)thermalsensorfortemperaturemeasurement|EmbeddedLab
following program works for the entire operating range of
TC74 (-40 C to 125 C).
/*
Project:UsingTC74withPICmicrocontroller
fortemperaturemeasurement
MCU:PIC18F2550onboardStartUSBforPIC
Clock48.0MHzusingHS+PLL
MCLREnabled
*/
//DefineLCDmoduleconnections.
sbitLCD_RSatRC6_bit;
sbitLCD_ENatRC7_bit;
sbitLCD_D4atRB4_bit;
sbitLCD_D5atRB5_bit;
sbitLCD_D6atRB6_bit;
sbitLCD_D7atRB7_bit;
sbitLCD_RS_DirectionatTRISC6_bit;
sbitLCD_EN_DirectionatTRISC7_bit;
sbitLCD_D4_DirectionatTRISB4_bit;
sbitLCD_D5_DirectionatTRISB5_bit;
sbitLCD_D6_DirectionatTRISB6_bit;
sbitLCD_D7_DirectionatTRISB7_bit;
//EndLCDmoduleconnectiondefinition
unsignedcharTemp;
unsignedshortnum;
constintTC74A0=0x90;
voidcheck_device(unsignedshortdev_address){
I2C1_Start();
if(I2C1_Wr(dev_address)){
Lcd_Out(1,1,"Devicenotfound");
}
elseLcd_Out(1,1,"TC74device");
I2C1_Stop();
}
unsignedshortRead_Temp(){
unsignedshortresult;
I2C1_Start();//Issuestartsignal
I2C1_Wr(TC74A0);//Address+Writebit
I2C1_Wr(0x00);//ReadTemp
I2C1_Repeated_Start();//Issuestartsignal
I2C1_Wr(TC74A0+1);//Address+Readbit
result=I2C1_Rd(0u);
returnresult;
}
chartemperature[]="000C";
voidmain(){
CMCON=0x07;//Disablecomparators
ADCON1=0x0F;//DisableAnalogfunctions
TRISA=0x00;
TRISC=0x00;
TRISB=0x00;
I2C1_Init(100000);//InitiateI2C
Lcd_Init();//InitializeLCD
Lcd_Cmd(_LCD_CLEAR);//CLEARdisplay
Lcd_Cmd(_LCD_CURSOR_OFF);//Cursoroff
Lcd_Out(1,1,"TestingTC74");
Lcd_Out(2,1,"Thermalsensor");
Delay_ms(1000);
Lcd_Cmd(_LCD_CLEAR);
do{
check_device(TC74A0);
num=Read_Temp();
http://embeddedlab.com/blog/?p=3146
5/13
13/12/2014
UsingTC74(Microchip)thermalsensorfortemperaturemeasurement|EmbeddedLab
//Checkfornegativetemperature
if(num>127){
temperature[0]='';
num=~num+1;
}
elsetemperature[0]='+';
temperature[1]=num/100+48;
temperature[2]=(num/10)%10+48;
temperature[3]=num%10+48;
temperature[5]=223;
//eliminate0satbeginning
if(temperature[1]=='0'){
temperature[1]='';
if(temperature[2]=='0')temperature[2]='';
}
Lcd_Out(2,4,temperature);
Delay_ms(500);
}while(1);
}
Download the mikroC source and HEX files
Output
The following pictures show the device displaying both
positive and negative temperatures. The tip of a hot
soldering rod saturates the sensor at 127 C. To test the
negative temperature reading, the device is put inside the
freezer.
Displaying room temperature
http://embeddedlab.com/blog/?p=3146
6/13
13/12/2014
UsingTC74(Microchip)thermalsensorfortemperaturemeasurement|EmbeddedLab
Maximum measurable temperature
Measuring negative temperature inside the freezer
Conclusion
The technique of interfacing Microchips TC74 sensor with
a PIC microcontroller to measure the ambient
temperature was discussed and demonstrated
successfully. The communication with the TC74 sensor was
accomplished through an I2C bus interface of PIC18F2550.
The 8-bit temperature word was read from the internal
temperature register and displayed on a LCD screen by the
PIC18F2550 microcontroller.
Related posts:
1. Lab 12: Basics of LED dot matrix display
2. Lab 11: Multiplexing seven segment LED displays
3. Lab 14: Inter-Integrated Circuit (I2C)
communication
4. Expanding the number of I/O lines using Microchip
MCP23008
tagged with digital thermometer, Microchip temperature
http://embeddedlab.com/blog/?p=3146
7/13
13/12/2014
UsingTC74(Microchip)thermalsensorfortemperaturemeasurement|EmbeddedLab
sensor, PIC18F2550, TC74
Embedded Labs
Embedded Lessons
PIC18F
Tips and Tricks
19 COMMENTS
shab132
November 10, 2014 4:49 am
hello, nice to meet you, i have tried the code and but is
given me error that the device not found. And can i used
PIC 16f877A for the same code? thanks.
Reply
Konstantin
August 13, 2014 5:14 am
Hi! I tried to implement your circuit in Proteus by means of
source and cof/hex files you provide for downloading.
Unfortunately, it doesnt work. The code hangs while
attempting to execute I2C1_Start in check_device function.
Could you possibly explain why?
Also, is it a good idea to place I2C1_Stop at the very end of
Read_Temp function?
Thank you in advance!
Reply
Ehsan
December 19, 2012 1:27 pm
Hi
Thank you about your excellent website.its very useful
This project was very useful for me but your program has a
tiny problem :
in the read_temp function after you got the result ,
you must stop the i2c with i2c_stop(); if you dont do it,your
program (after going in this function for the first time)
cant use the i2c protocol again.you can repair it by steps
below :
1) at the program (wich shown in the site) where function
unsigned short Read_Temp(){ is developed
2)after result = I2C1_Rd(u);
and before return result;
3) add I2C1_stop();
thank you for your site.
Ill be happy to answer me by e_mail
Reply
http://embeddedlab.com/blog/?p=3146
8/13
13/12/2014
UsingTC74(Microchip)thermalsensorfortemperaturemeasurement|EmbeddedLab
Konstantin
August 13, 2014 10:33 am
Hi! Thank you for your reply. I am not trying to say that
the code is wrong or anything like that. Obviously, I
miss subtle details. However, I still cant run the
simulation in Proteus.
Please, help if possible. I could send you the Proteus
project if it is necessary.
Regards, Konstantin
konstantinmetodiev@gmail.com
Reply
Konstantin
August 22, 2014 5:11 am
Hi! I dealt with the problem. In Proteus
environment, the pull-up resistors properties must
be set to digital. The code works great!
Regards!
Reply
johnsan
October 23, 2012 3:48 am
hello..could we use LM35 as a replacement for TC74?
Reply
Johnsan
October 23, 2012 1:32 am
can the tc74 be replaced with lm35?
Reply
Johnsan
October 22, 2012 12:21 pm
hello,,good day.
will the project still work the same if we will use TC74-5.0
VCTTR instead of VAT?
Reply
R-B
October 22, 2012 1:38 pm
It should work. You may have to change the I2C
address (const int TC74A0 = 090;) in the code to match
with the correct device. See the datasheet page 9 for
more details.
Reply
Davide
March 1, 2012 11:49 am
Hi,
Im making a project with this sensor; Ive got an A0 type.
http://embeddedlab.com/blog/?p=3146
9/13
13/12/2014
UsingTC74(Microchip)thermalsensorfortemperaturemeasurement|EmbeddedLab
Im trying to read temperature but it seems impossible. I
dont understand why. Could you help me? Im using a
PIC18F 4620; My program stops in the Read_Temp function
and doesnt exit never.
init () {
TRISCbits.TRISC3=1;
TRISCbits.TRISC4=1;
OpenI2C(SLAVE_7,SLEW_OFF );
}
unsigned char Read_Temp(){
unsigned char result;
StartI2C(); // Issue start signal
WriteI2C(090); // Address + Write bit
WriteI2C(000); // Read Temp
RestartI2C(); // Issue start signal
WriteI2C(091); // Address + Read bit
result = ReadI2C();
return result;
}
I hope you can help me, ThankYou
p.s. Im sorry for my english..
Reply
R-B
March 4, 2012 3:34 am
If you are using A0 type, my code should work. Make
sure you connected the I2C pins of PIC18F4620
correctly.
Reply
Miklos Vago
January 31, 2012 12:35 pm
Thats great! Thank you for the prompt help.
Kind regards,
Miklos
Reply
Miklos Vago
January 30, 2012 10:15 am
Hi,
Im a newbee for uControllers and unfortunately I have
only a TC74A2 5.0VAT sensor. Which part of the original
program do I have to modify for the proper functionality.
Thanks in advance,
http://embeddedlab.com/blog/?p=3146
10/13
13/12/2014
UsingTC74(Microchip)thermalsensorfortemperaturemeasurement|EmbeddedLab
Miklos
Reply
R-B
January 30, 2012 6:20 pm
@Miklos,
The I2C slave address of TC74A2 5.0VAT is 092. So you
need to change it in the following line of the code:
const int TC74A0 = 090;
Replace 090 by 092, and it should work.
Reply
Michael Havenga
November 2, 2011 3:36 am
Good day,
I am enjoying working with this project, but I would like to
be able to do a conditional operator to set a temperature
point where something happens:
Psuedo
When temp >= 28C then print additional message to LCD;
When temp >= 28C then set port to start fan;
Simple, yes but I cant figure out how to work with tha data
types. If I convert temperture to int then it stays at a value
of 36.
If I just fo a conditional operator ie:
void checktemp(){
if (temperature >=28) Lcd_Out(2,6,T HIGH!);
}
Then when the temp on the display is no where near
28and the additional message is already typed. Any help
please, it would be greatly appreciated.
Regards
Michael
PS: I am in the process of converting to 3v3 uMicro. So I
will let you know how the project works on low voltage J
type PICs.
Reply
Michael Havenga
Go to Top| Contact Us |
Privacy Policy | Log In
October 31, 2011 6:25 am
Hi,
Thanks for the great project, got it working. I was however
perplexed by a problem I first experienced when trying to
get the code to work on a PIC16F887 I might be mising
http://embeddedlab.com/blog/?p=3146
11/13
13/12/2014
UsingTC74(Microchip)thermalsensorfortemperaturemeasurement|EmbeddedLab
somthing but as far as I could tell the I2C capability of the
the 16F887 and the PIC18F2550 were the same.
Interestingly, the 16F887 kept gettting the device not found
error wheres the PIC18f2550 worked first time weird.
Regards
Michael
Reply
Michael
September 21, 2011 5:34 am
Hi,
Has this been tested on SMBUS I would like to use this is
in a 3v3 application ?
Regards
Michael
Reply
Pingback: I liked this: How to use Microchips TC74 sensor
for temperature measurement | Road to 2012
Pingback: Electronics-Lab.com Blog Blog Archive How to
use Microchips TC74 sensor for temperature
measurement
LEAVE A REPLY
Your email address will not be published. Required fields
are marked *
Name *
Email *
Website
Comment
Post Comment
http://embeddedlab.com/blog/?p=3146
12/13
13/12/2014
UsingTC74(Microchip)thermalsensorfortemperaturemeasurement|EmbeddedLab
2014 Embedded-Lab. All Rights Reserved.
http://embeddedlab.com/blog/?p=3146
zeeDynamic Theme
13/13