108个传感器之-移位寄存器 74HC595(50)
介绍
关于Arduino的好处之一是,它具有相当多的I/O口。您可以连接一些按钮,传感器,伺服器等,但是随着设备的增加,有可能很快就会用完引脚。
解决方案之一就是本文介绍的–移位寄存器,该寄存器使我们可以在Arduino(或任何微控制器)中添加更多的I/O引脚。到目前为止,最广泛使用的移位寄存器是74HC595,也称为“595”。
74HC595只用仅三个输入引脚控制八个不同的输出引脚。如果需要超过8个I/O引脚,则可以根据需要尽可能多的链来生成大量的I/O引脚。
工作原理
74HC595具有两个8位寄存器(可以将其视为“内存容器”)。第一个称为移位寄存器,第二个称为存储/闩锁寄存器。
每次74HC595收到时钟脉冲时,都会发生两件事:
- 移位寄存器中包含的位通过一个位置向左移动。位0的值将其推入位1,而位1的值则将其推入位2,依此类推。
- 移位寄存器中的位0接受数据引脚上的当前值。在时钟脉冲的上升边缘上,如果数据引脚高,则将1推入移位寄存器,否则为0。
只要74HC595被计时,这个过程就会继续。
启用闩锁引脚后,将移位寄存器的内容复制到存储/闩锁寄存器。存储寄存器的每个位均链接到IC的输出引脚之一QA-QH。结果,每当存储寄存器中的值更改时,输出就会更改。
下面的动画将帮助你更好地理解它。
Sipo vs Piso Shift寄存器
有两种类型的移位寄存器:SIPO(并行序列)和PISO(并行在串行中)。
SIPO可用于控制大量输出,例如LED。尽管PISO可用于收集大量输入,例如按钮,类似于上面讨论的原始 arduino 控制器。
最受欢迎的SIPO芯片是74HC595,最受欢迎的PISO芯片是74HC165。
引脚连接
SER(串行输入)引脚用于一次向移位寄存器发送一位数据。
SRCLK(移位寄存器时钟)是移位寄存器的时钟,由正沿触发。这意味着这些比特在时钟的上升沿被推入。
RCLK(寄存器时钟/锁存)是一个非常重要的引脚。当该引脚被拉高时,移位寄存器的内容被复制到存储/锁存寄存器中,最终出现在输出端。因此,锁存引脚可以看作是我们在输出端看到结果之前的最后一步。
SRCLR(移位寄存器清除)引脚允许我们重置整个移位寄存器,将所有位设置为零。因为这是一个活动低引脚,我们必须将SRCLR引脚拉低以执行重置。
OE(输出启用)也是一个低电平引脚:当拉高时,输出引脚被禁用(设置为高阻抗状态)。当它被拉低时,输出引脚正常工作。
QA–QH(输出启用)是输出引脚。
QH: 引脚输出移位寄存器的第7位。这允许您对74HC595进行链连接。如果将此引脚连接到另一个74HC595的SER引脚,并向两个IC提供相同的时钟信号,它们的行为就像一个具有16个输出的单个IC。当然,使用这种技术,您可以菊花链连接任意数量的IC。
将引脚16(VCC)和10(SRCLR)连接到Arduino的5V输出,引脚8(GND)和13(OE)连接到地。这应该使IC保持在正常工作模式。
接下来,连接将用于控制移位寄存器的三个引脚。将移位寄存器的引脚11(SRCLK)、引脚12(RCLK)和引脚14(SER)分别连接到Arduino的引脚6、5和4。
剩下的就是将LED连接到输出引脚。将每个LED的阴极(短引脚)连接到公共接地,将每个LED(长引脚)的阳极连接到其各自的移位寄存器输出引脚。
不要忘记串联一个220Ω的电阻器,以保护LED免受过载。
连接LED时,确保QA连接到第一个LED,QH连接到最后一个LED;否则,LED将不会以正确的顺序亮起!
下图显示了如何将所有内容连接起来。
arduino | 74HC595 |
---|---|
GND | 8(GND)、13(OE) |
5 V | 16(vcc)、10(SRCLR) |
pin 2 | 14(SER) |
Pin 3 | 12(RCLK) |
pin 4 | 11(SRCLK) |
代码示例
1 |
|
使用PWM控制亮度
1 |
|
小结
待完善…
108个传感器之-移位寄存器 74HC595(50)