Python可以這樣玩(17):用積體電路簡化線路
積體電路(IC)是把各種電子元件裝配在一個小矽晶上面,完成特定的電路功能。數位IC用於邏輯運算、計算、暫存資料、編/解碼…等處理0與1訊號。類比IC用於通訊、訊號放大、電壓調節…等連續訊號處理。用74HC595,能把原本「並連」元件的接法,改成「串連」,減少佔用Arduino腳位。如下圖:
74HC595是一個8位元位移暫存器(shift register),「暫存器」相當於記憶體,代表它最多能保存8位元資料,「位移」則代表其內部資料可序列移動。當時脈訊號由低電位變成高電位時,序列輸入的資料將逐一往高位元方向移動,依序進入暫存器。依序進入8個位元資料並移動8次之後,左邊的輸出控制開關將被開啟,此時,8個位元資料將同時被傳送出去。
接下來,我們看一下它的接腳圖:
使用 74595 IC 連接七段顯示器,減少佔用
Arduino 板的接腳數,並在七段顯示器上每隔0.5秒顯示 0~9 數字(採用 LSBFIRST)。現在請使用共陰七段顯示器,然後按照下圖連接。主要資料連接腳為14, 12, 11。
Arduino提供一個shiftOut()函數(直譯「資料位移輸出」),能一次傳送一個位元組(8個位元)資料,我們只需負責打開和關閉74HC595的並列資料輸出閘門,語法如下:
其中的「位元順序」代表資料位元的傳送順序。採用的傳送方式,取決於74HC595資料輸出端的電路接法。
程式碼如下:
const
byte dataPin = 2; // 74HC595序列腳接數位2
const
byte latchPin = 3; // 74HC595暫存器時脈腳接數位3
const
byte clockPin = 4; // 74HC595序列時脈腳接數位4
byte
index = 0; // 七段顯示器的數字索引
const
byte LEDs[10] = {
B01111110,
B00110000,
B01101101,
B01111001,
B00110011,
B01011011,
B01011111,
B01110000,
B01111111,
B01111011,
}
;
void
setup() {
// put your setup code here, to run once:
pinMode(latchPin, OUTPUT);
pinMode(clockPin, OUTPUT);
pinMode(dataPin, OUTPUT);
}
void
loop() {
// put your main code here, to run
repeatedly:
digitalWrite(latchPin, LOW);
shiftOut(dataPin, clockPin, LSBFIRST,
LEDs[index]);
digitalWrite(latchPin, HIGH);
delay(500);
index ++;
if(index == 10){
index = 0;
}
}
在 loop() 函數裡,先把「暫存器時脈」設置為低電位 (關上並列輸出閘門),再透過
shiftOut() 函數序列輸出一個位元組,最後再把「暫存器時脈」設置為高電位 (開啟並列輸出閘門,資料就會一起輸出)。
這個部份我們就先做到這裡,這是因為 pyFirmata 函數庫還在開發中,仍然有一些遺漏的部分,例如之前我們測試的
tone() noTone(),另外還有 pulseIn()
pulseOut() 與 shiftIn() shiftOut(),這個單元我們剛好用到 shiftIn() shiftOut(),所以我就不測試了。
留言
張貼留言