ds18b20学习及例程详解课件

上传人:s9****2 文档编号:570667896 上传时间:2024-08-05 格式:PPT 页数:64 大小:1.50MB
返回 下载 相关 举报
ds18b20学习及例程详解课件_第1页
第1页 / 共64页
ds18b20学习及例程详解课件_第2页
第2页 / 共64页
ds18b20学习及例程详解课件_第3页
第3页 / 共64页
ds18b20学习及例程详解课件_第4页
第4页 / 共64页
ds18b20学习及例程详解课件_第5页
第5页 / 共64页
点击查看更多>>
资源描述

《ds18b20学习及例程详解课件》由会员分享,可在线阅读,更多相关《ds18b20学习及例程详解课件(64页珍藏版)》请在金锄头文库上搜索。

1、Ds18b20Ds18b20使用使用ds18b20学习及例程详解一、ds18b20介绍温度传感器的种类众多,在应用于高精度、高可靠性的场合时 DALLAS(达拉斯)公司生产的 DS18B20 温度传感器当仁不让。超小的体积,超低的硬件开消,抗干扰能力强,精度高,附加功能强,使得 DS18B20 更受欢迎。ds18b20学习及例程详解二,ds18b20实物与示例图ds18b20学习及例程详解二,ds18b20特点与主机相互通信,只需要一根导线;出厂时,任何一个ds18b20在其ROM中都有存储自己唯一的一个64位的serial code;Vcc接地时,可以只由信号线,获取能量,电压为3.3v-5

2、v;温度转换范围为-55 +125(67F to +257F);在-10 +85之间,转换精确度为0.5;转换分辨率,912位(用户可控);ds18b20学习及例程详解当转换分辨率为12位时,最大转换时间为750ms;用户可定义的,非易失性(及断电不消失)的高低警报温度设置;可选择的 8-pin SO (150mil), 8-pin SOP, 和 3-pin TO-92 封装;软件协议与ds1822兼容;在温度控制,工业系统,日常消费品,等领域广泛使用。ds18b20学习及例程详解三,特点详述Ds18b20提供了912位精度的温度转换功能,以及非易失性的高低温度报警;Ds18b20与主机交换信

3、息时最少只需要一根数据线(当然地线必须接地);-55 +125转换,在-10 +85之间精度为0.5Ds18b20可以仅由数据线获取power(因为ds18b20内部有一个寄生电容在数据线为3.3-5v时存储power,当数据线为低电平时为其供电)而不需要外接电源;ds18b20学习及例程详解任何一个ds18b20,都有仅属于自己的一个64位的识别码,这使得,可以有多个ds18b20通过一条数据线与主机相连并发挥功能,换句话说,也就是一个主机,可以通过一条数据线,同时控制多个ds18b20进行工作(可以在大范围,多地点温度采集控制中使用);ds18b20学习及例程详解四,ds18b20内部构造

4、综述Ds18b20内部构造框架图为:ds18b20学习及例程详解64位ROM存储了ds18b20的唯一的序列码:高速暂存寄存器包含了2byte的温度存储器,用来存储ds18b20温度转换得到的数据;ds18b20学习及例程详解非易失性的警报触发存储器,用来存储高低警报温度T_high与T_low;configuration register:用户对其操作,可以控制ds18b20的转换精度;ds18b20学习及例程详解Ds18b20存在一个内部电容Cpp,起到寄生电源的作用;这使得,ds18b20的Vdd接地时,依然可以通过数据线,获取power,当DQ为高电平时,Cpp充电,当DQ为低电平时,

5、Cpp放电,为ds18b20提供能量;ds18b20学习及例程详解五,温度寄存器Ds18b20内部有一个2byte的高速暂存寄存器,用来存储ds18b20转换得到的温度数据;ds18b20学习及例程详解温度寄存器格式如图;其中高位字节中的bit11-bit15这五位用来表示温度的正负;即s=0时,表示温度为正值;S=1时,表示温度为负值;ds18b20学习及例程详解Ds18b20有用户可控的9-12位转换精度;当转换精度为12位时,如图,由bit0-bit11存储(符号也算一位)。转换精度为11位时,bit0不再使用;转换精度为10位时,bit0,bit1不再使用;转换精度为9位时,bit0-

6、bit2不再使用;ds18b20学习及例程详解12位转换精度时的存储示例图:12位转换精度时,即最小分辨率为0.0625负数存储时采用补码方式;ds18b20学习及例程详解这里有一点需要主要的是:Ds18b20温度存储器是高速暂存,也就是说,ds18b20掉电时,这个数据将会丢失。Ds18b20上电复位时,温度存储器中内容,默认为+85。所以,使用ds18b20时,如果在温度显示之前,没有来的及进行一次转换完成,那么就会看到一个85的短暂显示。ds18b20学习及例程详解六,警报信号每当ds18b20完成一次温度转换后,都会将得到的数据与两个警报存储器中的数据进行比较。ds18b20学习及例程

7、详解与TH(或TL)中的bit7-bit0,相对应的是温度存储器中的bit11-bit4,两者进行比较;当温度TH或480us以上,然后释放数据线(即使其变为高电平),1560us等待后,ds18b20将数据线拉低60-240us作为应答,然后释放数据线,等待与应对整个过程应该480us以上.整个初始化完成。ds18b20学习及例程详解初始化时序:ds18b20学习及例程详解所对应的程序:void dsinit() uint i; ds=0; i=60; while(i 0) i-; /延时523us(datasheet要求480us) ds=1; i=4; while(i 0) i-; ds

8、18b20学习及例程详解/*ds18b20wait函数void dswait() uint i; /while(ds); /这行无用,反而容易出现错误,可注释掉 while(!ds); /检测到应答脉冲 i=60; while(i 0) i-; /延时,因为ds18b20会拉低dq约240us,切RX时间不小于480usds18b20学习及例程详解十一,ROM cmdROM CMD作为step2,是主机对ds18b20的64序列码的操作,保证在数据线上有一个以上ds18b20时,能找到选定其中的一个。这些命令也可以使主机检测有多少或什么样的device在数据线上,以及是否有device处于了警

9、报状态。主机必须确保在进行ds18b20功能命令前,先进行一个rom cmd。ds18b20学习及例程详解所有的rom cmdSEARCH ROM F0hREAD ROM 33h MATCH ROM 55h SKIP ROM CChALARM SEARCH ECh ds18b20学习及例程详解具体各命令作用祥看datasheet。因为这里,我们只外接一个ds18b20,不需要进行64位序列码确认。也没有警报功能。所以,只需要进行skip ROMcch命令即可。程序中该语句为writebyte(0xcc);/skip rom cmdds18b20学习及例程详解十二,ds18b20功能命令这些命令

10、可以使主机对ds18b20的高速暂存寄存器中某些寄存器进行读写、开启一次温度转换以及检测电源供应方式。ds18b20学习及例程详解所有的功能命令:CONVERT T 44h 温度转换命令WRITE SCRATCHPAD 4Eh READ SCRATCHPAD BEh COPY SCRATCHPAD 48h RECALL E2 B8h READ POWER SUPPLY B4hds18b20学习及例程详解ds18b20学习及例程详解这里,我们只需要启动温度转换和读取结果两个命令;程序中: writebyte(0x44); /convert T cmd writebyte(0xbe); /read

11、 scratchpad cmdds18b20学习及例程详解程序:启动一次温度转换的完整程序/向ds18b20发送温度转换指令void sendchangecmd() dsinit(); /初始化ds18b20 dswait(); /等待da18b20回应 writebyte(0xcc); /skip rom cmd writebyte(0x44); /convert T cmdds18b20学习及例程详解读取温度结果的命令顺序:/向ds18b20读取数据命令void sendreadcmd() dsinit(); dswait(); writebyte(0xcc); /skip rom cmd

12、 writebyte(0xbe); /read scratchpad cmdds18b20学习及例程详解其他操作顺序,可以详看datasheet,图11,讲解很详细。我们这里只是最简单的应用。ds18b20学习及例程详解十三,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;ds18b20学习及例程详解Write

13、1:首先,主机将数据线拉低,并在15us之内释放数据线;当释放数据先后,主机将数据线拉高保持45usds18b20学习及例程详解Write 0:很简单,只需要主机,将数据线拉低,并保存60us以上即可;ds18b20学习及例程详解ds18b20学习及例程详解程序:void writebyte(uchar dat) uint i; uchar j; bit b; for(j = 0;j = 1; if(b) /写“1” ,将ds拉低15us后,在15us60us内将ds拉高,即完成写1 ds = 0; i+; i+; /拉低约6us,符合 0) i-; /延时约64us ,与前6us相加60us

14、 else /写“0”,将ds拉低60us-120us ds = 0; i = 8; while(i 0) i-; /延时约72us ds = 1; i+;i+; /整个写“0”过程已经超过60us,这里就不需要延时太长了 ds18b20学习及例程详解这里要注意一下 b = dat & 0x01; dat = 1;这使得b依次取到dat的八位(有低位到高位)这是因为,ds18b20读写时,均采取由低位到高位的顺序ds18b20学习及例程详解十四,read time slots只有主机开始read time slot时,ds18b20才能向主机传送信息;Therefore, the master

15、 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;ds18b20学习及例程详解与write 一样,read time slots 最少需要持续60us以上,而且两次read之间最少需要1us的间隔即recover time;一个read time slot 是由主机拉低数据位开始的;主机拉低数据位最少需要1us(即1us

16、;Ds18b20传输出来的数据,在主机拉低数据线后15us时有效,所以,主机必须在拉低数据线后15us以内释放数据线,并在即将到15us时,对数据线上的值进行采集;ds18b20学习及例程详解ds18b20学习及例程详解ds18b20学习及例程详解看15,16图,也就是说,主机采集数据线上数据时,最好尽量靠近15us末尾时;ds18b20学习及例程详解程序:bit readbit() uint i; bit b; ds = 0; i+; /延时约8us 符合至少1us ds = 1; i+; i+; /延时6us 符合在15us内取样 b = ds; i = 8; while(i 0) i-;

17、 /延时约64us 符合读时隙不小于60us return b;ds18b20学习及例程详解在readbit基础上得到readbyte的程序:uchar readbyte() uint i; uchar j,dat; dat = 0; for(i = 0;i 8;i+) j = readbit(); /最先读出的为低位dat = (j 1); return dat ;ds18b20学习及例程详解注意 j = readbit(); /最先读出的为低位dat = (j 1);通过移位和或操作,将得到的bit,按照先低位后高位的顺序组成一个byte;ds18b20学习及例程详解附录:程序:/*ds1

18、8b20init函数void dsinit() uint i; ds=0; i=60; while(i 0) i-; /延时523us(datasheet要求480us) ds=1; i=4; while(i 0) i-;ds18b20学习及例程详解/*ds18b20wait函数void dswait() uint i; /while(ds); /while(!ds); /检测到应答脉冲 i=60; while(i 0) i-; /延时,因为ds18b20会拉低dq约240us,切RX时间不小于480usds18b20学习及例程详解/*向DS18B20读取一位数bit readbit() ui

19、nt i; bit b; ds = 0; i+; /延时约8us 符合至少1us ds = 1; i+; i+; /延时6us 符合在15us内取样 b = ds; i = 8; while(i 0) i-; /延时约64us 符合读时隙不小于60us return b;ds18b20学习及例程详解/*向ds18b20读取一个字节,使用readbit()uchar readbyte() uint i; uchar j,dat; dat = 0; for(i = 0;i 8;i+) j = readbit(); /最先读出的为低位dat = (j 1); return dat ;ds18b20学

20、习及例程详解/*向ds18b20写一字节数据void writebyte(uchar dat) uint i; uchar j; bit b; for(j = 0;j = 1;if(b) /写“1” ,将ds拉低15us后,在15us60us内将ds拉高,即完成写1 ds = 0; i+;i+; /拉低约6us,符合 0) i-; /延时约64us ,与前6us相加60uselse /写“0”,将ds拉低60us-120us ds = 0; i = 8; while(i 0) i-; /延时约72us ds = 1; i+;i+; /整个写“0”过程已经超过60us,这里就不需要延时太长了 d

21、s18b20学习及例程详解/*向ds18b20发送温度转换指令void sendchangecmd() dsinit(); /初始化ds18b20 dswait(); /等待da18b20回应 writebyte(0xcc); /skip rom cmd writebyte(0x44); /convert T cmdds18b20学习及例程详解/*向ds18b20读取数据命令void sendreadcmd() dsinit(); dswait(); writebyte(0xcc);/skip rom cmd writebyte(0xbe); /read scratchpad cmdds18b20学习及例程详解/*获取当前温度int gettmpvalue() uint tmpvalue; int value; float t; uchar low,high; sendreadcmd(); /读取两个字节温度数据 low = readbyte(); high = readbyte(); /合并为一个整形变量 tmpvalue = high; tmpvalue 0 ? 0.5 : -0.5); return value;ds18b20学习及例程详解ds18b20学习及例程详解

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 资格认证/考试 > 自考

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