在使用MCU時常常會遇到一個問題就是GPIO不夠用,
通常一次要控制很多東西的時候往往會很傷腦筋,
以前有嘗試使用過一些解碼IC去增加IO腳不過解碼IC再怎麼解也只有一定數量
但是真的一次要有一二十支IO的話還真的不是那麼簡單
這次順便記錄一下關於串列IO的用法跟一些注意事項
市面上有很多種串列IO的IC,
不過首先要注意的是串列IO在應用時會有效率比較差的問題,畢竟是串列
沒有辦法向並列輸出入一樣,可以一次同時丟很多跟接收很多
串列IO通常都是一個bit一個bit的來。
我比較常用的是74HC4094與74HC166這兩顆
首先先來看74HC4094 (這是Datasheet)
這顆4094主要的用途是用來當Output腳,
他可以串列的方式依序將資料用"Shift"的方式輸出至QP0~QP7
I.腳位定義
1.STR > strobe input 選通腳 > 輸入
2.D > data in 資料輸入腳 > 輸入
3.CP > clock inpu 時脈輸入 > 輸入
4.QP0~QP7 > parallel outpu IO輸出腳 > 輸出
5.OE > output enable input 致能輸出 > 輸入
6.QS1,2 > serial outpu 串列輸出 > 輸出
7.GND > 電源地
8.VCC > 正電源
II.時序圖
打個岔,通常我再用4094的時候我通常只會使用PIN1(STR),與PIN2(D),PIN3(CP)
只要有這三腳就可以控制4094了
如果要串聯多顆4094時則使用PIN10(QS2)做串聯
主要的動作流程可以參考時序圖,或者參考我的白話文解說(繼續往下看)
III.範例電路
DATA > 欲傳送的資料由Data輸入
CLK > 時脈輸入腳
STR > 動作致能腳
QS2 > 用來串聯下一顆4094
上圖是要輸出一個2byte資料的範例,
假設今天要送出11010011 00110101
首先需要先將STR腳設為High
在由最高byte的最高bit先送,依序將1>1>0>1>0>0>1..設定到DATA腳中
如DATA為1時則為High,0時則為Low
每送1個bit時,則CLK做High Low變化一次,再送入第二個bit
當CLK震盪一次時,會將DATA腳的狀態Shift出去,所以在CLK變化前
要先設定好DATA腳狀態,依此類推,直到送完16個bit
此時U40的Q8應為High,Q7為High,Q6為Low....
完畢後再將STR重新設定為Low
註:只有STR腳為High與OE腳為High時CLK動作時才會Shift資料