2010年12月31日 星期五

Arduino 筆記 – Lab11 使用 74HC595 和三支腳位控制 8 顆 LED

實驗目的

練習以 74HC595 移位暫存器 (Shift Register) 擴充 Arduino 的 I/O 腳位,使用三支接腳搭配 74HC595 移位暫存器控制八顆 LED 燈。

74HC595 簡介

當微控制器腳位不夠用的時候,你就需要移位暫存器 (shift register) 來擴充微控制器的腳位。底下簡介 74HC595 這顆移位暫存器:

image

(圖片來源: SparkFun)

74HC595 移位暫存器 (Shift Register) 是一顆八位元 (8-bit) 序列輸入 (serial-in)、序列或是並列輸出 (serial/parallel-out) 的移位暫存器,使用這顆晶片,你只需要微控制器上的三支接腳,就可以同時控制八個輸出。

你也可以將多顆移位暫存器串接 (Daisy chain) 在一起進一步擴充更多的輸出腳位,例如: 串兩顆 74HC595 就可以同時控制 16 個輸出。你也許會想要使用其它移位暫存器,例如:STP16C596 可以同時驅動 16 組 LED 燈泡。

74HC595 總共有 16 支接腳,底下是這些腳位的圖表說明:

image 

腳位編號 名稱 說明
1-7, 15 Q0 ~ Q7 輸出腳位
8 GND 接地
9 Q7’ 序列輸出 (Serial Out)
10 MR Master Reset, 清除所有資料, 低電位有效 (Active low)
11 SH_CP SHift register clock pin (Clock Pin)
12 ST_CP STorage register clock pin (Latch Pin)
13 OE Output Enable, 允許輸出,低電位有效 (Active low)
14 DS 序列資料輸入 (Serial data input)
16 Vcc 供應電壓
材料
  • 麵包板 x 1
  • Arduino 主板 x 1
  • 74HC595 x 1
  • LED x 8
  • 220 ohm 電阻 x 8
  • 單心線 x N
接線(Shift_Register.fz)
  • 接上 8 顆 LED,將每顆 LED 短腳 (陰極) 直接接到 GND,然後將每顆 LED 的長腳 (陽極) 個別接至 74HC595 的輸出腳位 D0 ~ D7 並串接一顆 220 ohm 電阻
  • 74HC595 接線其一:
    • Vcc (pin 16) 與 MR (pin 10) 接 5V
    • GND (pin 8) 與 OE (pin 13) 接地
  • 74HC595 接線其二:
    • DS (pin 14) 接 Arduino pin 11 (下圖藍線)
    • ST_CP (pin 12, latch pin) 接 Arduino pin 8 (下圖綠線)
    • SH_CP (pin 11, clock pin) 接 Arduino pin 12 (下圖黃線)
  • 假如發現 LED 有震動閃爍的現象,可以在 ST_CP (pin 12, latch pin) 上接一顆 0.1uF 電容以去除閃爍現象

image

電路圖

image

程式碼

底下這支程式 (ShiftOut74HC595.pde) 會在 8 顆 LED 上計數數字,從 0 一直計數到 255 (註:利用 8 顆 LED 表示數字,數字以二進制表示, 8 顆 LED 全部關掉時代表數字 0,全亮時代表 255):

使用 74HC595 的時候要注意一件事,在送資料前要先把 latchPin 拉成低電位,接著使用 shiftOut() 函式送出資料,送完資料後要把 latchPin 拉回成高電位,如下:

範例照片/影片
動動腦

利用 74HC595 移位暫存器重新改寫 Lab5 LED Bar Graph。Lab5 用了 10 顆 LED,這邊改用 8 顆 LED 即可。8 顆 LED 原本需要 8 支接腳,有了 74HC595 後,Arduino 只需要 3 支接腳一樣可以達到控制 8 顆 LED 的目的。

延伸閱讀

0 意見: