温度传感器DS18B20搜索64位序列号

2024-11-22 12:09:34
推荐回答(3个)
回答(1):

64位光刻ROM的前8位是DS18B20的自身代码,接下来的48位为连续的数字代码,最后的8位是对前56位的CRC校验。64-位的光刻ROM又包括5个ROM的功能命令:读ROM,匹配ROM,跳跃ROM,查找ROM和报警查找。64-位光刻ROM的结构图如图4.7所示。
图4.7位64-位光刻ROM的结构图
4.3.4 DS18B20外部电源的连接方式
DS18B20可以使用外部电源VDD,也可以使用内部的寄生电源。当VDD端口接3.0V—5.5V的电压时是使用外部电源;当VDD端口接地时使用了内部的寄生电源。无论是内部寄生电源还是外部供电,I/O口线要接5KΩ左右的上拉电阻。 连接图如图4.8、图4.9所示。
图4.8 使用寄生电源的连接图
图4.9外接电源的连接图
4.3.4 DS18B20温度处理过程
4.3.4.1配置寄存器
配置寄存器是配置不同的位数来确定温度和数字的转化。配置寄存器的结构图如图4.10所示。
图4.10 配置寄存器的结构图
由图4.9可以知道R1,R0是温度的决定位,由R1,R0的不同组合可以配置为9位,10位,11位,12位的温度显示。这样就可以知道不同的温度转化位所对应的转化时间,四种配置的分辨率分别为0.5℃,0.25℃,0.125℃和0.0625℃,出厂时以配置为12位。温度的决定配置图如图8所示。
图4.11 温度的决定配置图
4.3.4.2 温度的读取
DS18B20在出厂时以配置为12位,读取温度时共读取16位,所以把后11位的2进制转化为10进制后在乘以0.0625便为所测的温度,还需要判断正负。前5个数字为符号位,当前5位为1时,读取的温度为负数;当前5位为0时,读取的温度为正数。16位数字摆放是从低位到高位,温度的关系图如图4.12所示。
图4.12为温度的关系图
4.3.4.3.DS18B20控制方法
DS18B20有六条控制命令,如表4.1所示:
表4.1 为DS18B20有六条控制命令
指 令 约定代码 操 作 说 明
温度转换 44H 启动DS18B20进行温度转换
读暂存器 BEH 读暂存器9个字节内容
写暂存器 4EH 将数据写入暂存器的TH、TL字节
复制暂存器 48H 把暂存器的TH、TL字节写到E2RAM中
重新调E2RAM B8H 把E2RAM中的TH、TL字节写到暂存器TH、TL字节
读电源供电方式 B4H 启动DS18B20发送电源供电方式的信号给主CPU
4.3.4.4 DS18B20的初始化
(1) 先将数据线置高电平“1”。
(2) 延时(该时间要求的不是很严格,但是尽可能的短一点)
(3) 数据线拉到低电平“0”。
(4) 延时750微秒(该时间的时间范围可以从480到960微秒)。
(5) 数据线拉到高电平“1”。
(6) 延时等待(如果初始化成功则在15到60毫秒时间之内产生一个由DS18B20所返回的低电平“0”。据该状态可以来确定它的存在,但是应注意不能无限的进行等待,不然会使程序进入死循环,所以要进行超时控制)。
(7) 若CPU读到了数据线上的低电平“0”后,还要做延时,其延时的时间从发出的高电平算起(第(5)步的时间算起)最少要480微秒。
(8) 将数据线再次拉高到高电平“1”后结束。
其时序如图4.13所示:
图4.13 初始化时序图
4.3.4.5 DS18B20的写操作
(1) 数据线先置低电平“0”。
(2) 延时确定的时间为15微秒。
(3) 按从低位到高位的顺序发送字节(一次只发送一位)。
(4) 延时时间为45微秒。
(5) 将数据线拉到高电平。
(6) 重复上(1)到(6)的操作直到所有的字节全部发送完为止。
(7) 最后将数据线拉高。
DS18B20的写操作时序图如图4.14所示。
图4.14 DS18B20的写操作时序图
4.3.4.6 DS18B20的读操作
(1)将数据线拉高“1”。
(2)延时2微秒。
(3)将数据线拉低“0”。
(4)延时15微秒。
(5)将数据线拉高“1”。
(6)延时15微秒。
(7)读数据线的状态得到1个状态位,并进行数据处理。
(8)延时30微秒。
DS18B20的读操作时序图如图4.15所示。
图1.15 DS18B20的读操作图

回答(2):

A•总线上只有一个器件
复位发CCH SKIP ROM命令发44H开始转换延时复位发CCH SKIP ROM命令发读存储器命令连续读出两个字节数据(即温度)->结束
B•总线上挂接多个器件
复位发55H MATCH ROM命令发64位地址发44H开始转换命令延时复位发55H MATCH ROM命令发64位地址发0BE读存储器命令连续读出两个字节数据(即温度) 复位读下个器件温度

64位序列号可以用0X33指令一个一个地读取出来
用OX33读取的时候总线上只能有一个DS18B20如果要用0XF0搜索的话很麻烦,即使是搜出来了,你还得人为地把每个DS18B20放在不同的地方来获取该处的温度。

回答(3):

仔细阅读18B20的技术资料,里面有介绍的。