将所有引脚用作数字I / O


11

增加数字引脚的数量

有许多文章解释了如何不仅在各种arduino上使用标准引脚,而且都没有正确解释局限性和问题。

在此处输入图片说明

Arduino Uno:

1.您可以使用模拟引脚

Pin 14 = Analog in 0
Pin 15 = Analog in 1
Pin 16 = Analog in 2
Pin 17 = Analog in 3
Pin 18 = Analog in 4
Pin 19 = Analog in 5

digitalWrite(14,HIGH);
or
digitalWrite(A0,HIGH);

2.您不能同时使用SDA,SCL和A4,A5,因为它们基本相同(18,19)。

3.您也可以使用TX / RX。

“不这样做,您就中断了串行通信……”

“切勿使用引脚0和1”

“您不能使用TX / Rx引脚”

您可以...但是您需要采取预防措施。哪个?

它应该具有通过USB串行的软件,对吗?

还是我断开USB串口?

如果我使用TX / RX,是否存在内部芯片问题?

当我在代码中使用那些TX / RX引脚时,我可能不应该使用Serial.print()

如果我Serial.print()在上传使用引脚0,1的代码后忘记删除该怎么办?

如果出现问题,如何硬件重置arduino / bootloader?

由于还有其他使用不同芯片的Arduino,上述内容是否适用于所有Atmel芯片?

那么,在使用那些TX / RX或其他模拟引脚之前,我知道什么?

有便宜的移位寄存器,pwm驱动程序,led驱动程序,spi,i2c和更多ic可以扩展您的I / O


但是,如果没有大问题,那就意味着arduino具有20个I / O引脚...

从理论上讲,您可以控制:

17x3 = 51 = 17 RGB leds (multiplexing, pwm sourcing&sinking);
14x6 = 84 leds (multiplexing, pwm on 6 rows/colums );
10x10 = 100 leds (multiplexing, high low);
20x(20-1) = 380 leds (charlieplexing, high low);
// yes it would flicker

如我错了请纠正我。这意味着您可以使用二极管和一个arduino控制380“ Whatever”。

Answers:


8

主要问题是引脚0和1。

许多引脚分配有多种功能,例如A4和A5也是I2C引脚,引脚10/11/12/13也是SPI引脚,等等。但是引脚0和1是实际上唯一的多功能引脚有东西附在板上。

所有其他引脚虽然是多功能的,但其功能基本上由您所连接的引脚定义。由于引脚0和1已经在板上连接到USB接口芯片,因此其使用可能性受到更多限制。

  • 在草图(Serial.begin())中启用串行后,这两个引脚将不再可靠地用于数字IO。

这意味着,你可以任意使用的硬件串口或者您可以使用引脚用于数字IO,但不能同时使用。

  • 连接到引脚0和1的设备可能会干扰串行连接

这包括上载草图。您有来自PC的串行数据,而相同的引脚受到连接到它们的其他事物的影响。最常见的是GPS模块之类的东西,这些模块连接到这些引脚并不断发送串行数据。该串行数据将与PC的串行数据冲突,并且两者均无法正确到达。

  • 如果序列受到草图的干扰,如何上传草图?您如何“重置”董事会?

你不知道 干扰串行的不是您的草图,而是物理连接到这两个干扰的IO引脚的东西。只需将这两个引脚与所连接的所有引脚断开,您就可以再次上传草图。现在,许多防护罩都开始在其上添加一个小开关以断开那些引脚,以便您可以在不拔出防护罩的情况下上传草图。您还可以对连接到这些引脚的其他设备使用相同的技巧-添加双刀单掷或双刀双掷(而不是使用一个位置)以轻松地将两个引脚与其余引脚隔离您的硬件在需要时。

  • 这会影响所有的Arduino开发板吗?

不,只有那些使用USB到串行桥接芯片的设备-诸如Uno,Due,Mega等。具有直接USB连接的电路板不使用TX和RX引脚来上传草图-它们使用专用的USB D +和D-引脚。那是诸如莱昂纳多(Leonardo)之类的板,一些较小的(微型?微型?我忘了哪个)板,等等。


“现在许多盾牌都开始增加一个小的开关”了。Micro有“ USB转串口桥接芯片”吗?这是否意味着我可以在uno上使用0,1引脚,但不能在micro上使用?
cocco

您可以在没有USB到串行网桥的任何设备上使用它们。Uno有1个,Mega有1个,Mini没有1个,但是您需要在外部将一个连接到TX / RX引脚以对其进行编程。所有这些都出来了。Micro和Leonardo没有一个,因此您可以使用它们。
马延科

那就是@Nick Gammon在说什么?Uno和您写下的其他电阻具有上拉电阻,这些电阻不允许您正确使用引脚0和1,而Micro没有上拉电阻,因此引脚0和1可以正常工作,并且USB可以上传新草图吗?
cocco

尼克曾一度被误认为这一点。没有任何上拉电阻。如果主MCU和USB芯片都尝试同时将同一条线路驱动到相反的电平,那么会有一对小型串联电阻器来防止出现问题。您可以在Uno原理图中以RN4A和RN4B的形式看到它们。
马延科

如果USB芯片碰巧尝试驱动RX引脚(您已经插入USB端口并打开了串行连接[或者可能只是刚刚插入,不确定),那么它会影响RX引脚上的电压,无论如何您正在做草图,因此使用该销钉进行charlieplexing之类的操作可能并不安全。
马延科

1

由于声誉不足,我无法发表评论,但我想指出,OP引脚至少有一个引脚错误!

PB6应该是PB5

我花了很多时间试图弄清楚为什么在示波器(SPI总线)上看不到SCK。我的工作水平较低,而不是使用IDE。

因为这是谷歌搜索时出现的第一张图片,所以我想避免给其他人带来同样的麻烦...


0

20x(20-1)= 380 leds(字符复合,高低); 如我错了请纠正我。这意味着您可以使用二极管和一个Arduino控制380个“ Whatever”。

第一,380这个数字是20名的引脚(20正确2 - 20)然而销0和1被连接到在Atmega16U2上拉电阻,所以他们从来没有真正在0V。如果加载空白草图,则将在引脚0和1上测量5V。

其次,您不能通过Charlieplexing 驱动380个“任何” 光源,而不能驱动380个LED。LED的特性,即电流仅以一种方式流过,对于其工作方式非常重要。

相关问题arduino上是否可以有14个以上的输出引脚?


第一:如果我在引脚0和1上放两个带电阻的LED会发生什么,将引脚0设为高,引脚1设为低延迟1秒,将引脚0设为低,引脚1设为高延迟1sec,会发生什么?
cocco

第二:“无论如何”,我指的是开关……单击开关,簧片开关,传感器或支持高低电平的各种输入输出组合。electronicdesign.com/site-files/electronicdesign.com/files/…使用二极管完成。
cocco

好吧,不是真的。Charlieplexing是一种多路复用形式,因此,除非您希望您的开关像疯了似的那样单击,否则它实际上对它们不起作用。这是一种输出情况,因此您不会像您所想的那样进行输入。我建议您阅读其他链接。这里的移位寄存器或端口扩展器比Charlieplexing更实用。
尼克·
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.