如何使用串行接口以74HC595移位寄存器作为展示向设备写入数据

电子说

1.3w人已加入

描述

第1步:硬件

移位寄存器

移位寄存器

移位寄存器

我的目标只是演示不同的方法我仅将74HC595的8个输出中的4个连接到LED。调试我的代码就足够了:)如果您想使项目看起来更好,则可以将所有Qx输出连接到LED:)

您可以在图像上看到连接。

似乎不同的数据表都有74HC595的不同引脚名称,所以我在我使用的数据表中附加了引脚分配。

74HC595恒定连接:

GND(引脚8)

Vcc(引脚16)至5V

OE(引脚13)接地

SRCLR(MR)(引脚10)至5V

我使用了1k电阻和3mm LED。

步骤2:简单方法

移位寄存器

移位寄存器

对于所有方法,您都会看到连接到电路的示波器的屏幕截图作为性能证明。黄色走线是串行时钟(SRCLK),蓝色走线是锁存信号(RCLK)。同样,对于所有方法,我将展示函数shiftByte()的实现,该函数采用单个字节并将其逐位(串行)写入74HC595

最简单的将数据写入移位寄存器的方法如本教程中所述。基本上,它使用内置的shiftOut()函数来实现串行接口。这样,写入8位数据需要90微秒。不幸的是,包括代码不是简单的方法,因此您将在附加的zip文件中找到草图,并在shiftOut()函数的屏幕截图中找到。这种方法可以,但是相对较慢。

步骤3:使用端口命令的方法

移位寄存器

移位寄存器

更好方式不是切换每个位,而是使用命令将数据写入整个端口。像这样:

PORTC&= B11111101;//数据时钟低

PORTC =(PORTC&B11111010)|(x&B00000001);//将时钟设置为低并输出位0

PORTC | = B00000100;//串行时钟高

您可以在此处找到有关端口操作命令的更多信息

使用此方法附带的示例草图。

以这种方式写入8位仅需4.5微秒。它比简单方法快20倍。

此方法的缺点:

代码不清楚。

所有使用的Arduino引脚应位于同一端口上。

应将74HC595的串行数据引脚连接到使用的Arduino端口的最低有效位

步骤4:使用嵌入式汇编代码

移位寄存器

移位寄存器

使用内联汇编代码可以实现进一步的优化。在所附的草图中,我能够在2.8微秒内写入8位。它比简单方法快32倍。

您可以在此处找到有关如何在C代码中使用内联汇编代码的好指南。

AVR指令集手册

此方法的缺点类似于上一个方法的缺点。

步骤5:使用硬件SPI接口

移位寄存器

移位寄存器

但是在这种情况下,最好的方法是使用硬件SPI接口。您可以在此处阅读如何使用它。基本上,它专用于芯片内部的串行通信硬件,可用于高速传输串行数据。写出所有8位只需要不到1微秒的时间。附有示例的草图。

对于此示例,74HC595与Arduino的连接应不同于所有其他示例中的连接。

由于此方法使用了Arduino内部的特定硬件,因此应连接74HC595

Arduino引脚13(SCK)到74HC595的引脚11(SRCLK)(串行移位时钟)

Arduino引脚A1到74HC595的引脚12(RCLK) (输出锁存时钟)通常这可以是任何引脚。

Arduino的11HC引脚(MOSI)到74HC595的14引脚(SER)(串行数据输入)

所以这就是最快的方法,也是相对简单的方法。

仅此而已。我希望您觉得此说明有用。任何评论将不胜感激。

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分