【发布时间】:2020-04-03 06:08:30
【问题描述】:
我正在尝试在 Arduino Mega 的帮助下使用 MDB 协议与自动售货机进行通信,并且我在这方面取得了部分成功。
这里附上我正在使用的电路
虽然电路图如下所示
Arduino Mega 通过 Serial 1 与笔记本电脑通信,而自动售货机通信通过 Arduino Mega 的 Serial 2 完成。
USART 用于通信。
我面临的奇怪问题是,与自动售货机的通信仅在棕色线 A 和 B 最初未连接(将 Arduino TX 连接到自动售货机 RX)时才开始发送数据。一旦我看到来自自动售货机的数据,我将 A 和 B 线短接,Arduino 也开始向自动售货机发送数据。
但是,如果 A 线和 B 线在自动售货机的启动处连接,自动售货机不会向 Arduino 发送任何数据,因此不会发生通信。我想让它不用每次都手动连接 A 线和 B 线。
我已尝试将光耦 PC817C 替换为
- PC814
- 4N35
- 6N137 高速光耦
我尝试将 Hex Inverter 替换为
- 74HC04AP
我尝试在 A 线和 B 线之间放置一个机械继电器,然后是固态继电器,并尝试通过外部输入连接它们,但没有任何反应
我厌倦了在 A 线和 B 线之间添加一个光耦合器作为开关,并尝试通过固件对其进行控制。
我什至尝试用十六进制缓冲器 HCF4050BE 和非门替换十六进制逆变器,但无论上述组件的任何组合如何,问题仍然存在,它仅在最初未连接导线 A 和 B 然后在数据开始后短路时才有效来自自动售货机。
我正在使用MateDealer's 代码。
我想自动化这个手动过程,需要一个简单的解决方案。
【问题讨论】:
-
stackoverflow.com/tour 顺便说一句。好问题,只在错误的网站上。你应该问这个electronics.stackexchange.com
-
我不是电子专家,你为什么要检查两个逆变器?
-
@juraj 他们将使用 3 个逆变器,因为光耦合器也会逆变。另一个方向 (MDB_RX - RX1) 反转一次。这可能是一种假的 RS232toTTLSerial 逆变器。
-
@Juraj 如果没有两个逆变器,它根本无法工作。也许逆变器增加了有利的延迟,从而使通信发生。
-
@datafiddler 我使用的光耦合器是同相的。
标签: arduino serial-communication usart multidrop-bus