《ds18b20学习及例程详解》由会员分享,可在线阅读,更多相关《ds18b20学习及例程详解(64页珍藏版)》请在金锄头文库上搜索。
1、Ds18b20使用,一、ds18b20介绍,温度传感器的种类众多,在应用于高精度、高可靠性的场合时 DALLAS(达拉斯)公司生产的 DS18B20 温度传感器当仁不让。超小的体积,超低的硬件开消,抗干扰能力强,精度高,附加功能强,使得 DS18B20 更受欢迎。,二,ds18b20实物与示例图,二,ds18b20特点,与主机相互通信,只需要一根导线; 出厂时,任何一个ds18b20在其ROM中都有存储自己唯一的一个64位的serial code; Vcc接地时,可以只由信号线,获取能量,电压为3.3v-5v; 温度转换范围为-55 +125(67F to +257F); 在-10 +85之间
2、,转换精确度为0.5; 转换分辨率,912位(用户可控);,当转换分辨率为12位时,最大转换时间为750ms; 用户可定义的,非易失性(及断电不消失)的高低警报温度设置; 可选择的 8-pin SO (150mil), 8-pin SOP, 和 3-pin TO-92 封装; 软件协议与ds1822兼容; 在温度控制,工业系统,日常消费品,等领域广泛使用。,三,特点详述,Ds18b20提供了912位精度的温度转换功能,以及非易失性的高低温度报警; Ds18b20与主机交换信息时最少只需要一根数据线(当然地线必须接地); -55 +125转换,在-10 +85之间精度为0.5 Ds18b20可以
3、仅由数据线获取power(因为ds18b20内部有一个寄生电容在数据线为3.3-5v时存储power,当数据线为低电平时为其供电)而不需要外接电源;,任何一个ds18b20,都有仅属于自己的一个64位的识别码,这使得,可以有多个ds18b20通过一条数据线与主机相连并发挥功能,换句话说,也就是一个主机,可以通过一条数据线,同时控制多个ds18b20进行工作(可以在大范围,多地点温度采集控制中使用);,四,ds18b20内部构造综述,Ds18b20内部构造框架图为:,64位ROM存储了ds18b20的唯一的序列码:高速暂存寄存器包含了2byte的温度存储器,用来存储ds18b20温度转换得到的数
4、据;,非易失性的警报触发存储器,用来存储高低警报温度T_high与T_low;configuration register:用户对其操作,可以控制ds18b20的转换精度;,Ds18b20存在一个内部电容Cpp,起到寄生电源的作用; 这使得,ds18b20的Vdd接地时,依然可以通过数据线,获取power,当DQ为高电平时,Cpp充电,当DQ为低电平时,Cpp放电,为ds18b20提供能量;,五,温度寄存器,Ds18b20内部有一个2byte的高速暂存寄存器,用来存储ds18b20转换得到的温度数据;,温度寄存器格式如图; 其中高位字节中的bit11-bit15这五位用来表示温度的正负; 即s
5、=0时,表示温度为正值; S=1时,表示温度为负值;,Ds18b20有用户可控的9-12位转换精度; 当转换精度为12位时,如图,由bit0-bit11存储(符号也算一位)。 转换精度为11位时,bit0不再使用; 转换精度为10位时,bit0,bit1不再使用; 转换精度为9位时,bit0-bit2不再使用;,12位转换精度时的存储示例图:12位转换精度时,即最小分辨率为0.0625 负数存储时采用补码方式;,这里有一点需要主要的是:Ds18b20温度存储器是高速暂存,也就是说,ds18b20掉电时,这个数据将会丢失。 Ds18b20上电复位时,温度存储器中内容,默认为+85。所以,使用ds
6、18b20时,如果在温度显示之前,没有来的及进行一次转换完成,那么就会看到一个85的短暂显示。,六,警报信号,每当ds18b20完成一次温度转换后,都会将得到的数据与两个警报存储器中的数据进行比较。,与TH(或TL)中的bit7-bit0,相对应的是温度存储器中的bit11-bit4,两者进行比较; 当温度TH或480us以上,然后释放数据线(即使其变为高电平),1560us等待后,ds18b20将数据线拉低60-240us作为应答,然后释放数据线,等待与应对整个过程应该480us以上.整个初始化完成。,初始化时序:,所对应的程序: void dsinit() uint i;ds=0;i=60
7、;while(i 0) i-; /延时523us(datasheet要求480us)ds=1;i=4;while(i 0) i-;,/*ds18b20wait函数 void dswait() uint i;/while(ds); /这行无用,反而容易出现错误,可注释掉while(!ds); /检测到应答脉冲i=60;while(i 0) i-; /延时,因为ds18b20会拉低dq约240us,切RX时间不小于480us ,十一,ROM cmd,ROM CMD作为step2,是主机对ds18b20的64序列码的操作,保证在数据线上有一个以上ds18b20时,能找到选定其中的一个。 这些命令也可
8、以使主机检测有多少或什么样的device在数据线上,以及是否有device处于了警报状态。 主机必须确保在进行ds18b20功能命令前,先进行一个rom cmd。,所有的rom cmd SEARCH ROM F0h READ ROM 33h MATCH ROM 55h SKIP ROM CCh ALARM SEARCH ECh,具体各命令作用祥看datasheet。 因为这里,我们只外接一个ds18b20,不需要进行64位序列码确认。也没有警报功能。所以,只需要进行skip ROMcch命令即可。 程序中该语句为 writebyte(0xcc); /skip rom cmd,十二,ds18b2
9、0功能命令,这些命令可以使主机对ds18b20的高速暂存寄存器中某些寄存器进行读写、开启一次温度转换以及检测电源供应方式。,所有的功能命令: CONVERT T 44h 温度转换命令 WRITE SCRATCHPAD 4Eh READ SCRATCHPAD BEh COPY SCRATCHPAD 48h RECALL E2 B8h READ POWER SUPPLY B4h,这里,我们只需要启动温度转换和读取结果两个命令; 程序中:writebyte(0x44); /convert T cmdwritebyte(0xbe); /read scratchpad cmd,程序: 启动一次温度转换的
10、完整程序 /向ds18b20发送温度转换指令 void sendchangecmd() dsinit(); /初始化ds18b20dswait(); /等待da18b20回应writebyte(0xcc); /skip rom cmdwritebyte(0x44); /convert T cmd ,读取温度结果的命令顺序: /向ds18b20读取数据命令 void sendreadcmd() dsinit();dswait();writebyte(0xcc); /skip rom cmdwritebyte(0xbe); /read scratchpad cmd ,其他操作顺序,可以详看data
11、sheet,图11,讲解很详细。 我们这里只是最简单的应用。,十三,write time slot,主机在write time slot时对ds18b20进行写操作; 很显然,write有两种情况: Write 1 and write 0; 无论是write 1 or write 0 ,write slot 最少持续60us 。而且,两次write 之间,间隔必须大于1us ,作为recover time;,Write 1: 首先,主机将数据线拉低,并在15us之内释放数据线; 当释放数据先后,主机将数据线拉高保持45us,Write 0: 很简单,只需要主机,将数据线拉低,并保存60us以上
12、即可;,程序: void writebyte(uchar dat) uint i;uchar j;bit b;for(j = 0;j = 1;if(b) /写“1” ,将ds拉低15us后,在15us60us内将ds拉高,即完成写1ds = 0;i+; i+; /拉低约6us,符合 0) i-; /延时约64us ,与前6us相加60uselse /写“0”,将ds拉低60us-120usds = 0;i = 8;while(i 0) i-; /延时约72usds = 1;i+;i+; /整个写“0”过程已经超过60us,这里就不需要延时太长了 ,这里要注意一下b = dat 这使得b依次取到
13、dat的八位(有低位到高位)这是因为,ds18b20读写时,均采取由低位到高位的顺序,十四,read time slots,只有主机开始read time slot时,ds18b20才能向主机传送信息; Therefore, the master must generate read time slots immediately after issuing a Read Scratchpad BEh or Read Power Supply B4h command, so that the DS18B20 can provide the requested data;,与write 一样,read time slots 最少需要持续60us以上,而且两次read之间最少需要1us的间隔即recover time; 一个read time slot 是由主机拉低数据位开始的; 主机拉低数据位最少需要1us(即1us; Ds18b20传输出来的数据,在主机拉低数据线后15us时有效,所以,主机必须在拉低数据线后15us以内释放数据线,并在即将到15us时,对数据线上的值进行采集;,