步骤1:制作该项目所需的条件
硬件:
4个74HC595移位寄存器
4个16引脚DIP IC插座
16个1N4001二极管
2个10K电阻
1330电阻
1个5mm LED
该软件:
Arduino IDE
步骤2:关于主要组件(74HC595)
硬件部分它非常简单,并且基于74HC595移位寄存器,因此是一种简便且经济的方法,可以增加开发板上的数字I/O引脚数量。这种集成电路本质上是数字的,就像Arduino上的数字引脚一样,这意味着它们只能读取或写入高或低逻辑电平,不应将其用于从模拟传感器或电位计读取数据。
我们可以找到许多基于这种移位寄存器的硬件和电路,例如Adafruit电机护罩,7段模块。该电路的使用非常方便,并且是多路复用的一种很好的动手方法,它是一种有效的技术,用于控制连接在一起的许多组件。
您可以在线订购5张74HC595图片,价格低于6 $:亚马逊
那么如何使用74HC595!
该电路提供了三个接口引脚,分别是SHIFT_CLOCK(SH_CP),LATCH_CLOCK(ST_CP)和数据引脚(DS)。
第一步是将数据存储在存储寄存器中,为此,我们需要将锁存器引脚设置为LOW以禁用输出,这样当我们向74HC595发送新数据时,输出引脚将保持不变。
下一步是通过对时钟引脚施加脉冲并从数据引脚发送新数据的每个字节,逐位串行发送数据。
最后一步是将闩锁引脚设置为高电平。这样,寄存器将更新(并行输出)。
您可以在其数据表中找到有关该集成电路的更多详细信息。
我只是在解释如何移位寄存器可以工作,但是,我们将不做所有这些工作,因为我们将使用Arduino SPI库来控制整个过程,并且不要忘记您将拥有一个库来控制模块,而这只是有关移位寄存器的最后信息它具有8个并行输出(Q0-Q7)和一个串行输出(Q7‘)以进行级联。
步骤3:硬件设计(电路)
IOExtension模块基于四个移位寄存器(74HC595),可提供16个数字输入和16个数字输出,您只需在开发板上使用四个引脚即可控制模块,另外还需要Vcc和Gnd引脚
为了具有32个I/O引脚,我们将使用四个移位寄存器(74HC595),如图所示C。四个寄存器应具有同步的数据并同时更新所有输出和输入,这就是为什么我们应该将所有LATCH_CLOCK引脚以及所有SHIFT_CLOCK都连接在一起,但是第一个寄存器的Data引脚将连接到的原因您的Arduino开发板和其余寄存器将通过串行输出(Q7’)相互连接,这意味着将第一个移位寄存器的串行输出连接至下一个移位寄存器的数据引脚,依此类推。
我强烈推荐easyEDA网站制作您的PCB。
但是什么是easyEDA!
这是一个免费的在线电子设计自动化社区,允许创建,测试和编辑
在此处查找指向easyEDA平台的链接。
此在线程序在所有平台(甚至是android)上均受支持,借助easyEDA,您可以为文档制作Schematic Capture,电路仿真,在线PCB设计,可导入PCB和原理图文件,因此从这一点上我们可以理解,我们可以在此在线设计器中创建PCB,也可以仅使用其他软件来制造PCB,然后将gerber文件上传到easyEDA进行订购。
协同设计是最好的easyEDA的一部分,您可以使用公共或私人访问权限轻松协作并就设计发表评论。社区提供了完善的云开发,但这还不是全部,我们仍然拥有这个出色的Google chrome扩展,可以让您随时了解所有聊天伙伴和合作伙伴的活动。
登录后,开始一个新项目给它起个名字并选择其隐私权,别忘了简短的描述对您的合作伙伴总有好处,然后自动协助将指导您从选项和工具入手。在这个项目中,我们将使电路如图所示。 easyEDA库中有一些不可用的组件,例如74hc595移位寄存器,因此您应该在其他公共项目中进行搜索,只需写下标签并单击搜索,当找到它时,选择它,然后将其放在空白表中即可,但是您需要封装表示形式以完成PCB设计,因此请单击封装的空白区域并进行更新。
完成原理图后,您可以为文档下载漂亮的PDF或图像。关于PCB,单击“将项目转换为PCB”,您将获得适合您的电路的PCB,我在这个平台上真正喜欢的是它可以为您提供所需的组件,因此可以按您希望的方式放置它们。 easyEDA解决了手动路由的问题,使您只需单击一下即可制作自动路由器。
完成任务后,您可以添加一些选项,例如图像以改善外观,并添加一些指示器标签,然后如果要为PCB下订单,请单击制造输出按钮。我们的模块每5张图片不到30美元,这是一个不错的购买价格。
PCB收到很好
仅仅6天,我就收到了订单,给我留下了深刻的印象
第4步:软件(库)
IOGA扩展库是由MEGA DAS社区开发的,目的是促进使用同一社区制造的数字扩展模块(基于74HC595换档注册人)。
这是一个Github链接,用于下载该库。
此库包含所有必需的API,可以肯定地将这些库添加到您的libreries目录中,然后将它们用Arduino IDE编写的代码中使用。 。该软件包还包含示例文件,您可以在其中找到一些基本示例来演示如何将模块连接到开发板上以及如何利用API(例如DigitalRead和DigitalWrite示例),这些API表现出与Arduino digitalRead和digitalWrite API相同的行为。/p》
DigitalRead示例:
#include//包含MegaDAS_IOExtension头文件
const int SH_CP = 13;//13或ICSP-3(适用于Arduino Uno,Nano,Leonardo和101)52或//ICSP-3(适用于Arduino Mega2560和Mega1280)
const int DS = 11;//11或ICSP-4(适用于Arduino Uno,Nano,Leonardo和101)51或//ICSP-4(适用于Arduino Mega2560和Mega1280)
const int ST_CP = 3;
const int IN_P = 4;
const int LED = 13;
IOExtension myExt(SH_CP,DS,ST_CP,IN_P);//创建实例并命名为您想要的任何名称(在此示例中,实例为myExt)
void setup(){
pinMode(LED,OUTPUT);//将LED引脚配置为输出引脚
}
void loop(){
if(myExt.DigitalRead(1)== HIGH)//读取扩展模块digitalWrite(LED,HIGH)的第一个输入引脚//如果扩展输入为HIGH
else
digitalWrite(LED,LOW),则将LED输出设置为HIGH;//如果扩展输入为低,则将LED输出设置为低
}
DigitalWrite示例:
#include//包含MegaDAS_IOExtension头文件
const int SH_CP = 13;//13或ICSP-3(适用于Arduino Uno,Nano,Leonardo和101)52或//ICSP-3(适用于Arduino Mega2560和Mega1280)
const int DS = 11;//11或ICSP-4(用于Arduino Uno,Nano,Leonardo和101)51或
//ICSP-4(用于Arduino Mega2560和Mega1280)
const int ST_CP = 3;
const int IN_P = 4;
const int LED = 2;
IOExtension myExt(SH_CP,DS,ST_CP,IN_P);//创建实例并命名为所需名称(在此示例中,实例为myExt)
void setup(){pinMode(LED,OUTPUT);//将LED引脚配置为输出引脚}
void loop(){
myExt.DigitalWrite(LED,HIGH);//将第五个扩展模块引脚设置为HIGH
digitalWrite(LED,HIGH);//将第五个Arduino板引脚设置为HIGH
delay(1000);
myExt.DigitalWrite(LED,LOW);//将第五个扩展模块引脚设置为HIGH
digitalWrite(LED,LOW);//将第五个Arduino板引脚设置为HIGH
delay(1000);
}
我们试图确保您不会发现任何编码错误经过大量示例和不同用途组合测试后,由该库引起的。
该库允许用户编写最少的代码来控制所有输入和输出,因此仅使用两个简单的指令(例如DigitalRead(Pinx)或DigitalWrite(Pinx,value))就可以直接使模块运行并以肯定的方式确定MEGA DAS社区创建了这个Arduino库,以通过一些示例来解释该模块的使用。
步骤5:进行一些测试
按照上面的说明,我们得到了令人满意的结果,我们可以在没有任何问题的情况下使用新的GPIO引脚。
-
引脚
+关注
关注
16文章
1195浏览量
50429 -
74HC595
+关注
关注
7文章
191浏览量
30849 -
Arduino
+关注
关注
188文章
6469浏览量
186981
发布评论请先 登录
相关推荐
评论