IIC需要两条线,一条时钟线,一条数据线。

DS18B20通信只需一条数据线,即单总线。

如果一条总线挂了多个18B20,要访问指定的一个,我们就需要发送序列码,总线上的18B20收到序列码就会和自己的进行比较。

可以不外接电源,直接从数据线获取电。

其内部有一个AD转换器。

寄生电源就是不需要外部电源,从数据线吸取能量,数据线为高电平,器件从数据线吸取能量给内部电容充电,当为低电平,内部电容给18B20供电。为了增强工作电流,在单总线上放一个强上拉,一般通过一个场效应管,直接拉到电源上,因为手册上说,在进行温度转换或进行高速暂存器内容写到EEPROM时,工作电流达1.5mA,数据总线供电方式无法达到这么大,所以需要强上拉。

我们开发板采用的外部供电,只需要一个弱上拉。

这单总线还可以接其他单总线器件。

写0、1和复位是由主控制器发出,读0、1是由主控制器采样DS18B20发出的信号(也是主控制器发出的,它从DS18B20读),存在是由DS18B20发出。

IIC是从数据最高位开始传输,单总线这个是从最低位开始传输

温度是以两个字节储存的,一个低字节LSB,一个高字节MSB,默认上电是85℃。

高字节的S位是符号位。因为温度有正负,当S=1,就是负,S=0,就是正。其它的用来表示温度值。

TH用户字节1和TL用户字节2可用于做报警用。设置上限报警值和下限报警值。18B20转换来的温度如果高于TH或低于TL就会置位报警标志位,我们可以通过ROM命令在总线上搜索到哪一个DS18B20超过了温度设置,找出报警的芯片。

配置寄存器是配置温度传感器工作在多少位精度模式下。通过设置R1R0来配置。上电默认是12位精度。bit7是测试位,为1工作在测试模式下,出厂为0,不用改动。

byte5~7是保留位,上电默认值,没有用。最后一位是校验位,校验前面几位数据的,有兴趣可以看使用手册。

其中byte2~4可以保存到EEPROM中,掉电不会丢失,这三个数据主要就是通过EEPROM中的值来确认的,器件每次上电,EEPROM中的值都会被拷贝到高速暂存器中。

我们要配置DS18B20工作在多少位下时,可以通过DS18B20的一些指令往byte4写入数据,然后用功能指令把数据拷贝到EEPROM。如果不写到EEPROM,那么下次上电时,byte2~4数据就会丢失,会按照之前EEPROM值去执行。

ROM一共5条,每条1个字节,通过写时序,把1个字节数据发给18B20。

我们只挂接了一个DS18B20,所以就可以只用一条指令CCh。

单点总线是指总线只挂接了一个DS18B20。

多机通讯我们就需要用搜索ROM指令,搜索到编码储存起来,再发送匹配指令,再进行温度转换等

开始编程