Sunteți pe pagina 1din 13

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

S-ar putea să vă placă și