共2条
1/1 1 跳转至页
,485 在485通讯时,特定条件下遇到的特殊问题
问
我在MSP430f123上跑ms/tp协议(系统里嵌了一个小的多任务操作系统),在调试发送数据时遇到了这样的一个问题
我的发送数据是用的发中断,开始发现我的最后一个数发出的总是 “ff”,经过分析发现,我在执行最后一个数的发中断服务时,我关了关了发中断,把485的收发控制端切换成了收状态,这时发送的“txdbuf”寄存器虽然空了,但是发送的“移位寄存器”才开始发出第一个起始位,我切成了收状态,其他的位就发不出去了,造成最后一个数发出的总是 “ff”
我想了几个解决的办法,但是总是不太妥当
1,不用发送中簖,太费CPU时间,发送一帧的数据有70多个字节,如果是9600的拨特率 要等70ms多,任务级高了,其他任务受不了;低了,通讯又不正常了.系统不允许
2,在发最后一个数后,在中断服务里等“移位寄存器”空后再做切换,但是中断服务的时间有过长了,至少是1ms, 系统也不允许
3,我在发数时多发送一个数,虽然有用的数据都发出去了,但是造成了一个字节的网络垃圾,给网络系统增加了负担
4,我想最后的一个数的起始位不会太长,用电容滤掉,但是查了一下手册 发现异步通讯的起始位是沿触发的 用电容会导致通讯不正常
我现在是想不出什么完美的办法了,请大侠们支个招吧 答 1: 第二个方法可以的啊,时间应该很短的! 答 2: 不行呀中断用1ms 的时间,任务在这段时间里都没有办法调度了,其他的任务都耽误了 答 3: 改变程序结构稍晚再切换485的收发状态。
或者用硬件法:
不要单独控485的状态,而用TXD来控制,要记得加反相器。 答 4: 感谢chunyang!您说的"稍晚再切换485的收发状态"。我考虑过,但是我的是嵌入式系统,退出了中断后不知道跑到哪儿个任务了
您说的"硬件法":
我觉得很可行,能给详细指教一下吗
您说的是不是用一个单稳态触发器,用TXD信号来控制其输入呀,其输出再加上其他的逻辑门来控制485的收发状态,
答 5: No!No! TDX经反相器后接收发控制(收及发应并联),这样发“0”时485处于“发”状态,发“1”时485处于“收”状态,配合总线偏置(这样最可靠),对方收到的仍是“1”,明白了?
但此法速度不能太高,因485切换需要时间,总线加静态偏置对可靠性和提高速度都有利。 答 6: 我明白了:) chunyang老师的方法实在是很妙!!我来试试.我们的总线速度最高要到57600,不知道能不能反应过来 答 7: 请问chunyang总线偏置是什么意思?
发“1”时,485处于收态,对方怎么还能收到“1”,是不是说这时总线上是高电平 答 8: 用电阻将485静态电平拉成逻辑1(485的标准)即为“总线偏置”,楼上第二个问题是由485芯片的结构决定的。 答 9: 不错。顶一哈。这样的交流就很有技术讨论的味道了 答 10: 电阻用多少合适啊?我现在用680欧,节点数多于70。合适不? 答 11: 偏置电阻吗?偏置电阻用1K即可。 答 12: 请问chunyang偏置电阻怎么接的,串在A,B上吗?还是接成上拉 答 13: A上拉、B下拉 答 14: 那接收的时候怎么办啊用TXD控制收发时,发送的时候是可以,但是接收的时候怎么办啊? 答 15: 楼上最好分析一下485接口IC的内电路75176的就行
我的发送数据是用的发中断,开始发现我的最后一个数发出的总是 “ff”,经过分析发现,我在执行最后一个数的发中断服务时,我关了关了发中断,把485的收发控制端切换成了收状态,这时发送的“txdbuf”寄存器虽然空了,但是发送的“移位寄存器”才开始发出第一个起始位,我切成了收状态,其他的位就发不出去了,造成最后一个数发出的总是 “ff”
我想了几个解决的办法,但是总是不太妥当
1,不用发送中簖,太费CPU时间,发送一帧的数据有70多个字节,如果是9600的拨特率 要等70ms多,任务级高了,其他任务受不了;低了,通讯又不正常了.系统不允许
2,在发最后一个数后,在中断服务里等“移位寄存器”空后再做切换,但是中断服务的时间有过长了,至少是1ms, 系统也不允许
3,我在发数时多发送一个数,虽然有用的数据都发出去了,但是造成了一个字节的网络垃圾,给网络系统增加了负担
4,我想最后的一个数的起始位不会太长,用电容滤掉,但是查了一下手册 发现异步通讯的起始位是沿触发的 用电容会导致通讯不正常
我现在是想不出什么完美的办法了,请大侠们支个招吧 答 1: 第二个方法可以的啊,时间应该很短的! 答 2: 不行呀中断用1ms 的时间,任务在这段时间里都没有办法调度了,其他的任务都耽误了 答 3: 改变程序结构稍晚再切换485的收发状态。
或者用硬件法:
不要单独控485的状态,而用TXD来控制,要记得加反相器。 答 4: 感谢chunyang!您说的"稍晚再切换485的收发状态"。我考虑过,但是我的是嵌入式系统,退出了中断后不知道跑到哪儿个任务了
您说的"硬件法":
我觉得很可行,能给详细指教一下吗
您说的是不是用一个单稳态触发器,用TXD信号来控制其输入呀,其输出再加上其他的逻辑门来控制485的收发状态,
答 5: No!No! TDX经反相器后接收发控制(收及发应并联),这样发“0”时485处于“发”状态,发“1”时485处于“收”状态,配合总线偏置(这样最可靠),对方收到的仍是“1”,明白了?
但此法速度不能太高,因485切换需要时间,总线加静态偏置对可靠性和提高速度都有利。 答 6: 我明白了:) chunyang老师的方法实在是很妙!!我来试试.我们的总线速度最高要到57600,不知道能不能反应过来 答 7: 请问chunyang总线偏置是什么意思?
发“1”时,485处于收态,对方怎么还能收到“1”,是不是说这时总线上是高电平 答 8: 用电阻将485静态电平拉成逻辑1(485的标准)即为“总线偏置”,楼上第二个问题是由485芯片的结构决定的。 答 9: 不错。顶一哈。这样的交流就很有技术讨论的味道了 答 10: 电阻用多少合适啊?我现在用680欧,节点数多于70。合适不? 答 11: 偏置电阻吗?偏置电阻用1K即可。 答 12: 请问chunyang偏置电阻怎么接的,串在A,B上吗?还是接成上拉 答 13: A上拉、B下拉 答 14: 那接收的时候怎么办啊用TXD控制收发时,发送的时候是可以,但是接收的时候怎么办啊? 答 15: 楼上最好分析一下485接口IC的内电路75176的就行
共2条
1/1 1 跳转至页
回复
有奖活动 | |
---|---|
【有奖活动】分享技术经验,兑换京东卡 | |
话不多说,快进群! | |
请大声喊出:我要开发板! | |
【有奖活动】EEPW网站征稿正在进行时,欢迎踊跃投稿啦 | |
奖!发布技术笔记,技术评测贴换取您心仪的礼品 | |
打赏了!打赏了!打赏了! |
打赏帖 | |
---|---|
vscode+cmake搭建雅特力AT32L021开发环境被打赏30分 | |
【换取逻辑分析仪】自制底板并驱动ArduinoNanoRP2040ConnectLCD扩展板被打赏47分 | |
【分享评测,赢取加热台】RISC-V GCC 内嵌汇编使用被打赏38分 | |
【换取逻辑分析仪】-基于ADI单片机MAX78000的简易MP3音乐播放器被打赏48分 | |
我想要一部加热台+树莓派PICO驱动AHT10被打赏38分 | |
【换取逻辑分析仪】-硬件SPI驱动OLED屏幕被打赏36分 | |
换逻辑分析仪+上下拉与多路选择器被打赏29分 | |
Let'sdo第3期任务合集被打赏50分 | |
换逻辑分析仪+Verilog三态门被打赏27分 | |
换逻辑分析仪+Verilog多输出门被打赏24分 |