将 Arduino 串行通信移植到独立的 atmega328

Porting Arduino serial communication to standalone atmega328

我在 Arduino2560 上完成了一个相当复杂的项目,我想将其移植到独立的 Atmega328。我的问题是项目中的一个功能是它可以通过串口与我的计算机通信(我制作了一个 C# 程序来在计算机端处理它,使用 COM3 端口)。然而,Arduino 将 USB 通信用于虚拟串行端口,我对如何为 Atmega 完成这件事感到有点困惑。它有 RX-TX 线,但下一步是什么?也许使用一些串行 USB 转换器?最好的方法是什么?有什么需要注意的吗? 谢谢。

考虑到您在计算机上提到了一个特定端口 COM3,我想我们可以假设您有一个本地 RS-232 端口(其中一个带有我们在过去但不再那么普遍了)。

如果是这样的话,那么你可以获得RS232 level shifter. You'll just have to make the connections to RX, TX, Vcc, and GND and this device will change the RS-232 voltage levels to whatever your board requires (most likely 5V or 3.3V). Some (maybe most) high-end development boards include this kind of level shifter so maybe check yours in case you already have it (if you do you'll probably see a MAX232 IC somewhere). Or if you are crafty you can also DIY.

如果您更喜欢连接到 USB 端口(当然,除非您明确更改 Windows 设备管理器上的配置,否则它不会 COM3)您可以选择USB-to-serial 适配器。在这方面,您有很多选择,最便宜的可能只有 5 美元,但我宁愿选择基于 FTDI 芯片的芯片,这种芯片如今无处不在,并已证明其可靠性。 This one 是一个很好的例子,并且成本与电平转换器相同。

现在,使用原生 RS-232 或 USB 适配器之间有什么区别吗?答案是,出于大多数实际目的,不。如果你去细节,比如缓冲区大小,会有差异,但如果你需要去那里,你需要研究这两种情况下的细节,看看你有端口(或你正在计划的端口)添加)满足您的需求。对于大多数情况,我会选择 USB,因为它无处不在(大多数笔记本电脑没有原生 RS-232)。

以上所有(基于 RS-232 and/or USB)都适用于电缆 运行最长 5 米(~15 英尺)的 USB 或者 10 到 15米(~30-45 英尺)。对于大多数业余爱好者或 at-home 项目来说,这应该足够了。如果你想要 运行 更长的电缆,你将不得不选择 RS-485 之类的东西。

如果您现在选择 USB 适配器,并且您认为将来可能需要重新放置您的电路板,最终距离您的计算机超过 20 米(15 米的 RS-232 + 5 米的 USB),只需确保您的适配器包含一个 TX 启用信号 (TXEN)。大多数基于 FTDI 芯片的适配器都会在一个引脚上有这个信号(就像我上面链接的那个),如果你想在 two-cable [=44= 上使用 RS-485,这会让你的生活更轻松] 巴士.

编辑: 根据下面的反馈,有新信息值得快速更新。

首先,您的 PC 上没有老式 RS-232 端口,其次,您必须在微控制器端设计连接。

考虑到这一点,很明显您必须选择 USB 解决方案。但是您需要选择是将两侧都转换为 RS-232 电平还是保持 TTL。该决定再次取决于您的公共汽车的长度。如果它真的很短(最多 2 米),那么您可以继续使用 TTL,否则为了安全起见,最好切换到 RS-232。有很多人会告诉您他们有更长的串行链路,但您永远不会知道它们有多可靠。

由于您必须设计电路板,我想将 MAX232 和一个 sub D-9 连接器集成在那里并获得您提到的用于您的 PC 的 cable 是有意义的。

或者,您可以只在电路板上添加一个连接器,并获得我在上面链接的用于微型端的 Sparkfun 电平转换器以及用于您的 PC 的相同 USB 转 RS-232。