12930|24

44

帖子

0

TA的资源

纯净的硅(高级)

楼主
 

MAX485通信同步问题?求解??? [复制链接]

       初次搞485的多机通信(一主多从),现在遇到的问题令我很困惑。

       我的通信思路是,从机逐个与主机通信,即主机发送一帧数据(8字节,包含数据信息),呼叫从机,数据帧其中包括从机的地址。所有从机均接收到了主机的数据,然后比较,地址一致的从机响应主机,给主机返回一帧数据(8字节,包含数据信息),这样“呼叫,返回”为一次通信。按照这样的方式逐个完成与所有从机的通信。
        
       但是调试中要做到主机发送的数据从机即刻接收,从机返回的数据主机即刻接收很困难,我的处理方式是在主机发出数据后延时一段时间再接收从机返回的数据,这样一次通信才能成功。并且我的延时还很长,有0.5s,这对于有通信速度要求的场合是无论如何不能接收的。
       
       我现在也不知道问题出在那,
       
       请各位大虾不吝赐教,不胜感激。
此帖出自单片机论坛

最新回复

匹配电阻不对?最终怎么解决的呢?  详情 回复 发表于 2014-4-8 20:00
点赞 关注
 

回复
举报

4997

帖子

19

TA的资源

裸片初长成(初级)

沙发
 
原则上是这样的,电平转换需要一定时间,不过延时是否长了一点,你试试短一点看多少可以。
此帖出自单片机论坛
 
个人签名我的博客
 

回复

3138

帖子

0

TA的资源

裸片初长成(初级)

板凳
 

要有具体的东西方好分析

 估计是485收发方向切换时机不合适。发送方应该在FIFO数据全部送完之后,即在最后数据的停止位上切换成接收,否则如切早了会把后面的数据拦截掉,造成数据不全,接收方无所适从。
此帖出自单片机论坛
 
 
 

回复

44

帖子

0

TA的资源

纯净的硅(高级)

4
 

回复2#、3#

延时改短首先想到的就是这种方法,但是不行,延时改短点通信就不正常了,太短了干脆就接不到数据了,这种办法好像不行的。
     3# 的兄弟说的“485收发方向切换时机不合适”,能不能说清楚点,怎样判断数据到达停止位了啊???
此帖出自单片机论坛
 
 
 

回复

2641

帖子

0

TA的资源

五彩晶圆(中级)

5
 
延时只需要2、3个毫秒就够了,从机平时把需要发送的数据准备好,收到呼叫马上发送,收发都采用中断方式不会丢数据的,我们采用1主64从的方式,每帧100字节左右,巡检一遍小于30S,相当于主机呼叫从机10字节左右,从机给主机发送100字节左右只需0.5秒,2400波特率传输5-10公里的情况下哈
此帖出自单片机论坛
 
 
 

回复

2641

帖子

0

TA的资源

五彩晶圆(中级)

6
 
还有一个就是RTS需要调节好,个人认为通信最麻烦的就是时序的调节了
此帖出自单片机论坛
 
 
 

回复

3138

帖子

0

TA的资源

裸片初长成(初级)

7
 

回复 4楼 竹游子 的帖子

 因没见到具体的设计(电路图、程序),所以只能猜测。常见的一种问题是,程序一做完数据发送立马就切换方向走人。但其实程序里的“发送”只是把数据压进FIFO,此后的FIFO数据上通信线传送则是由硬件完成的。假如程序刚对FIFO写完数据就换向的话,通信数据的尾部就会被拦截掉。
 要确认问题其实不难,只要拿示波器跨接在通信线上看看就知道了。
此帖出自单片机论坛
 
 
 

回复

1583

帖子

0

TA的资源

五彩晶圆(高级)

8
 
使用串口中断不是很好吗???
串口上不是有一个TI,和RI标志吗???

等最后一次TI标志置位后就切换不是很好???
此帖出自单片机论坛
 
个人签名
 
 

回复

4997

帖子

19

TA的资源

裸片初长成(初级)

9
 
我以前做的,发送往后适当延时在切换。
此帖出自单片机论坛
 
个人签名我的博客
 
 

回复

44

帖子

0

TA的资源

纯净的硅(高级)

10
 

从机的代码

void Data_TxD()
{
        P10=1;                                //485控制端

        SBUF=0x97;                     //帧头字节
        while(TI==0);
        TI=0;

        SBUF=0x0f;
        while(TI==0);
        TI=0;

    for(sign=0;sign<5;sign++)
          {
              SBUF=Data_Buffer[sign];
              while(TI==0);
              TI=0;
      }

        SBUF=0x99;               //帧尾字节
        while(TI==0);
        TI=0;

    P10=0;
}


void serial (void) interrupt 4 using 1              //中断服务函数
{
   unsigned char Buffer;

   if(RI)   
        {       
        RI=0;
                 ES=0;

        P10=0;
            Buffer=SBUF;
   
            if(Buffer==0x97)
                {
                        port=0;
                }
            if(port<8)   
                {
                        DATA[port]=Buffer;
                        port++;
                }
            if(Buffer==0x99)  
                {
                        sign=0;
                }

        //P10=1;
         }
         ES=1;
}


void UART_Initialization(void)                       //UART配置
{
            TMOD=0x20;
          TL1=0xfd;
          TH1=0xfd;
          PCON=0x00;
          TR1=1;
          SCON=0x50;
          ES=1;
          EA=1;
}


/*****************主程序******************/

/**/
void main(void)
{

           P10=0;
             
        UART_Initialization();              //UART初始化



          while(1)
          {   
                      Rec_Data();        数据采集函数

              if(DATA[0]==0x97&&DATA[7]==0x99&&DATA[2]==0x01)
               {
            

                           Data_Buffer[0]=0x01;                         //地址字节
                           Data_Buffer[1]=Adata[0];                   //数据转存
                           Data_Buffer[2]=Adata[1];

                            Data_TxD();                                      // 数据返回         

               }   
                  
          }
}
此帖出自单片机论坛
 
 
 

回复

3138

帖子

0

TA的资源

裸片初长成(初级)

11
 

如果利用发送中断切换的话

原帖由 huchuan987 于 2010-7-23 13:47 发表 使用串口中断不是很好吗???串口上不是有一个TI,和RI标志吗??? 等最后一次TI标志置位后就切换不是很好???

各机可能不同,一般有两种发送中断容易混淆:

1、发送FIFO空中断——当FIFO里的最后一个数据交给P-S缓冲时发生;

2、发送完毕中断——最后一个发送数据到达停止位时发生。

 

用前者切换太早了,还在P-S传送中的数据会被拦截掉,要用后者切换。

 

此帖出自单片机论坛
 
 
 

回复

44

帖子

0

TA的资源

纯净的硅(高级)

12
 

485部分电路图

         

237]@AN[9]RXJK7K6~WBXDX.jpg (87 KB, 下载次数: 0)

237]@AN[9]RXJK7K6~WBXDX.jpg
此帖出自单片机论坛
 
 
 

回复

1583

帖子

0

TA的资源

五彩晶圆(高级)

13
 
原帖由 仙猫 于 2010-7-23 14:14 发表

各机可能不同,一般有两种发送中断容易混淆:
1、发送FIFO空中断——当FIFO里的最后一个数据交给P-S缓冲时发生;
2、发送完毕中断——最后一个发送数据到达停止位时发生。
 
用前者切换太早了,还在P-S传 ...



嗯,到是,当时考虑的那么仔细。
此帖出自单片机论坛
 
个人签名
 
 

回复

44

帖子

0

TA的资源

纯净的硅(高级)

14
 

原帖由 仙猫 于 2010-7-23 13:28 发表  因没见到具体的设计(电路图、程序),所以只能猜测。常见的一种问题是,程序一做完数据发送立马就切换方向走人。但其实程序里的“发送”只是把数据压进FIFO,此后的FIFO数据上通信线传送则是由硬件完成的。假如程 ...

          

 

                  不怎么会用示波器,用示波器怎么看啊,什么现象是正常的啊??

此帖出自单片机论坛
 
 
 

回复

3138

帖子

0

TA的资源

裸片初长成(初级)

15
 

回复 14楼 竹游子 的帖子

 1、从电路看,控制接口芯片方向的2、3脚(PB12、PB13)是要同时切换的,不知在程序里哪部分反映出来?
 2、接口芯片的B(7脚)上拉、A(6脚)下拉严格说是接反了,应该把A上拉B下拉才对,但是不是这个问题不好说。
 3、最简捷的办法还是看示波器,因为是自己编的程序,发送什么数据是知道的,在示波器上可以观察到数据是否正确。——当然,这首先需要知道串行异步通信数据是什么样格式的。
此帖出自单片机论坛
 
 
 

回复

44

帖子

0

TA的资源

纯净的硅(高级)

16
 

回复 15楼 仙猫 的帖子

上下拉 确实是搞反了,:( 不过还可以接收到数据。不知道这是不是问题的所在。
   上面的图是主机的电路,程序是从机的,所以没有PB11、PB12、PB13、PB14,主机是ARM系列的一款芯片。
此帖出自单片机论坛
 
 
 

回复

3138

帖子

0

TA的资源

裸片初长成(初级)

17
 

不管咋说这是个隐患。

原帖由 竹游子 于 2010-7-23 16:52 发表 上下拉确实是搞反了,:(" /> 不过还可以接收到数据。不知道这是不是问题的所在。 

 在TTL/CMOS下的异步通信中,“空闲状态”是以高电平表现的。 上下拉接反可能造成的问题是:如果在收发双方切换方向之际有一段时间处于无驱动状态的话,那么在接收端看来这是一个低电平,表示有侦测到起始位,错理解成有一个新的数据要进来。

 

此帖出自单片机论坛
 
 
 

回复

44

帖子

0

TA的资源

纯净的硅(高级)

18
 

回复 17楼 仙猫 的帖子

上下拉改过来了,但是,结果依然没什么改观,是不是从机代码有问题啊??是不是给主机发送的数据需要在中断中完成。
此帖出自单片机论坛
 
 
 

回复

3138

帖子

0

TA的资源

裸片初长成(初级)

19
 
 那就铁了心看示波器吧,反正要在这一行玩,总躲不开用示波器的。
此帖出自单片机论坛
 
 
 

回复

75

帖子

0

TA的资源

一粒金砂(初级)

20
 
void Data_TxD()
{
P10=1; //485控制端

SBUF=0x97; //帧头字节
while(TI==0);//这里改为while(TI==1);不知可以不????????????
TI=0;

SBUF=0x0f;
while(TI==0);//while(TI==1);????????????
TI=0;
此帖出自单片机论坛
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表