DS18B20温度传感器中文资料

上传人:灯火****19 文档编号:142983140 上传时间:2020-08-25 格式:PDF 页数:14 大小:342.94KB
返回 下载 相关 举报
DS18B20温度传感器中文资料_第1页
第1页 / 共14页
DS18B20温度传感器中文资料_第2页
第2页 / 共14页
DS18B20温度传感器中文资料_第3页
第3页 / 共14页
DS18B20温度传感器中文资料_第4页
第4页 / 共14页
DS18B20温度传感器中文资料_第5页
第5页 / 共14页
点击查看更多>>
资源描述

《DS18B20温度传感器中文资料》由会员分享,可在线阅读,更多相关《DS18B20温度传感器中文资料(14页珍藏版)》请在金锄头文库上搜索。

1、AVR 单片机学习笔记-基于慧净 HJ-2G AVR 开发板 第 14 章 DS18B20 14.114.114.114.1 概念概念. . . . 这一章是关于 DS18B20 实时温度传感器。相信有学过 c51 单片机的朋友都对他不陌生 吧。我恰恰也学习过,不过当初并没有掌握好。学习板搭配的 DS18B20,一般上给人的 感觉有点像三极管,其实 DS18B20 的内部结构与原理也挺猥琐的,但是我们使用也是 为了实现温度传感的功能而已,基本上不会介绍过度深入。 14.214.214.214.2 DS18B20DS18B20DS18B20DS18B20 介绍介绍 DS18B20 有三只引脚,V

2、CC,DQ,和 VDD。 而 HJ-2G 板子上,采用了外部供电的链接方式,而总线必须链接上拉电阻。这一目的告 诉我们,一线总线在空置状态时,都是一直处于高电平。 DS18B20 的内 部有 64 位的 ROM 单元, 和 9 字节的暂存器 单元。64 位 ROM 包含了, DS18B20 唯一的序列号(唯一 的名字) 。 AVR 单片机学习笔记-基于慧净 HJ-2G AVR 开发板 以上是内部 9 个字节的暂存单元(包括 EEPROM) 。 字节 01 是转换好的温度。 字节 23 是用户用来设置最高报警和最低报警值。这个可以用软件来实现。 字节 4 是用来配置转换精度,912 位。 字节

3、58 就不用看了。 14.314.314.314.3 字节字节 01010101: : : :转换好的温度转换好的温度 DS18B20 的温度操作是使用 16 位, 也就是说分辨率是 0.0625。 BIT15BIT11 是符号位, 为了就是表示转换的值是正数还是负数。看看数据手册给出的例子吧。 AVR 单片机学习笔记-基于慧净 HJ-2G AVR 开发板 要求出正数的十进制值,必须将读取到的 LSB 字节,MSB 字节进行整合处理,然后乘 以 0.0625 即可。 Eg:假设从,字节 0 读取到 0 xD0 赋值于 Temp1,而字节 1 读取到 0 x07 赋值于 Temp2, 然后求出十

4、进制值。 unsignedintTemp1,Temp2,Temperature; Temp1=0 xD0;/低八位 Temp2=0 x07;/高八位 Temperature = (Temp28) |Temp1)* 0.0625; /又或者 Temperature = (Temp1 +Temp2 *256) * 0.0625;/Temperature=125 在这里我们遇见了一个问题,就是如何求出负数的值呢?很遗憾的,单片机不像人脑那 样会心算,我们必须判断 BIT1115 是否是 1,然后人为置一负数标志。 Eg. 假设从,字节 0 读取到 0 x90 赋值于 Temp1,而字节 1 读取到

5、0 xFC 赋值于 Temp2, 然后求出该值是不是负数,和转换成十进制值。 unsignedintTemp1,Temp2,Temperature; unsigned char Minus_Flag=0; Temp1=0 x90;/低八位 Temp2=0 xFC;/高八位 /Temperature = (Temp1 + Temp2 *256) * 0.0625;/Temperature=64656 /很明显不是我们想要的答案 if(Temp2/负数标志置一 Temperature = (Temp28) |Temp1)/高八位第八位进行整合 Temperature= (Temperature)+

6、1);/求反,补一 Temperature*= 0.0625;/求出十进制 /Temperature=55; else Minus_Flag=0; Temperature = (Temp28) |Temp1)* 0.0625; 那个人为的负数标志, 是真的很有用处的。 这个要看你你自己的想象力了,如何去利用它。 AVR 单片机学习笔记-基于慧净 HJ-2G AVR 开发板 继续继续,以上我们是求出没有小数点的正数。如果我要求出小数点的值的话,那么我 应该这样做。 Eg:假设从,字节 0 读取到 0 xA2 赋值于 Temp1,而字节 1 读取到 0 x00 赋值于 Temp2, 然后求出十进制

7、值,要求连同小数点也求出。 unsignedintTemp1,Temp2,Temperature; Temp1=0 x90;/低八位 Temp2=0 xFC;/高八位 /实际值为 10.125 /Temperature = (Temp28) |Temp1)* 0.0625;/10,无小数点 Temperature = (Temp28) |Temp1)* (0.0625 * 10);/101 ,一位小数点 /Temperature = (Temp28) |Temp1)* (0.0625 * 100);/1012,二位小数点 如以上的例题,我们可以先将 0.0625 乘以 10,然后再乘以整合后的

8、 Temperature 变量, 就可以求出后面一个小数点的值(求出更多的小数点,方法都是以此类推) 。得出的结 果是 101,然后再利用简单的算法,求出每一位的值。 unsinged char Ten,One,Dot1 Ten=Temperature/100;/1 One=Temperature%100/10;/0 Dot1=%10;/1 求出负数的思路也一样,只不过多出人为置一负数标志,求反补一的动作而已。自己发 挥想象力吧。 14.414.414.414.4 字节字节 23232323:THTHTHTH 和和 TLTLTLTL 配置配置 TH 与 TL 就是所谓的温度最高界限,和温度最低

9、界限的配置。其实这些可以使用软件 来试验,所以就无视了。 14.514.514.514.5 字节字节 4 4 4 4:配置寄存器:配置寄存器 BIT7 出厂的时候就已经设置为 0,用户不建议去更改。而 R1 与 R0 位组合了四个不同 的转换精度,00 为 9 位转换精度而转换时间是 93.75ms,01 为 10 位转换精度而转换时 间是 187.5ms,10 为 11 位转换精度而转换时间是 375ms,11为 12 位转换精度而转换时 间是 750ms(默认) 。该寄存器还是留默认的好,毕竟转换精度表示了转换的质量。 AVR 单片机学习笔记-基于慧净 HJ-2G AVR 开发板 14.6

10、14.614.614.6 字节字节 57575757,8 8 8 8:保留位,:保留位,CRCCRCCRCCRC 无视,无视吧。 14.714.714.714.7 单片机访问单片机访问 DS18B20DS18B20DS18B20DS18B20 DS18B20 一般都是充当从机的角色,而单片机就是主机。单片机通过一线总线访问 DS18B20 的话,需要经过以下几个步骤: 1.DS18B20 复位。 2.执行 ROM 指令。 3.执行 DS18B20 功能指令(RAM 指令) 。 补充一下。一般上我们都是使用单点,也就是说单线总线上仅有一个 DS18B20 存在而 已。所以我们无需刻意读取 ROM

11、 里边的序列号来,然后匹配 那个 DS18B20?而是更 直接的,跳过 ROM 指令,然后直接执行 DS18B20 功能指令。 DS18B20 复位,在某种意义上就是一次访问 DS18B20 的开始,或者可说成是开始信号。 ROM 指令,也就是访问,搜索,匹配,DS18B20 个别的 64 位序列号的动作。在单点情 况下,可以直接跳过 ROM 指令。而跳过 ROM 指令的字节是 0 xCC。 DS18B20 功能指令有很多种,我就不一一的介绍了,数据手册里有更详细的介绍。这里 仅列出比较常用的几个 DS18B20 功能指令。 0 x44:开始转换温度。转换好的温度会储存到暂存器字节 0 和 1

12、。 0 xEE:读暂存指令。读暂存指令,会从暂存器 0 到 9,一个一个字节读取,如果要停止 的话,必须写下 DS18B20 复位。 14.814.814.814.8 DS18B20DS18B20DS18B20DS18B20 复位复位 DS18B20 的复位时序如下: 1.单片机拉低总线 480us950us, 然后释放总线(拉高电平) 。 2.这时 DS18B20 会拉低信号,大约 60240us表示应答。 3.DS18B20 拉低电平的 60240us 之间, 单片机读取总线的电平, 如果是低电平, 那么表示复位成功。 4.DS18B20 拉低电平 60240us 之后,会释放总线。 AV

13、R 单片机学习笔记-基于慧净 HJ-2G AVR 开发板 C 语言代码: /DS1302 复位函数 void DS1302_Reset() DDRA|=BIT(DQ);/DQ 为输出状态 PORTA/输出低电平 Delay_1us(500);/延迟 500 微妙 PORTA|=BIT(DQ);/示范总线 Delay_1us(60);/延迟 60 微妙 DDRA/DQ 位输出状态 while(PINA/等待从机 DS18B20 应答(低电平有效) while(!(PINA/等待从机 DS18B20 释放总线 14.914.914.914.9 DS18B20DS18B20DS18B20DS18B2

14、0 读写逻辑读写逻辑 0 0 0 0 与与 1 1 1 1 DS18B20 写逻辑 0 的步骤如下: 1.单片机拉低电平大约 1015us,。 2.单片机持续拉低电平大约 2045us 的时间。 3.释放总线 DS18B20 写逻辑 1 的步骤如下: 1.单片机拉低电平大约 1015us,。 2.单片机拉高电平大约 2045us 的时间。 3.释放总线 DS18B20 读逻辑 0 的步骤如下: 1.在读取的时候单片机拉低电平大约 1us 2.单片机释放总线,然后读取总线电平。 3.这时候 DS18B20 会拉低电平。 4.读取电平过后,延迟大约 4045 微妙 DS18B20 读逻辑 1 的步

15、骤如下: 1.在读取的时候单片机拉低电平大约 1us 2.单片机释放总线,然后读取总线电平。 3.这时候 DS18B20 会拉高电平。 4.读取电平过后,延迟大约 4045 微妙 AVR 单片机学习笔记-基于慧净 HJ-2G AVR 开发板 如果要读或者写一个字节,就要重复以上的步骤八次。如以下的 C 代码,使用 for 循环,和数据变 量的左移和或运算,实现一个字节读与写。 /DS18B20 写字节函数 void DS1302_Write(unsigned char Data) unsigned char i; DDRA|=BIT(DQ);/DQ 为输出 for(i=0;i=1; /DS18

16、B20 读字节函数 unsigned char DS1302_Read() unsigned char i,Temp; for(i=0;i=1;/数据右移 DDRA|=BIT(DQ);/DQ 为输出状态 PORTA/拉低总线,启动输入 PORTA|=BIT(DQ);/释放总线 DDRA/DQ 为输入状态 if(PINA Delay_1us(45);/延迟 45 微妙(最大 45 微妙) return Temp; 就是这么建档而已,不过这里有一个注意点,就是 Delay_1us(); 函数延迟的时间,必须模拟非常准 确,因为单线总线对时序的要求敏感点。 AVR 单片机学习笔记-基于慧净 HJ-2G AVR 开发板 14.1014.1014.1014.10 简单归纳简单归纳 实验开始之前, 简单的归纳一些重点。 单线总线高电平为闲置状态。 单片机访问 DS18B20 必须遵守,DS18B20 复位-执行 ROM

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 电子/通信 > 综合/其它

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号