Chinaunix首页 | 论坛 | 博客
  • 博客访问: 3137414
  • 博文数量: 524
  • 博客积分: 11908
  • 博客等级: 上将
  • 技术积分: 5485
  • 用 户 组: 普通用户
  • 注册时间: 2009-04-03 15:50
个人简介

爱好嵌入式

文章分类

全部博文(524)

文章存档

2026年(1)

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

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

1.2.1 指针寄存器

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

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

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

对各位的描述如下:

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(0.5℃)

40ms

0

1

10 Bits(0.25℃)

80ms

1

0

11 Bits(0.125℃)

160ms

1

1

12 Bits(0.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 TMP100的TWI驱动程序介绍

以下是使用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;

}

 

 

 

 

 

 

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