(转)ds18b20时序说明

ds18b20时序说明

(转)ds18b20时序说明_第1张图片


新手在DS18B20读写过程中要犯很多错误。老衲普度众生,简要说明它怎么用。

1、过程1、2是初始化过程,每次读取都要初始化,否则18b20处于待机状态,无法成功读取。

过程1:拉低信号线480-700us,使它复位,然后释放总线15-60us,18b20会拉低总线60-240us,

然后它释放总线。所以初始化成功的一个标志就是能否读到18b20这个先低后高的操作时序。

(注意:黑色部分表示主机操作,蓝色部分表示18b20操作,每次主机操作完成之后等待18b20

状态时,必须要释放总线,比如将IO设置为高阻态什么的。否则18B20没法把状态写到线上)

2、过程3、4是写1bit数据过程。过程3是写0 ,过程4是写1。过程3:拉低总线60us,然后抬

高总线5us,完成。过程4:拉低总线5us,然后抬高总线60us,完成。

3、过程5、6是读1bit过程。过程5是读0,过程6是读1。过程5、6:拉低总线5us,然后释

放总线,读取总线,如果为0,则读入0,如果为1,则读入1

DS18B20的时序描述

DS18B20的控制流程

根据DS18B20的通信协议,DS18B20只能作为从机,而单片机系统作为主机,片机控制

DS18B20完成一次温度转换必须经过3个步骤:复位、发送ROM指令、发送RAM指令。每

次对DS18B20的操作都要进行以上三个步骤。
复位过程为:单片机将数据线拉低至少480uS,然后释放数据线,等待15-60uS让DS18B20

接收信号,DS18B20接收到信号后,会把数据线拉低60-240uS,主机检测到数据线被拉低

后标识复位成功;

发送ROM指令:ROM指令表示主机对系统上所接的全部DS18B20进行寻址,以确定对那一

个DS18B20进行操作,或者是读取某个DS18B20的ROM序列号。

发送RAM指令:RAM指令用于单片机对DS18B20内部RAM进行操作,如读取寄存器的值,

或者设置寄存器的值。
具体的RAM和RAM指令请查阅DS18B20的数据手册,下面简单介绍:

1、ROM操作命令

DS18B20采用一线通信接口。因为一线通信接口,必须在先完成ROM设定,否则记忆

和控制功能将无法使用。一旦总线检测到从属器件的存在,它便可以发出器件ROM操

作指令,所有ROM操作指令均为8位长度,主要提供以下功能命令:

1 )读ROM(指令码0X33H):当总线上只有一个节点(器件)时,读此节点的64位

序列号。如果总线上存在多于一个的节点,则此指令不能使用。

2 )ROM匹配(指令码0X55H):此命令后跟64位的ROM序列号,总线上只有与此序

列号相同的DS18B20才会做出反应;该指令用于选中某个DS18B20,然后对该DS18B20

进行读写操作。

3 )搜索ROM(指令码0XF0H): 用于确定接在总线上DS18B20的个数和识别所有的

64位ROM序列号。当系统开始工作,总线主机可能不知道总线上的器件个数或者不知

道其64位ROM序列号,搜索命令用于识别所有连接于总线上的64位ROM序列号。

4 )跳过ROM(指令码0XCCH): 此指令只适合于总线上只有一个节点;该命令通过

允许总线主机不提供64位ROM序列号而直接访问RAM,以节省操作时间。

5 )报警检查(指令码0XECH):此指令与搜索ROM指令基本相同,差别在于只有温

度超过设定的上限或者下限值的DS18B20才会作出响应。只要DS18B20一上电,告警

条件就保持在设置状态,直到另一次温度测量显示出非告警值,或者改变TH或TL的设

置使得测量值再一次位于允许的范围之内。储存在EEPROM内的触发器用于告警。

2、RAM指令

DS18B20有六条RAM命令:

1)温度转换(指令码0X44H):启动DS18B20进行温度转换,结果存入内部RAM。

2)读暂存器(指令码0XBEH):读暂存器9个字节内容,此指令从RAM的第1个字节

(字节0)开始读取,直到九个字节(字节8,CRC值)被读出为止。如果不需要读

出所有字节的内容,那么主机可以在任何时候发出复位信号以中止读操作。

3)写暂存器(指令码0X4EH): 将上下限温度报警值和配置数据写入到RAM的

2、3、4字节,此命令后跟需要些入到这三个字节的数据。

4)复制暂存器(指令码0X48H):把暂存器的2、3、4字节复制到EEPROM中,用

以掉电保存。

5)重新调E2RAM(指令码0XB8H):把EEROM中的温度上下限及配置字节恢复到

RAM的2、3、4字节,用以上电后恢复以前保存的报警值及配置字节。

6)读电源供电方式(指令码0XB4H):启动DS18B20发送电源供电方式的信号

给主CPU。对于在此命令送至DS18B20后所发出的第一次读出数据的时间片,

器件都会给出其电源方式的信号。“0”表示寄生电源供电。“1”表示外部电源供电。

下面是结合实际测试总结出来的DS18B20的操作流程

1、DS18B20的初始化

(1) 先将数据线置高电平“1”。
(2) 延时(该时间要求的不是很严格,但是尽可能的短一点)。
(3) 数据线拉到低电平“0”。
(4) 延时490微秒(该时间的时间范围可以从480到960微秒)。
(5) 数据线拉到高电平“1”。
(6) 延时等待(如果初始化成功则在15到60毫秒时间之内产生一个由DS18B20

所返回的低电平“0”。据该状态可以来确定它的存在,但是应注意不能无限的进行

等待,不然会使程序进入死循环,所以要进行超时控制)。
(7) 若CPU读到了数据线上的低电平“0”后,还要做延时,其延时的时间从发出

的高电平算起(第(5)步的时间算起)最少要480微秒。
(8) 将数据线再次拉高到高电平“1”后结束。
  
2、DS18B20的写操作
这是我加上来的  注意:以下为写0的过程,如果是写1的话,那么延时顺序会不同,具体见下面的时序图
(1) 数据线先置低电平“0”。
(2) 延时确定的时间为2(小于15)微秒。
(3) 按从低位到高位的顺序发送字节(一次只发送一位)。
(4) 延时时间为62(大于60)微秒。
(5) 将数据线拉到高电平,延时2(小于15)微秒。
(6) 重复上(1)到(6)的操作直到所有的字节全部发送完为止。
(7) 最后将数据线拉高。

也就是说当我们写1的时候用的是下面的时序
(1) 数据线先置低电平“0”。
(2) 延时确定的时间为2(小于15)微秒。
(3) 按从低位到高位的顺序发送字节(一次只发送一位)。
(4) 延时2(小于15)微秒。
(5) 将数据线拉到高电平,延时时间为62(大于60)微秒。
(6) 重复上(1)到(6)的操作直到所有的字节全部发送完为止。
(7) 最后将数据线拉高。具体到时看程序的时序就知道了。

3、 DS18B20的读操作

(1)将数据线拉高“1”。
(2)延时2微秒。
(3)将数据线拉低“0”。
(4)延时2(小于15)微秒。
(5)将数据线拉高“1”,同时端口应为输入状态。
(6)延时4(小于15)微秒。
(7)读数据线的状态得到1个状态位,并进行数据处理。
(8)延时62(大于60)微秒。

DS18B20时序图


(转)ds18b20时序说明_第2张图片

(转)ds18b20时序说明_第3张图片

你可能感兴趣的:(stm32)