搜索
bottom↓
回复: 28

RS485发送一组数据,最后两位数据丢失?不知道何故?

[复制链接]

出0入0汤圆

发表于 2010-6-21 18:19:58 | 显示全部楼层 |阅读模式
我用AVR MEGA16控制MAX485芯片发送数据,PC机端用RS232转485转接头收数据,当我用查询方式发送一组数据时(8个),最后两个总是丢失,不知道何故,请高手指点?

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

曾经有一段真挚的爱情摆在我的面前,我没有珍惜,现在想起来,还好我没有珍惜……

出0入4汤圆

发表于 2010-6-21 18:50:19 | 显示全部楼层
485的发送接收控制脚转换得慢一点试试。

出0入0汤圆

发表于 2010-6-21 18:53:30 | 显示全部楼层
支持楼上的,延时一段时间看!

出0入0汤圆

 楼主| 发表于 2010-6-21 20:44:54 | 显示全部楼层
用示波器观察发现:MAX485的发送使能引脚(RE DE连在一起)在发送完6个数据后被接收端口(RI)拉低,而且RI和发送使能引脚出现相反的电平变化。不知道是不是MAX485芯片有问题。

出0入0汤圆

 楼主| 发表于 2010-6-21 21:13:25 | 显示全部楼层
回二楼 banyai 三楼likedev :
   正是由于发送使能引脚和接收引脚产生完全相反的电平变化,如下图,好像发送使能引脚RE DE连在一起)受接收引脚(RI)控制一样,加延时只能是暂时缓解一下,不能根本解决问题。做的10多块PCB版上都是这种情况,是不是MAX485真的有问题,还是原理图有问题,请高手指点。

  
MAX485原理图 (原文件名:MAX485.jpg)


MAX485波形图 (原文件名:MAX485波形.jpg)

出0入0汤圆

发表于 2010-6-21 21:16:52 | 显示全部楼层
网上很多说要管脚却换要延时1MS

出0入0汤圆

 楼主| 发表于 2010-6-22 09:03:52 | 显示全部楼层
可是我的项目是485总线模式的,要求实时性强,延时1MS会出现很多麻烦,难道MAX485芯片非要加延时,这不符合常理啊。谁能说说具体原因?

出0入0汤圆

发表于 2010-6-22 09:06:33 | 显示全部楼层
发完了才关

出0入0汤圆

发表于 2010-6-22 09:06:48 | 显示全部楼层
回复【7楼】zek_sj  奎奎
可是我的项目是485总线模式的,要求实时性强,延时1ms会出现很多麻烦,难道max485芯片非要加延时,这不符合常理啊。谁能说说具体原因?
-----------------------------------------------------------------------
T35最少都是2mS,怕啥?

出0入0汤圆

发表于 2010-6-22 09:10:07 | 显示全部楼层
你先测试一下,切换收发状态后延时1MS 。 要搞好通信在说实时。

回复【9楼】lihuyong 如风似雾
回复【7楼】zek_sj  奎奎
可是我的项目是485总线模式的,要求实时性强,延时1ms会出现很多麻烦,难道max485芯片非要加延时,这不符合常理啊。谁能说说具体原因?
-----------------------------------------------------------------------
t35最少都是2ms,怕啥?
-----------------------------------------------------------------------

你说的T35是MODBUS上的那个帧间隔延时吗 ?

出0入4汤圆

发表于 2010-6-22 09:17:18 | 显示全部楼层
AVR串口发送有着发送完中断,在这个中断里切换485的收发脚,芯片资料里还有说明呢:

当整个数据帧移出发送移位寄存器,同时发送缓冲器中又没有新的数据时,发送结束标志
TXC 置位。TXC 在传送结束中断执行时自动清零,也可在该位写"1” 来清零。TXC 标志位
对于采用如RS-485 标准的半双工通信接口十分有用。在这些应用里,一旦传送完毕,应
用程序必须释放通信总线并进入接收状态。

MSP430单片机的串口是发送前中断,这个嘛得好好控制延时了

出0入4汤圆

发表于 2010-6-22 09:20:18 | 显示全部楼层
#pragma vector=USART_TXC_vect//串口发送中断呢
__interrupt void uart0_tx_isr(void)
{
//character has been transmitted
  tx_len++;
  if (tx_len>=tx_len2)
  {
    com1_rx();
    tx_len=0;
    tx_len2=0;
  }
  else
  {
    UDR = tx_buf[tx_len];
  }
}

出0入0汤圆

 楼主| 发表于 2010-6-23 09:48:01 | 显示全部楼层
回复【10楼】 bynce 罗曼
     我现在暂时是加1MS延时解决的,但是没有解决根本问题。
回复 【9楼】 lihuyong 如风似雾
     我在项目中用的是“主从令牌轮询”方式 ,利用RS485总线,一个主机逐个通过发送令牌读取从机(6个)的报警数据,要求从机报警数据在主机端实现实时报警。现在我把波特率提高到230.4K,轮询一个周期还要1~2s,加1ms延时,实在是影响实时性啊。   
回复 【11楼】 electricit  
     我程序用的是查询模式发送数据的,发送前置位DE使能端,占领总线,进入发送模式,发送完加1MS延时,清零使能,释放总线,进入接收模式。如果我不加1MS的延时,发送的一帧数据(8个),后面的两个数据总是丢失,用示波器观察使发送使能端在发送完6个数据后被接收端(RI)拉低。但不知道是什么原因。

出0入31汤圆

发表于 2010-6-23 11:30:42 | 显示全部楼层
上面有人说到了,控制端在数据完全移出移位寄存器以后才设置成接收状态
就好比一个漏斗,你卡嚓一下,倒进10升水,然后立刻把漏斗嘴堵上了,那水当然不能完全流出,你要等漏斗里的水都没了才去堵

出0入0汤圆

发表于 2010-6-24 13:05:51 | 显示全部楼层
LS比喻的太好了

出0入0汤圆

发表于 2010-6-24 16:51:04 | 显示全部楼层
14楼的比喻好

出0入0汤圆

 楼主| 发表于 2010-6-24 19:03:12 | 显示全部楼层
回 【14楼】 zchong  
我在每发送一个字节时都查询了是否发送完成标志位,等到发送完成了才往下执行。我怀疑是MAX485芯片本身的问题,但没有找到书面的证据。

出0入0汤圆

发表于 2010-6-24 19:37:57 | 显示全部楼层
我用STM32也碰到过这样的情况,使用DMA方式发送数据,在完成中断中切换485的控制脚,最后总有2个字节的数据发不出去


不过后来改协议才解决这个问题,就是每次发一帧数据的时候最后多发几个无效字节。

出0入0汤圆

发表于 2010-6-24 19:51:08 | 显示全部楼层
楼主的问题本人也遇到过,后来的解决方法和  【12楼】electricit  差不多,利用发送中断程序,当缓冲区的字节全部发送完后,调整485的控制引脚。

出0入0汤圆

 楼主| 发表于 2010-6-25 09:58:06 | 显示全部楼层
回复 【18楼】 hansur 忘山道人
   在我这个项目中发送无效字节有很大的不稳定因素,首先,无效字节的个数不确定,发送多了,接收会多接收无效字节,印象判断;其次,我用的是令牌轮询,如果对方收到令牌后在给我发送数据,而我这边的无效数据还在发送,这样可能会造成总线冲突。

出0入0汤圆

发表于 2010-6-25 10:14:31 | 显示全部楼层
多发送一个字节(=0x00)无效数据就可以解决了
我也是这样解决的

出0入0汤圆

发表于 2010-7-16 11:32:54 | 显示全部楼层
回复【楼主位】zek_sj 奎奎
-----------------------------------------------------------------------

哥子些和我遇到的问题一样,也是数据少2个,并且在PC接收的数据最后还多出一个0XFC或者0XFD,在大家的启发下,我在发送完毕之后马上加了一段延时,我的大于75微秒就行了,然后再去将发送状态改为接收状态,再延时,大于12.5微秒。希望对大家有所帮助。

出0入0汤圆

发表于 2010-8-6 17:36:07 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-8-6 17:37:42 | 显示全部楼层
通过延时可以解决,但是我的却是比发送的数据多收到1个字节0;

出0入0汤圆

发表于 2010-9-3 20:20:05 | 显示全部楼层
我正在写程序,也有碰到这个问题
有没有可靠的解决方案?

出0入0汤圆

发表于 2013-8-5 19:03:20 | 显示全部楼层
使用中,延迟比较好用,但还是不懂其真正的原因,希望高人能够详细讲解一下,谢谢!

出0入0汤圆

发表于 2013-8-5 19:10:14 | 显示全部楼层
发完最后一个字节后中断,这时候再切换,就不用延时了

出0入0汤圆

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

本版积分规则

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

GMT+8, 2024-8-26 09:15

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

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