请教ds18b20 点击:22436 | 回复:415



gongkongedit

    
  • 精华:1099帖
  • 求助:0帖
  • 帖子:14392帖 | 54470回
  • 年度积分:0
  • 历史总积分:622
  • 注册:2008年9月08日
发表于:2004-02-26 09:29:00
楼主
我正在做ds18b20的多点测量实验,但是输出的温度有时正确有时错误(为85度),不知道是什么原因?另外我采用外接电源的方法,没有mos强的上拉,不知道会不会有影响?



sediment

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 1回
  • 年度积分:0
  • 历史总积分:1
  • 注册:2007年6月25日
发表于:2007-06-25 09:29:00
361楼
to digi:
    能发给我一份源程序吧,刚学习DS18B20不久,写出的程序温度值不会随外界温度而变化。
    canghaike1984@163.com
     另外想问一下,为什么读入的值都在28H-29H呢?若是多个DS18B20点,那么又是放在哪个地方,怎么确定?
    3X,很急,在线等您的回复。

maha678

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 6回
  • 年度积分:0
  • 历史总积分:6
  • 注册:2007年7月04日
发表于:2007-07-05 08:55:00
362楼
to digi:
  你好,digi,我现在在用18B20做一个测温系统,线路想做成100m左右的,不知道18B20要不要隔离,如果不能隔离,那如何实现100M的线路。
谢谢好人啊!!
  

digi

  • 精华:19帖
  • 求助:0帖
  • 帖子:52帖 | 797回
  • 年度积分:0
  • 历史总积分:1171
  • 注册:2001年9月19日
发表于:2007-07-05 09:41:00
363楼
18B20测量不需要隔离,长距离传输时不能用推荐电路,需要换驱动电路.

maha678

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 6回
  • 年度积分:0
  • 历史总积分:6
  • 注册:2007年7月04日
发表于:2007-07-05 11:44:00
364楼
非常谢谢,digi
  驱动是不是只是电源驱动就可以了,也就是在VCC端接个驱动芯片,如果线路在50m内还要驱动吗,能给个带驱动的电路图吗。我的邮箱是daibibo2004@163.com
   万分感谢!

digi

  • 精华:19帖
  • 求助:0帖
  • 帖子:52帖 | 797回
  • 年度积分:0
  • 历史总积分:1171
  • 注册:2001年9月19日
发表于:2007-07-05 14:29:00
365楼
呵呵,我手头也没有现成的,以前好像有过,但好久没用,不知是不是上次硬盘坏了的原因

yinxiaojing

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 3回
  • 年度积分:0
  • 历史总积分:3
  • 注册:2007年7月05日
发表于:2007-07-05 22:58:00
366楼
  请问必须要用汇编编吗?因为其他部分都用c 编的,不太会用混编。我写的程序,时序是按照要求写的阿。初始化的时候先将数据位置低,然后延时500us 之后再置高。再延时个20us之后检查dq位,为低的话说明有设备。但是,为什么我怎么也检查不出有设备呢?谁遇到过相同的问题,急啊。谢谢答复阿~

我的邮箱是:yinxiaojing@126.com

digi

  • 精华:19帖
  • 求助:0帖
  • 帖子:52帖 | 797回
  • 年度积分:0
  • 历史总积分:1171
  • 注册:2001年9月19日
发表于:2007-07-06 09:32:00
367楼
如果用C编程,注意咬准时序,多花些心思也能读取正确

yinxiaojing

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 3回
  • 年度积分:0
  • 历史总积分:3
  • 注册:2007年7月05日
发表于:2007-07-06 15:31:00
368楼
digi你好

   我把我的延时先放while(1)里面,先给一个led灯赋1,延时,再赋零,再延时。这样子观察它的时间长短的。可以吧?按照这种方法,我把时序控制在要求范围内,应该不会有错的阿。为什么检测有没有设备时,dq总是1?实在是想不明白。。。

maha678

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 6回
  • 年度积分:0
  • 历史总积分:6
  • 注册:2007年7月04日
发表于:2007-07-07 10:27:00
369楼
to digi:
我的也出现这种情况,从18B20读出来的全部是1,请问这是什么原因?
谢谢

maha678

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 6回
  • 年度积分:0
  • 历史总积分:6
  • 注册:2007年7月04日
发表于:2007-07-07 14:55:00
370楼
这是我的程序,为什么总是检测不到18B20,哪位高手给我看看啊,谢谢!!


#include "SPCE061V004.H"
#define uchar unsigned char
#define uint unsigned int
void init_1820();
write_1820(uchar x);
uchar read_1820();
void send_byte(uchar x);
void delay(uint x);
disp_led(long exact_temp);
//void disp_l();
uchar disp_table[16] = {
  0x003f,0x0006,0x005b,0x004f,0x0066,0x006d,0x007d,0x0007,
  0x007f,0x006f,0x0077,0x007c,0x0039,0x005e,0x0079,0x0071};
//uchar dp;
//long exact_temp;
long  k;
void main()
{   
    int i;
    uchar templ,temph;
    long exact_temp;
    //disp_led(0,0);
    *P_SystemClock=0x0040;//32.765MHz
    delay(3000);
    *P_IOA_Dir=0xffff;
    *P_IOA_Attrib=0xffff;
    *P_IOA_Data=0x0000;
    
    *P_Watchdog_Clear=0x0001;
    
    *P_IOB_Dir=0xffff;
    *P_IOB_Attrib=0xffff;
    *P_IOB_Data=0x0000;
    while(1)
    {
    init_1820();
    write_1820(0xcc);
    write_1820(0x44);
    delay(600);
    init_1820();
    *P_Watchdog_Clear=0x0001;
    write_1820(0xcc);
    write_1820(0xbe);
    for(i=0;i<750;i++)   //每次转换需要延时750ms以上
    {
        disp_led(exact_temp);
        delay(500);
    }   
    templ=read_1820();
    temph=read_1820();
    exact_temp=(temph*256+templ)*0.0625;
    //k=exact_temp;
    *P_Watchdog_Clear=0x0001;
    //exact_temp=46;
    disp_led(exact_temp);
    
    }

}
void delay(uint x)//1us

    while(x--);
    
    
}
void init_1820()
{
    long exact_temp;
    *P_IOA_Data|=(1<<2);
    *P_IOA_Data&=~(1<<2);
    delay(600);//至少480us
    
    *P_IOA_Data|=(1<<2);
    
    *P_IOA_Dir=0x0000;
    *P_IOA_Attrib=0x0000;
    
    delay(30);//15-60us
    while(!(*P_IOA_Data&(1<<2)))//测试用,但一直检测不到?是什么原因??
    {
        exact_temp=20;
        disp_led(exact_temp);
    }
    //k=40;
    //while(k--);
    
    
    *P_IOA_Data&=~(1<<2);
    delay(200);//60-240us
    *P_IOA_Dir=0xffff;
    *P_IOA_Attrib=0xffff;
}
write_1820(uchar x)
{
    uchar i;
    for(i=0;i<8;i++)
    {
    *P_IOA_Data=0x0000;
    if(x&(1<<i))
      *P_IOA_Data|=(1<<2);
    else
    *P_IOA_Data&=~(1<<2);
    delay(30);//15-60us
    *P_IOA_Data|=(1<<2);
    }
    *P_IOA_Data|=(1<<2);    
}
uchar read_1820()
{
    uchar i,temp=0;
    for(i=0;i<8;i++)
    {
        *P_IOA_Data&=~(1<<2);
        delay(3);
        *P_IOA_Data|=(1<<2);
        delay(30);//>15us
        *P_IOA_Dir=0x0000;
        *P_IOA_Attrib=0x0000;
        if(*P_IOA_Data&(1<<2))
            temp|=(1<<i);
        else 
            temp&=~(1<<i);
            delay(100);//60-120us
           *P_IOA_Data|=(1<<2);    
    }
    return (temp);
}
disp_led(long exact_temp)
{
  uchar e_temp,e_temp1,e_temp2,e_temp3;
      e_temp=exact_temp;
      e_temp1=e_temp%10;
      e_temp2=e_temp/10;
      e_temp3=e_temp2%10;
      
      *P_IOB_Data=(0x0100|disp_table[e_temp1]);
      delay(500);
      *P_IOB_Data=(0x0200|disp_table[e_temp3]);
      
     //delay(50);

maha678

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 6回
  • 年度积分:0
  • 历史总积分:6
  • 注册:2007年7月04日
发表于:2007-07-10 15:08:00
371楼
我的18B20还是检测不到,DQ一直是高电平,不知道是什么原因,哪位高手指点一下啊,上面是我的程序
万分感谢!
 殷晓静你的问题解决了吗?

yangran

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 1回
  • 年度积分:0
  • 历史总积分:51
  • 注册:2007年7月12日
发表于:2007-07-12 10:21:00
372楼
digi:
       你好,我们现在用单片机做单点DS18B20测温,接89c51单片机 程序调了好几天,总是显示85度,不清楚是什么原因,您能不能把单点测温单片机汇编源程序发给我一份,谢谢!!
邮箱:summeryy77@sina.com       

maha678

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 6回
  • 年度积分:0
  • 历史总积分:6
  • 注册:2007年7月04日
发表于:2007-07-12 17:33:00
373楼
yangran:
   你好,我的18B20怎么总是是检测不到,读出的总是一,电路连接应该没问题,你能把你的程序发给我看看吗,最好能说明一下电路是怎么连的。
      万分感谢啊!
  我的邮箱是daibibo2004@163.com
  

szf911

  • 精华:0帖
  • 求助:0帖
  • 帖子:1帖 | 9回
  • 年度积分:0
  • 历史总积分:55
  • 注册:2007年7月18日
发表于:2007-07-18 15:41:00
374楼
在多点测量DS18B20的时候遇见了问题,匹配ROM和读存储区的时候程序没什么反应了……请教大家,关于读序列号和匹配后再读温度的程序……不胜感激!
szf911@163.com

华安4

  • 精华:1帖
  • 求助:0帖
  • 帖子:15帖 | 99回
  • 年度积分:0
  • 历史总积分:160
  • 注册:2006年11月30日
发表于:2007-07-18 19:00:00
375楼
TO digi朋友:
  我现在需要总线上挂120个18B20,通过74LS245出去。听说要加中继器。我不知道么样做这个东东。是不是还有其他的方法增加驱动能力。请指教。谢谢!

【半兽人】

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 1回
  • 年度积分:0
  • 历史总积分:1
  • 注册:2007年7月23日
发表于:2007-07-23 16:59:00
376楼
digi sir:
  我想要一个18b20的单点汇编程序做参考,能给我邮箱发一份吗?非常感谢!我的信箱是wei_berg@126.com

digi

  • 精华:19帖
  • 求助:0帖
  • 帖子:52帖 | 797回
  • 年度积分:0
  • 历史总积分:1171
  • 注册:2001年9月19日
发表于:2007-07-23 17:13:00
377楼
to 小书童9
虽然18B20一条总线上可以连接很多传感器,但从现场使用经验来看,一条总线上一般建议控制在64点以内,甚至更少.
主要原因有以下两点:
一条总线连接120点,对于设备驱动能力要求较高;
一条总线上连接120点时,特别容易出现接线错误的情况,同时由于节点很多,造成故障排除时很困难.
多用一条总线从性价比考虑,还是比较恰当的
to 【半兽人】
邮件已发送,请查阅.

华安4

  • 精华:1帖
  • 求助:0帖
  • 帖子:15帖 | 99回
  • 年度积分:0
  • 历史总积分:160
  • 注册:2006年11月30日
发表于:2007-08-01 18:49:00
378楼
谢谢digi朋友的支持!
有没有其他的解决方案。就是说在一条线上尽量挂多一点18B20咧。比如增加驱动电路或者中继电路。我也听朋友说过一次可以加中继的。但是我不会搞。呵呵。希望有知道的朋友提供帮助。谢谢!我窟窟7264463欢迎互相交流。

阿尔赛斯

  • 精华:0帖
  • 求助:0帖
  • 帖子:1帖 | 2回
  • 年度积分:0
  • 历史总积分:5
  • 注册:2006年9月16日
发表于:2007-08-05 11:20:00
379楼
我用的是AVR的单片机,对与上拉电阻还用接吗,以为AVR的输出有上拉模式

阿尔赛斯

  • 精华:0帖
  • 求助:0帖
  • 帖子:1帖 | 2回
  • 年度积分:0
  • 历史总积分:5
  • 注册:2006年9月16日
发表于:2007-08-05 11:38:00
380楼
在用AVR时应怎么和18B20连接?

热门招聘
相关主题

官方公众号

智造工程师