使用arduino切换3个双向通信通道的最佳方法

时间:2014-06-18 08:07:29

标签: arduino switch-statement uart

我正在尝试设计一个PCB,其中包含一个带UART接口的CO2传感器,一个使用UART的Xbee模块和一个AtMega328芯片。因为我在AtMega328上只有一个UART,所以我使用SoftwareSerial作为CO2模块。 Xbee模块直接连接到Atmega328上的数字引脚0和1(TX,RX)。这意味着如果我想编程Atmega328,我将不得不断开Xbee,反之亦然。 (编辑:我更希望通过硬件串口保持Xbee连接。将Xbee连接到SoftwareSerial会阻止我配置它并更改固件。)

在我之前尝试解决此问题时,我使用了6针接头和跳线(3x2)。要将Xbee连接到Serial,我创建了一条连接外部引脚的电缆,允许我闪存Xbee的固件。

我希望这个由Arduino控制。就我对电子学的有限知识而言,我会使用多个“双刀双掷”开关。如果我使用(例如)NX3L2467,这将给我以下选项: Switching combinations for DPDT switch

(F = FT232 UART-to-USB,D = ArDuino,X = Xbee模块)。我在我的例子中使用5Y *和6Y *来寻址第二个开关上的1Y *和2Y *引脚。

这将导致以下真值表: Truth table for DPDT switch

这种结构可以让我做我想做的事,将Xbee连接到Duino,将Duino连接到FTDI,将FTDI连接到Xbee。使用这些开关中的两个是最有效的方法来管理它而无需转移到另一个微控制器?是否有IC能够在这些设备之间切换,而且每个连接之间没有两个“开关”?

1 个答案:

答案 0 :(得分:1)

最便宜的解决方案是使用跳线。

如果你想要一个更“优雅”的解决方案,你可以使用一些三态缓冲器或一些数字多路复用器和多路分解器来代替一些开关。

以下是一个例子:

Mux and demux example

橙色有两个多路复用器,绿色两个多路复用器。 F-是FT232引脚,X-是XBee引脚,(猜猜是什么)A-是Arduino引脚。

以下是连接表:

  • FT232< - > XBee:a = 0,b = 1,c = 1,d = 0
  • FT232< - > Arduino:a = 0,b = 0,c = 0,d = 0
  • XBee< - > Arduino:a = 1,b = 1,c = 1,d = 1

你可以看到a和d总是一样的,比如b和c。因此,使用两个引脚(或开关或跳线),您可以控制它。

ad = 0 bc = 0 -> FT232 <-> Arduino
ad = 0 bc = 1 -> FT232 <-> XBee
ad = 1 bc = 1 -> XBee <-> Arduino

您可以使用数字开关代替使用多路复用器和多路分解器(如果您可以找到4开关IC,则可以使用它完成所有操作)。

这是“完整”的解决方案。如果您可以在RX引脚上容忍它,您可以“嗅”另一个通信,您可以保存一个IC:您在三个RX线中的每一个上放置一个2:1多路复用器连接到另外两个发送器(所以A- tx和F-tx连接到X-rx,依此类推)。通过控制这三个多路复用器,您可以选择您想要听的人。