风筝
发表于: 2019-4-17 21:38:41 | 显示全部楼层

了解使用解码器和移位寄存器扩展Arduino上IO数量的不同方法。


所需的组件

●    Arduino开发板

●    4028 BCD解码器


一些较复杂的项目通常要求您使用大量微控制器的输入和输出线。您可以使用一些方法使其看起来像微控制器具有比实际更多的输入和输出。本文讨论了一些常用方法。


使用解码器扩展输出

解码器允许您使用n个输出线输出2n个信号。你可以使用AND逻辑门或者你可以得到一个随时可用的解码器IC来为你工作。

Extending Outputs with Decoders.png

使用解码器扩展输出


在上面的电路中,我使用了4028 BCD(二进制编码的十进制)解码器。这允许我使用Arduino的四条GPIO线来控制十个单独的晶体管,从而在数码管中打开和关闭十个不同的符号。


只要您想一次激活一个信号,就可以使用解码器方法。不可能同时启用十个输出中的两个或更多个。但是,由于输入是通过并行数据线提供的,因此该方法通常允许快速切换。


使用移位寄存器扩展输出

此方法还允许您扩展输出。但是,与解码器不同,数据一次一位地移入移位寄存器,因此通常是较慢的方法。但是,使用串行到并行移位寄存器可以同时输出多个位。此外,还可以菊花链式移位寄存器,从而可以大幅扩展可用输出的数量。


以下示例说明如何使用三条控制线为Arduino创建八个额外的输出线:

Using three control lines to create eight additional output lines.png

使用三条控制线创建八条额外的输出线


虽然它可能看起来很复杂,但事实并非如此。黄色、绿色、青色和橙色线是八个输出。 LED用作显示器。 Arduino的紫色、蓝色和绿色连接是控制移位寄存器和发送串行数据所必需的。其他一切都是由Arduino上的软件完成的。


使用移位寄存器扩展输入线

到目前为止,讨论的扩展IO线的方法只允许我们在使用更少的输出线时输出更多的位。但是,它也可以读取多个输入,同时只占用微控制器的一个输入引脚。该方法使用移位寄存器,就像上面的例子一样。然而,虽然用于扩展输出的电路使用串行到并行寄存器,但是扩展输入需要并行到串行移位寄存器。

Extending Input Line with Shift Register.png

使用移位寄存器扩展输入线


如果您需要更多输入或输出,可以级联移位寄存器。但是,请记住,添加的每级都会降低系统的整体速度。


使用编码器扩展输入线

就像移位寄存器一样,第一个例子中使用的解码器也是一个对应物:编码器。编码器允许您有2n个输入线,并将选择n个输出中的一个,然后由微控制器读取。


这使您可以确定哪些输入线被激活,例如,可用于读取旋转开关的状态。


总结

有多种方法可以使微控制器看起来有更多的IO线。如果您的外部电路需要比您的微控制器提供的GPIO线更多的GPIO线,或者如果您根本不想使用所有这些线来保持外部连接的数量很少,则可以使用这些技术。


但是,电路的整体速度可能会降低,您需要额外的IC。确定是否需要选择器,单个输出处于活动状态,或者同时激活任意数量的输出也很重要。

跳转到指定楼层
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题 700 | 回复: 1479



手机版|

GMT+8, 2024-3-29 13:57 , Processed in 0.141632 second(s), 6 queries , Gzip On, MemCache On. Powered by Discuz! X3.5

YiBoard一板网 © 2015-2022 地址:河北省石家庄市长安区高营大街 ( 冀ICP备18020117号 )

快速回复 返回顶部 返回列表