MAX485通信问题
电路如图
问题:接口连的是AVR M88V,EN端发送时高电平,接收时底电平。现在的问题是:当发送完成转为接收后,再转为发送时数据发送的数据有误,即不是我想要发的数据,请大侠指点。我已经花了快一个星期了。找不出是什么原因。
谢谢各位。 电路本身没什么问题,去检查程序吧,用示波器或者逻辑分析仪配合看一下波形就能找到问题了 跳过485IC,直接232试试
是不是EA脚时序问题? cu_ice 发表于 2017-5-17 11:39
跳过485IC,直接232试试
是不是EA脚时序问题?
直接是没有问题的,MAX485我换过了 ccstc 发表于 2017-5-17 11:37
电路本身没什么问题,去检查程序吧,用示波器或者逻辑分析仪配合看一下波形就能找到问题了 ...
我120欧的实际上没接,我的线不长。 线不长,没有120欧电阻不影响
如果第一次发送和接受都没有问题,那硬件肯定没问题了
还是看软件吧
ccstc 发表于 2017-5-17 11:55
线不长,没有120欧电阻不影响
如果第一次发送和接受都没有问题,那硬件肯定没问题了
还是看软件吧
如果是一直处于发送状态是没问题,或都一直接收 会不会是你的使能端翻转时没有给延时,导致吃掉了第一个位的数据。 Chuda 发表于 2017-5-17 16:08
会不会是你的使能端翻转时没有给延时,导致吃掉了第一个位的数据。
给了1MS还是一样。苦恼中……
#define MAX845_Send() (PORTD |=_BV(PD2))
#define MAX845_Read() (PORTD &= ~(_BV(PD2)))
//发送命令
void USART_Send_Command(unsigned char addre,unsigned char comma)
{
MAX845_Send();
// _delay_ms(1);
USART_Send_Addr(addre);//发送从机地址
USART_Send_Data(comma);//发送控制命令
MAX845_Read();
}
程序是这样的。 给楼主说一招:
直接将EA接RX 还是TX来着!
这样即可!
不必特意去专用IO口控制!
我的产品上 陆陆续续几千套了 都是这样接的 用得freemodbus 楼主是怎么debug的呢?
示波器,或者逻辑分析仪这些工具呢
再不济用万用表加断点也能找到问题 阿豪博士 发表于 2017-5-17 17:27
给楼主说一招:
直接将EA接RX 还是TX来着!
好像是将使能端反相后接TX 阿豪博士 发表于 2017-5-17 17:27
给楼主说一招:
直接将EA接RX 还是TX来着!
牛人,一接就行了,接到RXD。能说一下原因吗?
ccstc 发表于 2017-5-17 17:28
楼主是怎么debug的呢?
示波器,或者逻辑分析仪这些工具呢
再不济用万用表加断点也能找到问题 ...
只有指针万用表 这种是由于延时问题,延时地方加错了
在发送完成转接受的地方加至少500us以上的延时,否则最后一位发送不成功
当然接rx可以,意思是一只处于发送状态,有数据过来时转为接收。
RE和DE接一起就可以。
近距离,不用这么复杂。
dfood 发表于 2017-5-19 15:17
RE和DE接一起就可以。
近距离,不用这么复杂。
线总长度一米多一点吧,不用这个了,直接单片机出来经过一个220电阻连起来用也可以.
页:
[1]