搜索
bottom↓
回复: 16

RW1820兼容DS18B20温度传感器,发个stc15w408的c51测试程序供参考

[复制链接]

出0入0汤圆

发表于 2016-12-26 16:37:16 | 显示全部楼层 |阅读模式
本帖最后由 wkman 于 2016-12-26 16:45 编辑

有些项目简单一直用ds18b20系列的温度传感器。不过做为唯一器件,有时候还是要担心缺货的风险的。
幸好国产的ic不断做出了填补,希望越来越多的兼容器件出现,造福广大电工,

最近找到个号称兼容DS18B20的温度传感器ic,测试了下还可以,硬件算是兼容的,由于缩短的读写时隙的时间,
是不能直接用在原先的老电路板上,必须更新程序。//stc15w408as_IRC_11.0592Mhz测试
最快80ms读一次(12位分辨率下),程序只有读温度功能,其它功能暂时用不上,需要的改改ds18的也差不多





有需要的上tb自己找吧。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

阿莫论坛20周年了!感谢大家的支持与爱护!!

月入3000的是反美的。收入3万是亲美的。收入30万是移民美国的。收入300万是取得绿卡后回国,教唆那些3000来反美的!

出0入0汤圆

 楼主| 发表于 2016-12-26 16:37:48 | 显示全部楼层
//******************************************************************
//  RW18b20读写函数
//------------------------------------------------------------------

//stc15w408as_IRC_11.0592Mhz测试

//****************************************************************
//延时函数  !!!延时根据不同Crystal和不同mcu要调整!!!
//----------------------------------------------------------------
void delay18(unsigned int count)
{
    unsigned char i;
   
    while(count--)
    {
        for(i=0;i<3;i++)
        {
            _nop_();
            _nop_();  
            _nop_();
            
            _nop_();_nop_();_nop_();_nop_();_nop_();    //延长延时时间,现在旧探头也能用了!!!
            _nop_();_nop_();_nop_();_nop_();_nop_();                  
            _nop_();_nop_();_nop_();_nop_();_nop_();
            _nop_();_nop_();_nop_();_nop_();_nop_();
            _nop_();_nop_();_nop_();_nop_();_nop_();
            _nop_();_nop_();_nop_();_nop_();_nop_();     
            
            _nop_();_nop_();_nop_();_nop_();_nop_();    //再增加延时时间,避免长线出现断数据问题!
            _nop_();_nop_();_nop_();_nop_();_nop_();
        }
    }
}

//i=24=>2us
void delay_1us(unsigned int i)//us级延时
{   
    while(i--)    ;//精确延时
}
//******************************************************************
//第二个温度探头
//------------------------------------------------------------------
Init_DS18B20_1(void)//复位(通讯)
{
    unsigned char x=0;
   
    DQ = 1;     //端口I/O先拉高,准备复位
    delay18(4); //80us
   
    DQ = 0;     //通讯复位低电平
    delay18(28);//(28)=550us时隙
                //(30)=590us
               
    DQ=1;//加此句后,0xcc和0x44发送数据命令正确!!!   //DQ==1表示释放总线???
   
    x=DQ;       //如果x=0:则初始化成功;
    //if(x==)   //如果x=1:        失败;

    delay18(15);//补偿
}
//写字节
WriteOneChar_1(unsigned char my_dat)//写一个字节
{
    unsigned char i=0;
    unsigned char j=0;  
                        //0xcc=>204=>0b_1100_1100
                        //==>写入的第一位数据,LSB应该是“0”值啊,示波器看到“1”值??????
    EA=0;
   
    for (i=8; i>0; i--) //先写LSB低位,最后MSB
    {
        DQ = 0;         //写0
        delay_1us(2);   //就算要写“1”也得先发一个2.5us以上的L电平
                        //(1)=4~5us;(2)=8us;
        DQ = my_dat & 0x01;//写1
        //---------------------------------

        delay18(3);     //读写时隙78us(5T)
        //---------------------------------     //5T+
        DQ = 1;         //强制为1  恢复Trec     //恢复至少3us间隙,是由主机发出1高电平么??????
        delay_1us(2);   //(3)=7us间隔恢复时间
        
        my_dat >>= 1;   //写数据右移一bit,最后第8次是MSB写入
    }

    EA=1;
}
//读字节
ReadOneChar_1(void)//读一个字节
{
    unsigned char i=0;
    unsigned char my_dat = 0;
   
    EA=0;
   
    DQ=1;           //释放总线              //有无以下两句指令,无影响
    delay18(2);     //延时
    //---------------------------------
    for(i=8;i>0;i--)    //先读LSB低位,最后MSB
    {
        my_dat >>= 1;   //数据移1位             //读到的LSB数据向右移位,这样8次以后,最后读到的MSB在最高位
        
        DQ = 0;         //主机拉低总线          //按pdf_P27页要求,至少保持>3us低电平,后,主机要"释放总线"
        //---------------------------------
        delay_1us(1);   //保持20us      //在1T位置,做采样时间点
        
        DQ=1;           //释放总线              //zxy若无此两句,温度永远显示为0值,即,主机没有释放总线!!!
        delay_1us(3);   //延时10us左右          //何云成:疑问???
        
        if( DQ )        //==1                   //采样!!!
            my_dat |= 0x80;
            
        delay18(3);     //读写时隙78us          //保持4T,读时隙宽度
        //---------------------------------
        DQ=1;           //5T以后,强制1电平     //T_rec>3us满足此条件!!!
        delay_1us(2);   //(2)=8us维持,以便下一bit读取
    }

    EA=1;
   
    return(my_dat);
}
ReadTemperature_1(void)//读取RW1820温度值
{
    unsigned char a=0;
    unsigned char b=0;
    unsigned int t=0;
    long int tt=0;
   
    //Delay(85);            //等待80ms???再读温度==》没有任何改善???
    //while(DQ==0)  ;       //用此条件判读,亦无改善!!!
    //---------------------------------      
    Init_DS18B20_1();       //复位
   
    WriteOneChar_1(0xCC);   //跳过ROM
    WriteOneChar_1(0xBE);   //读暂存器
   
    a=ReadOneChar_1();      //L(温度值)
    b=ReadOneChar_1();      //H                 //后面值不需要了
    //---------------------------------
    Init_DS18B20_1();       //复位
        
    WriteOneChar_1(0xCC);   //Skip ROM 跳过     //0xcc=>204=>0b_1100_1100
    WriteOneChar_1(0x44);   //C-T启动温度转换
   
    //Delay(250);//延时250us    //何云成:疑问???    //zxy:不必要,因为读上一次温度就可以了
    //---------------------------------
    t=b;
    t<<=8;
    t=t|a;
   
    //tt=t*0.0625*10;
    tt=t*0.625;
   
    t=tt;
   
    return(t);
}

出0入0汤圆

发表于 2016-12-28 10:29:36 | 显示全部楼层
时序要求严格的,所以建议贴一下对应晶振,机器周期,main()..

出0入0汤圆

 楼主| 发表于 2016-12-28 10:36:17 | 显示全部楼层
node720 发表于 2016-12-28 10:29
时序要求严格的,所以建议贴一下对应晶振,机器周期,main()..

源程序头上就写了://stc15w408as_IRC_11.0592Mhz测试  1-wire总线,就是这样的,晶振频率不同,就得仔细调整,

出0入0汤圆

发表于 2016-12-28 10:39:39 | 显示全部楼层
留存备用,谢谢分享!

出0入0汤圆

发表于 2016-12-28 10:41:25 | 显示全部楼层
这个和DS18B20相比,时序不同吗?

出0入0汤圆

 楼主| 发表于 2016-12-28 10:49:02 | 显示全部楼层
javenreal 发表于 2016-12-28 10:41
这个和DS18B20相比,时序不同吗?

时序缩短了;   都是1-wire的思路,基本相同,

出0入0汤圆

发表于 2016-12-28 14:23:24 | 显示全部楼层
查了一下,RW1820号称是美国的,自称比DS18B20更强。 看功能介绍,确实比DS18B20多了一些功能。 到底是国产的还是美国的?

出0入17汤圆

发表于 2016-12-28 17:42:58 来自手机 | 显示全部楼层
好,果断代售。没人下手我就先下手啦

出0入0汤圆

发表于 2016-12-28 17:49:56 | 显示全部楼层
谢谢楼主,先做个记号

出0入0汤圆

发表于 2016-12-28 18:31:53 | 显示全部楼层
谢谢楼主分享,找了一下,看到RW1820A+ 好像精度更高

出0入0汤圆

发表于 2016-12-28 19:59:12 | 显示全部楼层
有官网吗? 这个IC多少银子?

出0入0汤圆

发表于 2016-12-28 20:11:17 | 显示全部楼层
这颗 价格 是什么情况?  比DS18B20便宜?

出0入0汤圆

 楼主| 发表于 2016-12-29 07:51:17 | 显示全部楼层
zljcat3721 发表于 2016-12-28 18:31
谢谢楼主分享,找了一下,看到RW1820A+ 好像精度更高

只在很小的温度段内0.1度精度,没啥特别意义

出0入0汤圆

 楼主| 发表于 2016-12-29 07:51:49 | 显示全部楼层
ayumi8 发表于 2016-12-28 20:11
这颗 价格 是什么情况?  比DS18B20便宜?

  价格嘛,上量了可以自己去砍价,肯定比ds18b20便宜很多

出0入0汤圆

 楼主| 发表于 2016-12-29 07:52:16 | 显示全部楼层
javenreal 发表于 2016-12-28 14:23
查了一下,RW1820号称是美国的,自称比DS18B20更强。 看功能介绍,确实比DS18B20多了一些功能。 到底是国产 ...

应该是国产的,,,

出0入0汤圆

 楼主| 发表于 2016-12-29 07:52:41 | 显示全部楼层
HZKJ 发表于 2016-12-28 17:42
好,果断代售。没人下手我就先下手啦


月关,早有此想法,,,不过,,,,,
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-26 14:06

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表