ds18b20的问题

作者&投稿:象命 (若有异议请与网页底部的电邮联系)
ds18b20使用时应注意的关键问题~

主机控制DS18B20完成温度转换时,在每一次读写之前,都要对DS18B20进行复位,而且该复位要求主CPU要将数据线下拉500μs,然后释放。DS18B20收到信号后将等待16~60μs左右,之后再发出60~240μs的低脉冲。主CPU收到此信号即表示复位成功。实际上,较小的硬件开销需要相对复杂的软件进行补偿。由于DS18B20与微处理器间采用串行数据传送方式,因此,在对DS18B20进行读写编程时,必须严格地保证读写时序,否则,将无法正确读取测温结果。

对于在单总线上所挂DS18B20的数量问题,一般人们会误认为可以挂任意多个DS18B20,而在实际应用中并非如此。若单总线上所挂DS18B20超过8个时,则需要解决微处理器的总线驱动问题,因此,在进行蓄电池单体多点测温系统设计时该问题要加以注意。

连接DS18B20的总线电缆是有长度限制的。试验中,当采用普通信号电缆且其传输长度超过50 m时,读取的测温数据将发生错误。而将总线电缆改为双绞线带屏蔽电缆时,正常通讯距离可达150 m,如采用带屏蔽层且每米绞合次数更多的双绞线电缆,则正常通信距离还可以进一步加长。这种情况主要是由总线分布电容使信号波形产生畸变造成的,因此,在用DS18B20进行长距离测温系统设计时要充分考虑总线分布电容和阻抗匹配问题。
在DS18B20测温程序设计中,当向DS18B20发出温度转换命令后,程序总要等待DS18B20的返同信号。这样,一旦某个DS18B20接触不好或断线,在程序读该DS18B20时就没有返回信号,从而使程序进入死循环。因此,在进行DS18B20硬件连接和软件设计时,应当给予足够的重视

18b20的测量精度是正负0.5摄氏度,最高分辨率是0.0625摄氏度(可设置采样精度来改变分辨率)。可以将分辨率提高或减小,但是精度是改不了的,由芯片决定了,可查阅datasheet。
比方说,你测得数据是:25.4325摄氏度,实际温度有可能是25.9度,也有可能是24度,这还不包括热传导带来的精度影响。
改变分辨率就简单了,例如:读取到到的温度是0x01fc,实际温度为:0x01fc*0.0625摄氏度,要改为0.1摄氏度的分辨率,则:0x01fc*0.0625*10,此时,每个bit代表0.1摄氏度。

DS18B20温度以16位带符号位扩展的2进制补码形式输出,该数乘以0.0652,即可

对应关系如下

+125度 0000 0111 1101 0000
+85度 0000 0101 0101 0000
+10.125度 0000 0000 1010 0010
+0.5度 0000 0000 0000 1000
0度 0000 0000 0000 0000
-0.5度 1111 1111 1111 1000
-10.125度 1111 1111 0101 1110
-55度 1111 1100 1001 0000

注意你计算是变量的初始化 千万不要用 unsigned char
变量用 unaigned int
0.0625=625/10000

试试吧


请问89s52程序设计
温控程序 include<reg51.h> define uchar unsigned char define uint unsigned int code uchar seven_seg[] = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};sbit dq = P1^0;uchar a,b;void delay(uint x){ while(x)x--;} uchar read_18b20(){ uchar i,rdata;for(i...

基于单片机的16×64点阵字符控制系统的设计
可以去我的博客下载: http:\/\/www.shenzhenwangzhanyouhua.com\/seo\/ds1302-18b20-1664-display.htmlLED...② 四六译码器 74LS154,作为 LED行线的译码选择(实际制作中考虑成本问题改为两个74HC138联合);③ ...char s;uchar inc;if(col<8)inc=0;else inc=1;for(s=4+inc;s>=0+inc;s--){SBUF=two_...

任何函数都能展开成幂级数形式吗?
不是!.幂级数,power series,指的是麦克劳林级数。也就是在 x = 0 附近展开的泰勒级数。.展开的条件是 n 阶连续可导,而 n 趋向于无穷。y = x⁴ + x³ + x² + x + 1,就不可能展开成无穷项的幂级数。.y = sinx,可以展开为无穷项的幂级数。但是 y = sin|x| ...

福泉市17215974856: DS18B20温度传感器不工作问题
历儿洛伐: 18b20转换需要时间同样需要电流,确保上拉电阻不能太大,一般4.7K

福泉市17215974856: DS18B20操作问题 -
历儿洛伐: copy 一段申矽凌微电子的CT1820例程给您参考如下(其读取速度快了近20多倍):uchar CT1820Init() { uchar i; DSPORT =0; //将总线拉低480us~960us delay600us(); //450us to 700us DSPORT =1; //然后拉高总线,如果CT1820做出反应会将在15us~60us后总线拉低 i = 0; // while(DSPORT) //等待CT1820拉低总线 { delay500us(); i++; if(i>1)//等待>5MS, set 2 = 2.48ms { return 0;//初始化失败 } } return 1;//初始化成功 }

福泉市17215974856: DS18b20测温度用1602显示为什么出现85度 -
历儿洛伐: 这是DS18B20的问题,DS18B20的温度初始值就是85度,所以在不进行数据更新时会显示85度.仔细阅读数据手册,你能学到很多东西.希望你能成功.

福泉市17215974856: 单片机DS18B20问题 -
历儿洛伐: 1、DS18B20的三个引脚的功能是什么?答:DS18B20的3个引脚分别为VCC电源正极、GND电源负极、DQ数据端.2、 DS18B20复位时间是多少?答:DS18B20复位时间是480us~960us.3、 如何判断DS18B20工作正常?答:不存在此功...

福泉市17215974856: 单片机,温度传感器ds18b20的接线问题
历儿洛伐: 温度传感器ds18b20属于慢速单总线通信温度采集器,由于通信速率低,一般情况下不加图中上拉电阻,只靠单片机io口的弱上拉也可以工作.但为了工作可靠和方便18B20接入传统单片机P0(传统单片机无上拉)口,接这个电阻.

福泉市17215974856: ds18b20读数错误 -
历儿洛伐: 因为定时器中断是强制性的,一旦计时溢出,无论程序执行到何处都会被暂停,优先去执行中断服务程序. DS18B20这种对时序有严格要求的单总线通讯,在发送和接收数据时被定时器中断扰乱了时序,所以无法通讯.要解决此问题建议你采...

福泉市17215974856: ds18b20误差问题 -
历儿洛伐: 你好: 导线有40米左右,单片机通信电平也就0~5V,经过这么长的距离电压一部分压降到了导线上,对通信影响肯定很大. 我有两个建议: 1.用无线通信.我就用NRF24L01做过DS18B20的无线温度测量. 2.用RS485通信,试想,假如40米的导线会压降2v电压,那么5v电压过来就成了3v,如果改用232或485通信,那么这点压降就不算什么了,通信就没问题了. 希望我的回答能帮助到你.

福泉市17215974856: 为什么我做的DS18B20数码管显示的温度不准确? -
历儿洛伐: 首先,要检查你的程序读出的DS18B20的温度值有没有问题,比如仿真中设定26°C,在程序中判断是不是26°C,若是,编一个简单的程序,让数码管输出1,这样就可以判定你的测温程序有没有问题.其次,最怀疑的地方就是你这个数码管的程序有问题,若你可以保证没有问题,可以排除这一块.最后,注意各个模块同一个寄存器的值是会相互影响的,存不存在一个模块破坏另一个模块寄存器值的情况.祝你成功!

福泉市17215974856: 3.3V 51单片机 型号是10L08XE 测试ds18b20时读不到数据 -
历儿洛伐: STC10L08XE是1T的51单片机.所以你的时序从12T移植到1T的单片机上会太快以至于无法让18b20接受.所以你需要看看stc的数据手册.确定每条指令的执行周期再下手.89C52的指令执行周期是12T,也就是说12M晶振一秒钟有1M条指令执行.但是10L08XE的指令执行周期从2T~6T,速度是不一定的.你需要查看数据手册.确定时间.重写程序.上拉10K就够了.4.7K太费电.

福泉市17215974856: 单片机DS18B20问题 -
历儿洛伐: 程序仿真没问题,那就是电路的问题了

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网