找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2732|回复: 1
打印 上一主题 下一主题
收起左侧

多个18b20串联测温问题,求大神指导

[复制链接]
跳转到指定楼层
楼主
ID:405738 发表于 2018-10-23 21:13 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
10黑币
假设:串联4个18b20
      1.单片机上电后逐个给18b20供电读取rom序列号存入4个数组
       2.通过匹配rom序列号来读取温度。
读取rom序列号代码:
       void rom() //读取序列号
{
uchar i;
int j;
initionds18b20(); //复位
delay1(1); //延时
writeds18b20(0x33); //发送读序列号子程序
for        (j=0;j<9;j++)
{
         ds_rom1[j]=readds18b20(); //读取序列号存入数组


}

}
匹配代码:
     void Match_rom(uchar a)         //匹配ROM
{
        uchar j;
        writeds18b20(0x55);           //发送匹配ROM命令
        if(a==1)
        {
                for(j=0;j<8;j++)
                        writeds18b20(ds_rom1[j]);                //发送18B20的序列号,先发送低字节
        }
}

问题:数组内的数据处理,获取rom序列号后数组内可能是{28,b0,96,45,92,03,02,dd}通过匹配肯定不成功。
       {0x28,0xb0,0x96,0x45,0x92,0x03,0x02,0xdd}匹配成功

关于18b20使用疑惑:
  1网上教程大部分是将rom序列号写入程序中,如果更换18b20还要从新编写,我觉得不方便
  2还有一种是用18b20搜索,多个18b20搜索后读取温度值。问题是有的需要固定位置,这一起读取确定不了位置。
关于多点测温想法:
1.一个18b20连接一个端口
2.利用锁存器切换多个18b20供电.

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:401564 发表于 2018-10-24 23:41 | 只看该作者
这里的多点,指的是只用两根线,就在这两根线上并联多个18B20,不是串联.你说的锁存器,那不如直接用单片机的IO.
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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