3720|7

3414

帖子

0

TA的资源

纯净的硅(高级)

楼主
 

【FR4133搞机】i2c温度传感器 [复制链接]


这块片子从Ti那申请到手
吃灰快一年了
想着FR4133没有伴儿
放出来陪着耍耍
IIC接口的温度传感器
工作时45μA,关断时0.3μA
正常温度范围-20°C至+85°C时,误差在0.5°C

我撸
  1. void Write(uchar address,uchar date)
  2. {
  3.        start();                   //启动信号
  4.        wr_byte(WRDADDS);   //I2C器件地址,寻址写
  5.        while(respons());                     //应答信号
  6.        wr_byte(address);   //选择单元地址
  7.        while(respons());                    //应答信号
  8.        wr_byte(date);              //写数据
  9.        while(respons());                  //应答信号
  10.        stop();                          //停止信号
  11. }

  12. uchar Read(uchar address)
  13. {
  14.        uint temp;
  15.        start();                   //开始信号
  16.        wr_byte(WRDADDS);   //I2C器件地址,寻址写
  17.        while(respons());                     //应答信号
  18.        wr_byte(address);   //选择单元地址 信号
  19.        while(respons());                   //应答信号
  20.        start();                   //重发启动信号
  21.        wr_byte(RDDADDS);   //I2C器件地址,寻址读
  22.        while(respons());                   //应答信号
  23.        temp = rd_byte();   //读数据(函数返回值)
  24.        stop();                          //停止信号
  25.        return temp;
  26. }
  27. void ack_master()
  28. {
  29.         SDA_OUT;
  30.         SDA_L;
  31.         delay();
  32.         SCL_H;
  33.         delay();
  34.         SCL_L;
  35.         delay();
  36.         SDA_H;
  37.         delay();
  38. }

  39. uint Read_temprature(uchar address)
  40. {
  41.        uint temp;
  42.        start();                   //开始信号
  43.        wr_byte(WRDADDS);   //I2C器件地址,寻址写
  44.        while(respons());                     //应答信号
  45.        wr_byte(address);   //选择单元地址 信号
  46.        while(respons());                   //应答信号
  47.        stop();
  48.        start();                   //重发启动信号
  49.        wr_byte(RDDADDS);   //I2C器件地址,寻址读
  50.        while(respons());                   //应答信号
  51.        temp = rd_byte()<<8;   //读数据(函数返回值)
  52.        ack_master();
  53.        temp |= rd_byte();
  54.        ack_master();
  55.        stop();                          //停止信号
  56.         return temp;
  57. }

  58. void start()
  59. {                SDA_OUT;
  60.        SDA_H;
  61.        delay();
  62.        SCL_H;
  63.        delay();
  64.        SDA_L;
  65.        delay();
  66.        SCL_L;
  67.        delay();
  68. }

  69. void stop()
  70. {        SDA_OUT;
  71.        SDA_L;
  72.        delay();
  73.        SCL_H;
  74.        delay();
  75.        SDA_H;
  76.        delay();
  77. }

  78. uchar respons()
  79. {
  80.        uchar temp=0;
  81.        SDA_OUT;
  82.        SDA_H;
  83.        delay();
  84.        SCL_H;
  85.        delay();
  86.        SDA_IN;
  87.        if(P5IN&BIT2)
  88.                      {temp = 0x01;}
  89.                      else{temp = 0x00;}
  90.        SCL_L;
  91.        delay();
  92.        return temp;
  93. }

  94. void wr_byte(uchar date)
  95. {
  96.        uchar i;
  97.        for(i=0;i<8;i++)
  98.        {
  99.                SDA_OUT;
  100.               if(date&0x80)
  101.               {
  102.               SDA_H;}
  103.               else {SDA_L;}
  104.               delay();
  105.               SCL_H;
  106.               delay();
  107.               SCL_L;
  108.               delay();
  109.               date=date<<1;
  110.        }
  111. }

  112. uchar rd_byte()
  113. {
  114.        uchar i,temp,tempx;
  115.        for(i=0;i<8;i++)
  116.        {
  117.                SDA_IN;
  118.               SCL_H;
  119.               delay();
  120.               if(P5IN&BIT2)
  121.               {tempx = 0x01;}
  122.               else{tempx = 0x00;}
  123.               temp=(temp<<1)|tempx;
  124.               delay();
  125.               SCL_L;
  126.               delay();
  127.        }
  128.        return temp;
  129. }

  130. void delay()
  131. {
  132.         __delay_cycles(8);
  133. }
复制代码
一些定义
  1. #define SCL_OUT        P5DIR |= BIT3;
  2. #define SDA_IN        P5DIR &= ~BIT2;
  3. #define SDA_OUT        P5DIR |= BIT2;
  4. #define SDA_H        P5OUT |= BIT2;
  5. #define SDA_L        P5OUT &= ~BIT2;
  6. #define SCL_H        P5OUT |= BIT3;
  7. #define SCL_L        P5OUT &= ~BIT3;
  8. uchar WRDADDS= 0x90  ;         /*宏定义I2C器件地址,寻址写*/
  9. uchar RDDADDS =0x91 ;            /*宏定义I2C器件地址,寻址读*/
复制代码




有仿真就是方便

哟哟切克闹,温度玩起来
  1. while(1)
  2.     {
  3.             Write(0x00,0x00);
  4.             __delay_cycles(10000);
  5.                        num = Read_temprature(0x00);
  6.                        temprature = (num>>4)*0.0625;
  7.                        if(temprature>25.0)
  8.                        {P3OUT &= ~BIT0;}
  9.                        else {P3OUT |= BIT0;}
  10.     }
复制代码

我按我按我按


可惜用库的硬件IIC
没有搞定
有空再来

最新回复

挺不错,和ds18b20相比,也有自己的优点。       我们专门研发了一线总线采集模块LCT2662M,还有仪表LCT2201C,可以采集常用的一线总线器件ds18b20,还有模拟量ds2438等。支持64个ds18b20同时采集。输出rs485总线,便于和电脑等终端通讯,常用于粮库粮仓测温,煤筒仓测温,水蓄冷测温等等。      详情 回复 发表于 2019-9-27 23:03
 
点赞 关注
个人签名

So TM what......?


回复
举报

1228

帖子

0

TA的资源

纯净的硅(高级)

沙发
 
“IIC接口的温度传感器
工作时45μA,关断时0.3μA”
是手册上的理论值,还是串联万用表实测的?

点评

惭愧惭愧,手册上的  详情 回复 发表于 2015-12-4 13:13
 
个人签名

喝最烈的酒,..DIY最实用的东西

 

回复

1万

帖子

24

TA的资源

版主

板凳
 
TMP75性能不错的,就是性价比不高

点评

是有点贵  详情 回复 发表于 2015-12-4 13:14
 
 
 

回复

6069

帖子

4

TA的资源

版主

4
 
TMP75性能不错

点评

Tmp1xx的更不错  详情 回复 发表于 2015-12-4 13:15
 
 
 

回复

3414

帖子

0

TA的资源

纯净的硅(高级)

5
 
lidonglei1 发表于 2015-12-4 08:31
“IIC接口的温度传感器
工作时45μA,关断时0.3μA”
是手册上的理论值,还是串联万用表实测的?

惭愧惭愧,手册上的
 
个人签名

So TM what......?

 

 

回复

3414

帖子

0

TA的资源

纯净的硅(高级)

6
 
dcexpert 发表于 2015-12-4 09:31
TMP75性能不错的,就是性价比不高

是有点贵
 
个人签名

So TM what......?

 

 

回复

3414

帖子

0

TA的资源

纯净的硅(高级)

7
 

Tmp1xx的更不错
 
个人签名

So TM what......?

 

 

回复

203

帖子

0

TA的资源

一粒金砂(高级)

8
 

挺不错,和ds18b20相比,也有自己的优点。

      我们专门研发了一线总线采集模块LCT2662M,还有仪表LCT2201C,可以采集常用的一线总线器件ds18b20,还有模拟量ds2438等。支持64个ds18b20同时采集。输出rs485总线,便于和电脑等终端通讯,常用于粮库粮仓测温,煤筒仓测温,水蓄冷测温等等。

  

 
个人签名北京长信物联科技有限公司
专业的USB温湿度传感器、485温湿度传感器、气体传感器、64路DS18B20温度采集模块厂商。
www.lct2000.cn
QQ:1930227091
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表