แผงวงจรพ่วง (peripheral board)cpj/204223/slides/h5-peri.pdf · 2016-10-14 ·...

22
แผงวงจรพ่วง (Peripheral Board) ปฏิบัติการเกี่ยวกับวิศวกรรมคอมพิว เตอร์ ( 01204223 ) ผศ.ดร.ชัยพร ใจแก้ว และ ผศ.ดร.อภิรักษ์ จันทร์สร้าง ภาควิชาวิศวกรรมคอมพิวเตอร์ คณะวิศวกรรมศาสตร์ มหาวิทยาลัยเกษตรศาสตร์

Upload: others

Post on 15-Feb-2020

5 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: แผงวงจรพ่วง (Peripheral Board)cpj/204223/slides/h5-peri.pdf · 2016-10-14 · วงจรแสดงผล led สามสี เชื่อมเข้ากับขา

แผงวงจรพว่ง (Peripheral Board)

ปฏิบติัการเก่ียวกบัวศิวกรรมคอมพิวเตอร์

(01204223)

ผศ.ดร.ชยัพร ใจแกว้ และ ผศ.ดร.อภิรกัษ์ จนัทรส์รา้ง

ภาควชิาวศิวกรรมคอมพิวเตอร์

คณะวศิวกรรมศาสตร ์มหาวทิยาลยัเกษตรศาสตร์

Page 2: แผงวงจรพ่วง (Peripheral Board)cpj/204223/slides/h5-peri.pdf · 2016-10-14 · วงจรแสดงผล led สามสี เชื่อมเข้ากับขา

แผงวงจรพว่ง

จุดเช่ือมตอ่กบัเมนบอรด์ วงจรแสดงผล LED สามสี วงจรสวิตชอิ์นพทุ วงจรวดัแสง

Page 3: แผงวงจรพ่วง (Peripheral Board)cpj/204223/slides/h5-peri.pdf · 2016-10-14 · วงจรแสดงผล led สามสี เชื่อมเข้ากับขา

เฮดเดอรไ์ฟล ์avr/io.h

ใชค้ าสัง่ #include <avr/io.h> เพื่อดึงนิยามรีจีสเตอร์

ส าหรบัควบคุมอินพุทและเอาทพ์ุท

ภายในไฟลม์ีการนิยามมาโครส าหรบั

รีจีสเตอรก์ าหนดทิศทาง I/O: DDRB, DDRC, DDRD

รีจีสเตอรเ์ขียนลอจิกเอาทพ์ทุ: PORTB, PORTC, PORTD

รีจีสเตอรอ์่านลอจิกอินพุท: PINB, PINC, PIND

ค่าต าแหน่งบิตของขาต่าง ๆ เช่น PC0, PC1

ฯลฯ

Page 4: แผงวงจรพ่วง (Peripheral Board)cpj/204223/slides/h5-peri.pdf · 2016-10-14 · วงจรแสดงผล led สามสี เชื่อมเข้ากับขา

วงจรแสดงผล LED สามสี

เช่ือมเขา้กบัขา PC0..PC2

การใชง้าน:

ตั้งค่ารีจีสเตอร์ DDRC ใหข้า PC0..PC2 เป็นเอาทพ์ุท

เขียนลอจิก 1 ในบิตของรีจีสเตอร์ PORTC เพื่อใหไ้ฟติด

เขียนลอจิก 0 ในบิตของรีจีสเตอร์ PORTC เพื่อใหไ้ฟดบั

Page 5: แผงวงจรพ่วง (Peripheral Board)cpj/204223/slides/h5-peri.pdf · 2016-10-14 · วงจรแสดงผล led สามสี เชื่อมเข้ากับขา

(ทบทวน) กฎของโอหม์

V

I

0R

I

V+ -

V

I

R

I

V+ -

V

I

I

VR

I

V+ -

R

Page 6: แผงวงจรพ่วง (Peripheral Board)cpj/204223/slides/h5-peri.pdf · 2016-10-14 · วงจรแสดงผล led สามสี เชื่อมเข้ากับขา

อุปกรณไ์ดโอดและ LED

V

I

I

V+ -

Vd

V

I

I

Vd

V+ -

Vd

R

𝑅 =𝑉 − 𝑉𝑑

𝐼

Page 7: แผงวงจรพ่วง (Peripheral Board)cpj/204223/slides/h5-peri.pdf · 2016-10-14 · วงจรแสดงผล led สามสี เชื่อมเข้ากับขา

แบบฝึกหดั – ไฟว่ิงสามสี (chase.c)

เขียนเฟิรม์แวรใ์ห ้LED บนบอรด์พว่งไล่ติดทีละสี

ตามล าดบั แดง เหลือง เขียว วนไปเรื่อย ๆ

:

แต่ละดวงสวา่งนาน 0.5 วินาที

Page 8: แผงวงจรพ่วง (Peripheral Board)cpj/204223/slides/h5-peri.pdf · 2016-10-14 · วงจรแสดงผล led สามสี เชื่อมเข้ากับขา

แบบฝึกหดั – นบัเลข 0 ถึง 7 (count.c)

เขียนเฟิรม์แวรใ์ห ้LED สามสีแสดงผลค่า 0,1,2,…,6,7,0,1,…

ในรูปฐานสอง โดยแต่ละค่าใหแ้สดงผลคา้งไว ้0.5 วนิาที

เร่ิมตน้

ผ่านไป 0.5 วินาที

ผ่านไป 0.5 วินาที

ผ่านไป 0.5 วินาที

ผ่านไป 0.5 วินาที

ผ่านไป 0.5 วินาที

: :

: :

Page 9: แผงวงจรพ่วง (Peripheral Board)cpj/204223/slides/h5-peri.pdf · 2016-10-14 · วงจรแสดงผล led สามสี เชื่อมเข้ากับขา

วงจรสวิตซอิ์นพทุ

ต่อกบัขา PC3

เมื่อสวติซถ์ูกกด ขา PC3 จะถูกต่อลงกราวนด์

การใชง้าน:

ตั้งค่ารีจีสเตอร์ DDRC ใหข้า PC3 เป็นอินพุท

เขียนลอจิก 1 ลงท่ีบิต PC3 ของรีจีสเตอร์ PORTC เพ่ือเปิดใชง้าน

pull-up resistor

อ่านค่าบิต PC3 ของรีจีสเตอร์ PINC เพ่ือตรวจสอบสถานะของ

สวิตช์

Page 10: แผงวงจรพ่วง (Peripheral Board)cpj/204223/slides/h5-peri.pdf · 2016-10-14 · วงจรแสดงผล led สามสี เชื่อมเข้ากับขา

ตวัตา้นทานพลูอพั

ไมโคร-

คอนโทรลเลอร์ I = ~0

Input

R

Vin

Pull-up Resistor

VCC

Page 11: แผงวงจรพ่วง (Peripheral Board)cpj/204223/slides/h5-peri.pdf · 2016-10-14 · วงจรแสดงผล led สามสี เชื่อมเข้ากับขา

โครงสรา้ง I/O ภายในชิป (แตล่ะขา)

รูปจากหวัขอ้ 18.2 ของดาตา้ชีต ATmega48/88/168

VCCภายในชิป

ภายนอกชิป

Page 12: แผงวงจรพ่วง (Peripheral Board)cpj/204223/slides/h5-peri.pdf · 2016-10-14 · วงจรแสดงผล led สามสี เชื่อมเข้ากับขา

แบบฝึกหดั – นบัสวิตช์ดว้ย LED

(sw-count-led.c)

นับจ านวนครั้งท่ีสวติชถ์ูกกด แสดงจ านวนครั้งในรูป

เลขฐานสองดว้ย LED (เร่ิมนับ 0 เมื่อกดเกิน 7 ครั้ง)

เร่ิมตน้

กดแลว้ปล่อย

กดแลว้ปล่อย

กดแลว้ปล่อย

กดแลว้ปล่อย

กดแลว้ปล่อย

: :

: :

Page 13: แผงวงจรพ่วง (Peripheral Board)cpj/204223/slides/h5-peri.pdf · 2016-10-14 · วงจรแสดงผล led สามสี เชื่อมเข้ากับขา

Contact Bounce

เกิดจากหน้าสมัผสักระเพื่อมขณะกดหรือปล่อยสวติซแ์บบ

กลไก

ลอจิก

เวลา

1

0

จงัหวะท่ีสวติชถู์กก (หรือปล่อย)

ท่ีมา: วกิิพีเดยี

Page 14: แผงวงจรพ่วง (Peripheral Board)cpj/204223/slides/h5-peri.pdf · 2016-10-14 · วงจรแสดงผล led สามสี เชื่อมเข้ากับขา

วิธีแกไ้ข Contact Bouncing

แกไ้ขทางฮารด์แวร์

ใชว้งจร RC กรองสญัญาณ

ความถ่ีสูงออก

แกไ้ขทางซอฟตแ์วร์

เพิ่มค าสัง่หน่วงเวลาสั้น ๆ เมื่อตรวจสอบไดว้า่

สวติชม์ีการเปล่ียนสถานะ

Page 15: แผงวงจรพ่วง (Peripheral Board)cpj/204223/slides/h5-peri.pdf · 2016-10-14 · วงจรแสดงผล led สามสี เชื่อมเข้ากับขา

วงจรวดัแสง

เชื่อมกบัขา PC4

ใชต้วัตา้นทานแปรค่าตามแสง (Light Dependent

Resistor หรือ LDR) ผสมกบัวงจรแบ่งแรงดนั

สญัญาณท่ีขา PC4 เป็นสญัญาณประเภทแอนะล็อก

การใชง้านตอ้งอ่านค่าแรงดนัจาก PC4 แบบแอนะล็อก

41

44

RLDR

RVCCVPC

Page 16: แผงวงจรพ่วง (Peripheral Board)cpj/204223/slides/h5-peri.pdf · 2016-10-14 · วงจรแสดงผล led สามสี เชื่อมเข้ากับขา

สญัญาณดิจทิลัและสญัญาณแอนะล็อก

บนัทึกขอ้มูลแบบ

ดิจทิลั 2 ระดบั

(1 บิต)

บนัทึกขอ้มูลแบบ

ดิจทิลั 1024 ระดบั

(10 บิต)

0

1

0

1023สญัญาณแอนะล็อก

0V

5V

สญัญาณดิจิทลั0V

5V

0

1

Page 17: แผงวงจรพ่วง (Peripheral Board)cpj/204223/slides/h5-peri.pdf · 2016-10-14 · วงจรแสดงผล led สามสี เชื่อมเข้ากับขา

วงจรแปลงสญัญาณแอนะล็อกเป็นดิจทิลั

Page 18: แผงวงจรพ่วง (Peripheral Board)cpj/204223/slides/h5-peri.pdf · 2016-10-14 · วงจรแสดงผล led สามสี เชื่อมเข้ากับขา

ตวัอยา่งฟังกช์นัส าหรบัใชง้าน ADC

uint16_t read_adc(uint8_t channel){

ADMUX = (0<<REFS1)|(1<<REFS0) // ระบุใหใ้ช ้VCC เป็นแรงดนัอา้งอิง (Vref) และ

| (0<<ADLAR) // บนัทึกผลลพัธชิ์ดขวาในคูรี่จีสเตอร์ ADCH/ADCL

| (channel & 0b1111); // ตั้งค่า MUX เป็นค่า channel

ADCSRA = (1<<ADEN) // เปิดวงจร ADC| (1<<ADPS2)|(1<<ADPS1)|(1<<ADPS0) // ใชค้วามเร็ว 1/128 ของคล็อกระบบ

| (1<<ADSC); // สัง่วงจร ADC ใหเ้ร่ิมตน้การแปลง

while ((ADCSRA & (1<<ADSC))) // รอจนบิต ADSC กลายเป็น 0 ซ่ึงหมายถึงการแปลงเสร็จส้ิน

;

return ADCL + ADCH*256; // ผลลพัธถู์กเก็บอยูใ่นรีจีสเตอร์ ADCL และ ADCH

// สามารถใช ้return ADC ไดเ้ช่นกนั

}

คา่ท่ีไดเ้ป็นไปตามสูตร 𝐴𝐷𝐶 =𝑉𝑖𝑛⋅1024

𝑉𝑟𝑒𝑓โดยมีคา่สูงสุดท่ี 1023

Page 19: แผงวงจรพ่วง (Peripheral Board)cpj/204223/slides/h5-peri.pdf · 2016-10-14 · วงจรแสดงผล led สามสี เชื่อมเข้ากับขา

วิธีเรียกใชง้านฟังกช์นั read_adc()

ระบุหมายเลขช่องสญัญาณ (channel) เป็นอารก์ิวเมนต์

ค่าท่ีคืนมาใหเ้ป็น uint16_t แต่มีค่าสูงสุดท่ี 1023

uint16_t result = read_adc(4);

uint16_t result = read_adc(PC4);

uint8_t result = read_adc(PC4);

Page 20: แผงวงจรพ่วง (Peripheral Board)cpj/204223/slides/h5-peri.pdf · 2016-10-14 · วงจรแสดงผล led สามสี เชื่อมเข้ากับขา

มาโคร ADCL/ADCH และ ADC

มาโคร ADCL ADCH และ ADC ถูกนิยามไวใ้นเฮดเดอร์ avr/io.h

ผลลพัธก์ารขยาย

uint8_t adc_low = ADCL;uint8_t adc_high = ADCH;uint16_t adc = ADC;

uint8_t adc_low = (*(volatile uint8_t *)(0x78));uint8_t adc_high = (*(volatile uint8_t *)(0x79));uint16_t adc = (*(volatile uint16_t *)(0x78));

Page 21: แผงวงจรพ่วง (Peripheral Board)cpj/204223/slides/h5-peri.pdf · 2016-10-14 · วงจรแสดงผล led สามสี เชื่อมเข้ากับขา

แบบฝึกหดั – แสงสามระดบั (light-3.c)

อ่านความเขม้แสงจากขา PC4

ตีความแสงเป็นสามระดบั และแสดงระดบัแสง

ดว้ย LED สามสี

สภาพแสงมืด

สภาพแสงสวา่งมาก

สภาพแสงปานกลาง

Page 22: แผงวงจรพ่วง (Peripheral Board)cpj/204223/slides/h5-peri.pdf · 2016-10-14 · วงจรแสดงผล led สามสี เชื่อมเข้ากับขา

แบบฝึกหดั – แสงแปดระดบั (light-8.c)

อ่านความเขม้แสงจากขา PC4

ตีความผลลพัธเ์ป็น 8 ระดบั (0-7)

น าระดบัท่ีตีความไดม้าแสดงผลบน LED ในรูปเลขฐานสอง

(ไบนารี) 3 บิต

แนวทาง: น าบิต 9..7 จากผลลพัธ ์ADC มาแสดงผล

ความสวา่ง 0 (มืดสุด)

ความสวา่ง 2

ความสวา่ง 1

ความสวา่ง 3

ความสวา่ง 4

ความสวา่ง 6

ความสวา่ง 5

ความสวา่ง 7 (สวา่งสุด)