第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端口的最低有效位
使用內聯匯編代碼可以實現進一步的優化。在所附的草圖中,我能夠在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)(串行數據輸入)
所以這就是最快的方法,也是相對簡單的方法。
僅此而已。我希望您覺得此說明有用。任何評論將不勝感激。
-
移位寄存器
+關注
關注
3文章
259瀏覽量
22342 -
串行接口
+關注
關注
3文章
331瀏覽量
42724 -
74HC595
+關注
關注
7文章
191瀏覽量
30944
發布評論請先 登錄
相關推薦
評論