Lecture 11/14 - I/O - cyut.edu.tw

14
Lecture 11/14 - I/O擴充 FC Tien, YP Liu Dept. of IE&M, Taipei Tech

Transcript of Lecture 11/14 - I/O - cyut.edu.tw

Page 1: Lecture 11/14 - I/O - cyut.edu.tw

Lecture 11/14 - I/O擴充

FC Tien, YP Liu

Dept. of IE&M, Taipei Tech

Page 3: Lecture 11/14 - I/O - cyut.edu.tw

邏輯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

Page 4: Lecture 11/14 - I/O - cyut.edu.tw

邏輯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的元件故障或電路設計錯誤。

Page 5: Lecture 11/14 - I/O - cyut.edu.tw

Arduino I/O 擴充

解決I/O數量過少的問題

串列轉並列輸出

74HC595

並列轉串列輸入

74HC165

驅動7段顯示器

74LS47

Page 6: Lecture 11/14 - I/O - cyut.edu.tw

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),供應正電壓

串列輸入,並列輸出

Page 7: Lecture 11/14 - I/O - cyut.edu.tw

Arduino I/O 擴充 – 74HC595 串列轉並列輸出

74HC595

Page 8: Lecture 11/14 - I/O - cyut.edu.tw

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),供應正電壓。

並列輸入,串列輸出

Page 9: Lecture 11/14 - I/O - cyut.edu.tw

Arduino I/O 擴充 – 74HC165 並列轉串列輸入

74HC165

Page 10: Lecture 11/14 - I/O - cyut.edu.tw

測試 – 74HC595 控制8顆LED

• 測試:使用串列轉並列輸出IC控制7段LED。

Page 11: Lecture 11/14 - I/O - cyut.edu.tw

74HC595 模擬實驗

Page 12: Lecture 11/14 - I/O - cyut.edu.tw

測試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);

}

}

Page 13: Lecture 11/14 - I/O - cyut.edu.tw

// 使用 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

Page 14: Lecture 11/14 - I/O - cyut.edu.tw

Homework 4

使用線上模擬器完成74HC595 IC 控制16顆LED執行跑馬燈動作