Lecture 11/14 - I/O - cyut.edu.tw
Transcript of Lecture 11/14 - I/O - cyut.edu.tw
Lecture 11/14 - I/O擴充
FC Tien, YP Liu
Dept. of IE&M, Taipei Tech
邏輯IC
TTL 數位IC資料手冊 CMOS 數位IC資料手冊
7404 4049
邏輯IC
TTL與CMOS都是數位積體電路的一種,為了保證個家廠商的產品能夠在一個電路中相互使用,所以必須界定一些電氣規格提供廠商依循,而邏輯準位是數位系統能夠正確運作的依據,以下的表格規定了TTL與CMOS的輸入與輸出位準。
TTL與CMOS的邏輯準位
IC種類 VOL VOH VIL VIH 備註
TTL 小於0.4V 大於2.4V 0.8V以下 2.0V以上 TTL電源為5V
CMOS 約0V 約VDD 30% VDD以下 70% VDD以上 VDD為3~15V
資料來源:http://www.gauss.com.tw/logic/ch1/1-5.htm
邏輯IC
TTL與CMOS的邏輯準位
IC種類 VOL VOH VIL VIH 備註
TTL 小於0.4V 大於2.4V 0.8V以下 2.0V以上 TTL電源為5V
CMOS 約0V 約VDD 30% VDD以下 70% VDD以上 VDD為3~15V
Q1某TTL輸入端測量電壓為3.2V,請問這是屬於邏輯「0」還是邏輯「1」?
答:3.2V>2.0V,在VIH之上故為邏輯「1」。
Q2某CMOS使用5V電源,輸入端測量電壓為3.2V,請問這是屬於邏輯「0」還是邏輯「1」?
答:3.2V/5V=0.64,未及70% VDD以上也不在30% VDD以下,故非邏輯「1」也不是邏輯「0」,此電壓意味著送出3.2V的元件故障或電路設計錯誤。
Arduino I/O 擴充
解決I/O數量過少的問題
串列轉並列輸出
74HC595
並列轉串列輸入
74HC165
驅動7段顯示器
74LS47
Arduino I/O 擴充 – 74HC595 串列轉並列輸出
Pin 1~7(Q1~Q7)、Pin 15(Q0),8 bits的輸出
Pin 8(GND)接地
Pin 9(Q7" ),序列輸出
Pin 10(MR),Master Reclear清除所有資料,active low低電位有效
Pin 11(SH_CP),SHift register Clock Pin位移時脈腳位。又稱clock pin
Pin 12(ST_CP),STorage register Clock Pin儲存時脈腳位,又稱latch pin鎖住腳位
Pin 13(OE),Output enable允許輸出,active low低電位有效
Pin 14(DS),Data Serial input序列資料輸入,又稱data pin資料腳位
Pin 16(Vcc),供應正電壓
串列輸入,並列輸出
Arduino I/O 擴充 – 74HC595 串列轉並列輸出
74HC595
Arduino I/O 擴充 – 74HC165 並列轉串列輸入
Pin 1 (/PL) 並列資料D0~D7讀取,active low低電位有效
Pin 2 (CP) Clock Pin位移時脈腳位
Pin 3~6 (D4~D7)並列輸入資料,高4位元
Pin 7(/Q7 ),反相序列資料輸出
Pin 8(GND)接地
Pin 9(Q7),序列資料輸出
Pin 10(DS), Serial Data input序列資料輸入
Pin 11~14(D0~D3),並列輸入資料,低4位元
Pin 15(/CE), clock enable 晶片時脈開啟,active low低電位有效
Pin 16(Vcc),供應正電壓。
並列輸入,串列輸出
Arduino I/O 擴充 – 74HC165 並列轉串列輸入
74HC165
測試 – 74HC595 控制8顆LED
• 測試:使用串列轉並列輸出IC控制7段LED。
74HC595 模擬實驗
測試1 – 74HC595 控制8顆LED
• 測試:使用串列轉並列輸出IC控制LED。
//使用 74HC595 和三支腳位控制 8 顆 LED
// arduino P11 to P12 Latch
int latchPin = 11;
// arduino P12 to P11 CLK
int clockPin = 12;
// P10 to P14 DATA
int dataPin = 10;
void setup() {
// 將 latchPin, clockPin, dataPin 設置為輸出pinMode(latchPin, OUTPUT);
pinMode(clockPin, OUTPUT);
pinMode(dataPin, OUTPUT);
}
void loop() {
for (int j = 0; j < 256; j++) {
digitalWrite(latchPin, LOW);
shiftOut(dataPin, clockPin,MSBFIRST, j);
digitalWrite(latchPin, HIGH);
delay(100);
}
}
// 使用 74HC595 和三支腳位控制 8 顆 LED
// 接 74HC595 的 ST_CP (pin 12,latch pin)
int latchPin = 8;
// 接 74HC595 的 SH_CP (pin 11, clock pin)
int clockPin = 12;
// 接 74HC595 的 DS (pin 14)
int dataPin = 11;
int DELAY = 500;
void setup() {
// 將 latchPin, clockPin, dataPin 設置為輸出pinMode(latchPin, OUTPUT);
pinMode(clockPin, OUTPUT);
pinMode(dataPin, OUTPUT);
}
void loop() {
go();
}
void go() {
// 在 8 顆 LED 上計數數字;從 0 計數到 7
for (int i = 0; i < 8; i++) {
light(i);
}
}
void light(int led) {
//點亮某顆LED燈,0~7
int numberToDisplay = 1 << led;
// 送資料前要先把 latchPin 拉成低電位digitalWrite(latchPin, LOW);
byte high_Byte = highByte(numberToDisplay);
byte low_Byte = lowByte(numberToDisplay);
// 使用 shiftOut 函式送出資料//shiftOut(dataPin, clockPin, MSBFIRST, high_Byte);
shiftOut(dataPin, clockPin, MSBFIRST, low_Byte);
// 送完資料後要把 latchPin 拉回成高電位digitalWrite(latchPin, HIGH);
// 延遲換下一個數字delay(DELAY);
}
測試2 – 74HC595 控制8顆LED
Homework 4
使用線上模擬器完成74HC595 IC 控制16顆LED執行跑馬燈動作