分类: 嵌入式
2010-03-13 10:43:18
TMP100数字温度计及程序设计
1.1 基本参数及引脚说明
1.基本参数
TMP100是德州仪器(TI)公司的一款数字温度传感器芯片。主要特点有:
1) 工作电压范围:2.7V~5.5V
2) 超低功耗:45μA (待机时0.1μA)
3) 接口方式:I
4) 可编程分辨率:9-Bits 到 12-Bits
5) 操作频率: 100 KHz /400KHz/3.4MHz
6) 精度:测量温度在
2. 从器件地址、引脚说明及封装
表x.1 TMP100引脚描述
引脚名称 |
引脚编号 |
功能描述 |
引脚封装图 |
SCL |
1 |
I |
|
GND |
2 |
电源地 | |
ADD1 |
3 |
地址输入端1 | |
V+ |
4 |
电源正极 | |
ADD0 |
5 |
地址输入端0 | |
SDA |
6 |
I |
表x.2 TMP100 SLAVE ADDRESS
ADD1 |
ADD0 |
器件从地址 |
R/W |
0 |
0 |
1001 000 |
1:READ 0:WRITE |
0 |
悬空 |
1001 001 | |
0 |
1 |
1001 010 | |
1 |
0 |
1001 100 | |
1 |
悬空 |
1001 101 | |
1 |
1 |
1001 110 | |
悬空 |
0 |
1001 011 | |
悬空 |
1 |
1001 111 |
1.2 TMP100内部寄存器描述
TMP100内部共有5个寄存器,一个指针寄存器(Point Register)和四个数据寄存器(Temperature Register、Configuration Register、TL及TH Register)。对数据寄存器的选择是通过指针寄存器的低2位(P1和P0)来决定的。
指针寄存器的位描述,及P1、P0的设置对应具体的数据寄存器分别见表x.3和x.4。
表x.3 Point Register的各位(8-Bits)
P7 |
P6 |
P5 |
P4 |
P3 |
P2 |
P1 |
P0 |
0 |
0 |
0 |
0 |
0 |
0 |
Register Bits |
表x.4 数据寄存器的指针地址
P1 |
P0 |
数据寄存器 |
0 |
0 |
温度寄存器(只读,保存温度值) |
0 |
1 |
配置寄存器(可读写) |
1 |
0 |
临界温度下限寄存器(可读写) |
1 |
1 |
临界温度上限寄存器(可读写) |
表x.5 Configuration Register的各位(8-Bits)
D7 |
D6 |
D5 |
D4 |
D3 |
D2 |
D1 |
D0 |
OS/ALERT |
R1 |
R0 |
F1 |
F0 |
POL |
TM |
SD |
对各位的描述如下:
SD:置1时,TMP100进入SHUT DOWN模式;置0时,进入连续温度转换模式;
OS/ALERT:TMP100进入SHUT DOWN模式下,该位被置1后,将启动一次温度的测量转换,完成后继续进入SHUT DOWN模式;
R1、R0:用于选择TMP100的分辨率,共四种,9-Bits、10-Bits、11-Bits、12-Bits,对应的选择关系见表x.4。
表x.6 TMP100的分辨率设置
R1 |
R0 |
分辨率(RESOLUTION) |
典型转换时间 |
0 |
0 |
9Bits( |
40ms |
0 |
1 |
10 Bits( |
80ms |
1 |
0 |
11 Bits( |
160ms |
1 |
1 |
12 Bits( |
320ms |
表x.7 Temperature Register的各位(16-Bits)
BYTE1—高8位 |
BYTE2—低8位 | ||||||||||||||
D15 |
D14 |
D13 |
D12 |
D11 |
D10 |
D9 |
D8 |
D7 |
D6 |
D5 |
D4 |
D3 |
D2 |
D1 |
D0 |
T11 |
T10 |
T9 |
T8 |
T7 |
T6 |
T5 |
T4 |
T3 |
T2 |
T1 |
T0 |
0 |
0 |
0 |
0 |
对应的温度值的计算方式如下:
温度值 = T11×27 + T10×26 +T9×25 +T8×24+T7×23+T6×22+T5×21+
T4×20+T3×2-1+T2×2-2+T1×2-3+T0×2-4
根据不同的分辨率设置,对应的有效位不同:
1) 12 Bits RESOLUTION时,有效位为T11~T0,最低位为T0,故分辨率为2-4=0.0625
2) 11 Bits RESOLUTION时,有效位为T11~T1,最低位为T1,故分辨率为2-3=0.125
3) 10 Bits RESOLUTION时,有效位为T11~T2,最低位为T2,故分辨率为2-2=0. 25
4) 9 Bits RESOLUTION时,有效位为T11~T3,最低位为T3,故分辨率为2-1=0.5
1.3 TMP100的TWI驱动程序介绍
以下是使用ATMEGA16的内部TWI控制器编制,以下主要介绍I2C的核心驱动函数。
#include
#include
#include
uchar TMP100_Write(uchar slv_addw,uchar sub_suba,uchar Wdata)
{
Start();//I
Wait();
if(TestAck()!=START) return 1;//ACK
Write8Bit(slv_addw);//写I
Wait();
if(TestAck()!=MT_SLA_ACK) return 1;//ACK
Write8Bit(sub_suba);//写地址
Wait();
if(TestAck()!=MT_DATA_ACK) return 1;//ACK
Write8Bit(Wdata);//写DATA
Wait();
if(TestAck()!=MT_DATA_ACK) return 1;//ACK
Stop();//I
//延时等Device 写完
return 0;
}
/******************************************
I
如果读失败也返回0
*******************************************/
uchar TMP100_Read(uchar slv_addr,uchar suba,uchar *s,uchar no)
{
uchar n;
Start();//I
Wait();
if (TestAck()!=START) return 51;//ACK
Write8Bit(slv_addr-1);//写I
Wait();
if(TestAck()!=MT_SLA_ACK) return 52;//ACK
Write8Bit(suba);//写地址
Wait();//
if(TestAck()!=MT_DATA_ACK) return 53;//ACK
//Stop();//I
Start();//I
Wait();
if (TestAck()!=RE_START) return 54;//ACK
Write8Bit(slv_addr);//写I
Wait();
if(TestAck()!=MR_SLA_ACK) return 55;//ACK
for(n=0;n
{
Twi();//启动主I
Wait();
if(TestAck()!=MR_DATA_ACK) return 57;//ACK
*s=TWDR;//读取I
s++;
}
Stop();//I
return 0;
}