Python可以這樣玩(17):用積體電路簡化線路


積體電路(IC)是把各種電子元件裝配在一個小矽晶上面,完成特定的電路功能。數位IC用於邏輯運算、計算、暫存資料、編/解碼…等處理01訊號。類比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(),所以我就不測試了。

留言

這個網誌中的熱門文章

Python可以這樣玩(16):共陰/共陽七段顯示器

Python可以這樣玩(15):蜂鳴器與音樂

Python可以這樣玩(13):外部LED控制