搜索
bottom↓
回复: 7

用AQY210EH切换接在同一总线上的DS18B20信号端不能工作请问...

[复制链接]

出0入4汤圆

发表于 2014-6-13 17:07:37 | 显示全部楼层 |阅读模式
小弟用光耦继电器切换DS18B20信号以读取同一条总线上的多个温度头,不能读取也不能工作,请问有谁知道原因吗?原理图很简单

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

你熬了10碗粥,别人一桶水倒进去,淘走90碗,剩下10碗给你,你看似没亏,其实你那10碗已经没有之前的裹腹了,人家的一桶水换90碗,继续卖。说白了,通货膨胀就是,你的钱是挣来的,他的钱是印来的,掺和在一起,你的钱就贬值了。

出0入0汤圆

发表于 2014-6-13 17:10:46 | 显示全部楼层
你让我们帮你猜吗?。。。。。。。。

出0入4汤圆

 楼主| 发表于 2014-6-13 17:23:19 | 显示全部楼层
不好意思我把原理图上传一下,因为AQY210EH跟光耦的封装一样所以原理图中用光耦代替,DS18B20夹在锁紧座上。
DS18B20主要程序

/************************************************
*函数名称: void  DS1820_Init(void)
*入口参数: 无
*出口参数: 无
*函数功能: ds18b20初始化
*创建时间: 2012-02-03
*修改说明:
/************************************************/
void  DS1820_Init(void)
{
   DDRD|=BIT(5);            //设置端口为输出方式
   PORTD|=BIT(5);           //释放总线
   delayus(88);               //稍作延时
   PORTD&=(~BIT(5));        //拉低总线
   delayus(1000);              //延时480~960us  
   PORTD|=BIT(5);           //释放总线
   DDRD&=(~BIT(5));         //设置端口为输入方式
   delayus(25);               //延时15~60us
   while(!(PIND&BIT(5)));     //等待复位成功
   DDRD|=BIT(5);            //恢复端口为输出方式
   PORTD|=BIT(5);           //释放总线
   delayus(450);              //延时60~240us
}
/************************************************
*函数名称: void  DS1820_w_char(uchar dat)
*入口参数: 一个字节
*出口参数: 无
*函数功能: 写一个字符
*创建时间: 2012-02-03
*修改说明:
/************************************************/
void  DS1820_w_char(uchar dat)
{
   uchar i;
   for(i=0;i<8;i++)     //8位数据计数
   {
     DDRD|= BIT(5);          //设置端口为输出方式
     PORTD&=(~BIT(5));   //拉低总线
     delayus(25);             //延时
     if(dat&0x01)       //当前位是否是1
      {
        PORTD|=BIT(5);        //是1,拉高总线
      }
     else   
      {
        PORTD&=(~BIT(5));   //不是1而是0,拉低总线
      }   
     delayus(88);   //延时
     PORTD|=BIT(5);         //释放总线
     dat>>=1;   //数据右移1位,为送出新数据位做准备
   }  
   PORTD|=BIT(5);           //释放总线   
}
/************************************************
*函数名称: unsigned char DS1820_r_char(void)
*入口参数: 无
*出口参数: 一个字节
*函数功能: 读一个字符
*创建时间: 2012-02-03
*修改说明:
/************************************************/
unsigned char DS1820_r_char(void)
{
   uchar i,dat=0;            //定义一下,供后续程序使用
   for(i=0;i<8;i++)
    {
  DDRD|= BIT(5);         //设置端口为为输出方式
  dat>>=1;     //保存读入的数据位
  PORTD|= BIT(5);        //给脉冲  
  delayus(8);             //调整脉宽           
  PORTD&=(~BIT(5));     //结束脉冲
  delayus(25);            //延时
  PORTD|=BIT(5);        //释放总线
  DDRD&=(~BIT(5));      //设置端口为输入方式,准备读数据
  if(PIND&BIT(5))
   {
     dat|=BIT(7);         //读入高电平信号
   }
  else
   {
     dat&=(~BIT(7));      //读入低电平信号
   }
  delayus(88);             //延时              
}
   DDRD|=BIT(5);             //恢复总线端口为输出方式
   return dat;
}

本帖子中包含更多资源

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

x

出0入4汤圆

 楼主| 发表于 2014-6-13 17:26:25 | 显示全部楼层
activeleo 发表于 2014-6-13 17:10
你让我们帮你猜吗?。。。。。。。。

谢谢,原理图程序已经上传了,我想问一下光耦继电器次端导通时电阻约为25欧,这对串在总线信号端有没有影响?

出0入0汤圆

发表于 2014-6-14 10:27:40 | 显示全部楼层
围观ing

出0入4汤圆

发表于 2014-6-14 18:34:21 | 显示全部楼层
逻辑分析仪或者示波器抓下波形呗,理论上25欧电阻不影响的。另外18B20可以多个挂在同一总线上,你加切换干嘛

出0入4汤圆

 楼主| 发表于 2014-6-19 08:14:15 | 显示全部楼层
wajlh 发表于 2014-6-14 18:34
逻辑分析仪或者示波器抓下波形呗,理论上25欧电阻不影响的。另外18B20可以多个挂在同一总线上,你加切换干 ...

切换进行定位排序,把温度头分检出来。

出0入4汤圆

 楼主| 发表于 2014-7-1 14:42:08 | 显示全部楼层
原因找到了,是光耦继电器导通时存在25欧电阻,换光耦继电器导通电阻小EQY211EH就好了。
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-10-3 12:29

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

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