Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2970118
  • 博文数量: 523
  • 博客积分: 11908
  • 博客等级: 上将
  • 技术积分: 5475
  • 用 户 组: 普通用户
  • 注册时间: 2009-04-03 15:50
文章分类

全部博文(523)

文章存档

2019年(3)

2013年(4)

2012年(71)

2011年(78)

2010年(57)

2009年(310)

分类: 嵌入式

2010-03-13 10:43:18

TMP100数字温度计及程序设计

 

1.1 基本参数及引脚说明

1.基本参数

TMP100是德州仪器(TI)公司的一款数字温度传感器芯片。主要特点有:

1)        工作电压范围:2.7V~5.5V

2)        超低功耗:45μA (待机时0.1μA

3)        接口方式:I2C二线串行接口

4)        可编程分辨率:9-Bits 12-Bits

5)        操作频率: 100 KHz /400KHz/3.4MHz

6)        精度:测量温度在-25℃~85℃时,为±2℃-55℃~125℃时,为±3℃

2. 从器件地址、引脚说明及封装

x.1 TMP100引脚描述

引脚名称

引脚编号

功能描述

引脚封装图

SCL

1

I2C时钟输入

 

GND

2

电源地

ADD1

3

地址输入端1

V+

4

电源正极

ADD0

5

地址输入端0

SDA

6

I2C数据口

x.2 TMP100 SLAVE ADDRESS

ADD1

ADD0

器件从地址

R/W

0

0

1001 000

1READ

0WRITE

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内部寄存器描述

1.2.1 指针寄存器

TMP100内部共有5个寄存器,一个指针寄存器(Point Register)和四个数据寄存器(Temperature RegisterConfiguration RegisterTLTH Register)。对数据寄存器的选择是通过指针寄存器的低2位(P1P0)来决定的。

指针寄存器的位描述,及P1P0的设置对应具体的数据寄存器分别见表x.3x.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

临界温度上限寄存器(可读写)

1.2.2 配置寄存器

x.5 Configuration Register的各位(8-Bits

D7

D6

D5

D4

D3

D2

D1

D0

OS/ALERT

R1

R0

F1

F0

POL

TM

SD

对各位的描述如下:

SD1时,TMP100进入SHUT DOWN模式;置0时,进入连续温度转换模式;

OS/ALERTTMP100进入SHUT DOWN模式下,该位被置1后,将启动一次温度的测量转换,完成后继续进入SHUT DOWN模式;

R1R0用于选择TMP100的分辨率,共四种,9-Bits10-Bits11-Bits12-Bits,对应的选择关系见表x.4

x.6 TMP100的分辨率设置

R1

R0

分辨率(RESOLUTION

典型转换时间

0

0

9Bits0.5℃

40ms

0

1

10 Bits0.25℃

80ms

1

0

11 Bits0.125℃

160ms

1

1

12 Bits0.0625℃

320ms

1.2.3 温度寄存器

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 TMP100TWI驱动程序介绍

以下是使用ATMEGA16的内部TWI控制器编制,以下主要介绍I2C的核心驱动函数。

#include

#include

#include //包含第x章的OwnTWI.h头文件

uchar TMP100_Write(uchar slv_addw,uchar sub_suba,uchar Wdata)

{    

Start();//I2C启动  

Wait();

if(TestAck()!=START) return 1;//ACK  

Write8Bit(slv_addw);//I2C从器件地址和写方式

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();//I2C停止

//延时等Device 写完

return 0;

}

/******************************************

       I2C总线读no 个字节

              如果读失败也返回0

*******************************************/

uchar TMP100_Read(uchar slv_addr,uchar suba,uchar *s,uchar no)

{

uchar n;

Start();//I2C启动

Wait();         

if (TestAck()!=START) return 51;//ACK

Write8Bit(slv_addr-1);//I2C从器件地址和写方式

Wait();

if(TestAck()!=MT_SLA_ACK) return 52;//ACK

Write8Bit(suba);//写地址

Wait();//

if(TestAck()!=MT_DATA_ACK) return 53;//ACK

//Stop();//I2C停止

Start();//I2C重新启动

Wait();         

if (TestAck()!=RE_START) return 54;//ACK

Write8Bit(slv_addr);//I2C从器件地址和写方式

Wait();

if(TestAck()!=MR_SLA_ACK) return 55;//ACK

for(n=0;n

{

      Twi();//启动主I2C读方式

      Wait();

      if(TestAck()!=MR_DATA_ACK) return 57;//ACK

      *s=TWDR;//读取I2C接收数据

      s++;

}          

Stop();//I2C停止

return 0;

}

 

 

 

 

 

 

阅读(3877) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~