แผงวงจรพ่วง (peripheral board)cpj/204223/slides/h5-peri.pdf · 2016-10-14 ·...
TRANSCRIPT
![Page 1: แผงวงจรพ่วง (Peripheral Board)cpj/204223/slides/h5-peri.pdf · 2016-10-14 · วงจรแสดงผล led สามสี เชื่อมเข้ากับขา](https://reader033.vdocuments.pub/reader033/viewer/2022041804/5e531dcaa2b535016162f06a/html5/thumbnails/1.jpg)
แผงวงจรพว่ง (Peripheral Board)
ปฏิบติัการเก่ียวกบัวศิวกรรมคอมพิวเตอร์
(01204223)
ผศ.ดร.ชยัพร ใจแกว้ และ ผศ.ดร.อภิรกัษ์ จนัทรส์รา้ง
ภาควชิาวศิวกรรมคอมพิวเตอร์
คณะวศิวกรรมศาสตร ์มหาวทิยาลยัเกษตรศาสตร์
![Page 2: แผงวงจรพ่วง (Peripheral Board)cpj/204223/slides/h5-peri.pdf · 2016-10-14 · วงจรแสดงผล led สามสี เชื่อมเข้ากับขา](https://reader033.vdocuments.pub/reader033/viewer/2022041804/5e531dcaa2b535016162f06a/html5/thumbnails/2.jpg)
แผงวงจรพว่ง
จุดเช่ือมตอ่กบัเมนบอรด์ วงจรแสดงผล LED สามสี วงจรสวิตชอิ์นพทุ วงจรวดัแสง
![Page 3: แผงวงจรพ่วง (Peripheral Board)cpj/204223/slides/h5-peri.pdf · 2016-10-14 · วงจรแสดงผล led สามสี เชื่อมเข้ากับขา](https://reader033.vdocuments.pub/reader033/viewer/2022041804/5e531dcaa2b535016162f06a/html5/thumbnails/3.jpg)
เฮดเดอรไ์ฟล ์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 สามสี เชื่อมเข้ากับขา](https://reader033.vdocuments.pub/reader033/viewer/2022041804/5e531dcaa2b535016162f06a/html5/thumbnails/4.jpg)
วงจรแสดงผล LED สามสี
เช่ือมเขา้กบัขา PC0..PC2
การใชง้าน:
ตั้งค่ารีจีสเตอร์ DDRC ใหข้า PC0..PC2 เป็นเอาทพ์ุท
เขียนลอจิก 1 ในบิตของรีจีสเตอร์ PORTC เพื่อใหไ้ฟติด
เขียนลอจิก 0 ในบิตของรีจีสเตอร์ PORTC เพื่อใหไ้ฟดบั
![Page 5: แผงวงจรพ่วง (Peripheral Board)cpj/204223/slides/h5-peri.pdf · 2016-10-14 · วงจรแสดงผล led สามสี เชื่อมเข้ากับขา](https://reader033.vdocuments.pub/reader033/viewer/2022041804/5e531dcaa2b535016162f06a/html5/thumbnails/5.jpg)
(ทบทวน) กฎของโอหม์
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 สามสี เชื่อมเข้ากับขา](https://reader033.vdocuments.pub/reader033/viewer/2022041804/5e531dcaa2b535016162f06a/html5/thumbnails/6.jpg)
อุปกรณไ์ดโอดและ 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 สามสี เชื่อมเข้ากับขา](https://reader033.vdocuments.pub/reader033/viewer/2022041804/5e531dcaa2b535016162f06a/html5/thumbnails/7.jpg)
แบบฝึกหดั – ไฟว่ิงสามสี (chase.c)
เขียนเฟิรม์แวรใ์ห ้LED บนบอรด์พว่งไล่ติดทีละสี
ตามล าดบั แดง เหลือง เขียว วนไปเรื่อย ๆ
:
แต่ละดวงสวา่งนาน 0.5 วินาที
![Page 8: แผงวงจรพ่วง (Peripheral Board)cpj/204223/slides/h5-peri.pdf · 2016-10-14 · วงจรแสดงผล led สามสี เชื่อมเข้ากับขา](https://reader033.vdocuments.pub/reader033/viewer/2022041804/5e531dcaa2b535016162f06a/html5/thumbnails/8.jpg)
แบบฝึกหดั – นบัเลข 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 สามสี เชื่อมเข้ากับขา](https://reader033.vdocuments.pub/reader033/viewer/2022041804/5e531dcaa2b535016162f06a/html5/thumbnails/9.jpg)
วงจรสวิตซอิ์นพทุ
ต่อกบัขา 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 สามสี เชื่อมเข้ากับขา](https://reader033.vdocuments.pub/reader033/viewer/2022041804/5e531dcaa2b535016162f06a/html5/thumbnails/10.jpg)
ตวัตา้นทานพลูอพั
ไมโคร-
คอนโทรลเลอร์ I = ~0
Input
R
Vin
Pull-up Resistor
VCC
![Page 11: แผงวงจรพ่วง (Peripheral Board)cpj/204223/slides/h5-peri.pdf · 2016-10-14 · วงจรแสดงผล led สามสี เชื่อมเข้ากับขา](https://reader033.vdocuments.pub/reader033/viewer/2022041804/5e531dcaa2b535016162f06a/html5/thumbnails/11.jpg)
โครงสรา้ง I/O ภายในชิป (แตล่ะขา)
รูปจากหวัขอ้ 18.2 ของดาตา้ชีต ATmega48/88/168
VCCภายในชิป
ภายนอกชิป
![Page 12: แผงวงจรพ่วง (Peripheral Board)cpj/204223/slides/h5-peri.pdf · 2016-10-14 · วงจรแสดงผล led สามสี เชื่อมเข้ากับขา](https://reader033.vdocuments.pub/reader033/viewer/2022041804/5e531dcaa2b535016162f06a/html5/thumbnails/12.jpg)
แบบฝึกหดั – นบัสวิตช์ดว้ย LED
(sw-count-led.c)
นับจ านวนครั้งท่ีสวติชถ์ูกกด แสดงจ านวนครั้งในรูป
เลขฐานสองดว้ย LED (เร่ิมนับ 0 เมื่อกดเกิน 7 ครั้ง)
เร่ิมตน้
กดแลว้ปล่อย
กดแลว้ปล่อย
กดแลว้ปล่อย
กดแลว้ปล่อย
กดแลว้ปล่อย
: :
: :
![Page 13: แผงวงจรพ่วง (Peripheral Board)cpj/204223/slides/h5-peri.pdf · 2016-10-14 · วงจรแสดงผล led สามสี เชื่อมเข้ากับขา](https://reader033.vdocuments.pub/reader033/viewer/2022041804/5e531dcaa2b535016162f06a/html5/thumbnails/13.jpg)
Contact Bounce
เกิดจากหน้าสมัผสักระเพื่อมขณะกดหรือปล่อยสวติซแ์บบ
กลไก
ลอจิก
เวลา
1
0
จงัหวะท่ีสวติชถู์กก (หรือปล่อย)
ท่ีมา: วกิิพีเดยี
![Page 14: แผงวงจรพ่วง (Peripheral Board)cpj/204223/slides/h5-peri.pdf · 2016-10-14 · วงจรแสดงผล led สามสี เชื่อมเข้ากับขา](https://reader033.vdocuments.pub/reader033/viewer/2022041804/5e531dcaa2b535016162f06a/html5/thumbnails/14.jpg)
วิธีแกไ้ข Contact Bouncing
แกไ้ขทางฮารด์แวร์
ใชว้งจร RC กรองสญัญาณ
ความถ่ีสูงออก
แกไ้ขทางซอฟตแ์วร์
เพิ่มค าสัง่หน่วงเวลาสั้น ๆ เมื่อตรวจสอบไดว้า่
สวติชม์ีการเปล่ียนสถานะ
![Page 15: แผงวงจรพ่วง (Peripheral Board)cpj/204223/slides/h5-peri.pdf · 2016-10-14 · วงจรแสดงผล led สามสี เชื่อมเข้ากับขา](https://reader033.vdocuments.pub/reader033/viewer/2022041804/5e531dcaa2b535016162f06a/html5/thumbnails/15.jpg)
วงจรวดัแสง
เชื่อมกบัขา 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 สามสี เชื่อมเข้ากับขา](https://reader033.vdocuments.pub/reader033/viewer/2022041804/5e531dcaa2b535016162f06a/html5/thumbnails/16.jpg)
สญัญาณดิจทิลัและสญัญาณแอนะล็อก
บนัทึกขอ้มูลแบบ
ดิจทิลั 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 สามสี เชื่อมเข้ากับขา](https://reader033.vdocuments.pub/reader033/viewer/2022041804/5e531dcaa2b535016162f06a/html5/thumbnails/17.jpg)
วงจรแปลงสญัญาณแอนะล็อกเป็นดิจทิลั
![Page 18: แผงวงจรพ่วง (Peripheral Board)cpj/204223/slides/h5-peri.pdf · 2016-10-14 · วงจรแสดงผล led สามสี เชื่อมเข้ากับขา](https://reader033.vdocuments.pub/reader033/viewer/2022041804/5e531dcaa2b535016162f06a/html5/thumbnails/18.jpg)
ตวัอยา่งฟังกช์นัส าหรบัใชง้าน 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 สามสี เชื่อมเข้ากับขา](https://reader033.vdocuments.pub/reader033/viewer/2022041804/5e531dcaa2b535016162f06a/html5/thumbnails/19.jpg)
วิธีเรียกใชง้านฟังกช์นั 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 สามสี เชื่อมเข้ากับขา](https://reader033.vdocuments.pub/reader033/viewer/2022041804/5e531dcaa2b535016162f06a/html5/thumbnails/20.jpg)
มาโคร 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 สามสี เชื่อมเข้ากับขา](https://reader033.vdocuments.pub/reader033/viewer/2022041804/5e531dcaa2b535016162f06a/html5/thumbnails/21.jpg)
แบบฝึกหดั – แสงสามระดบั (light-3.c)
อ่านความเขม้แสงจากขา PC4
ตีความแสงเป็นสามระดบั และแสดงระดบัแสง
ดว้ย LED สามสี
สภาพแสงมืด
สภาพแสงสวา่งมาก
สภาพแสงปานกลาง
![Page 22: แผงวงจรพ่วง (Peripheral Board)cpj/204223/slides/h5-peri.pdf · 2016-10-14 · วงจรแสดงผล led สามสี เชื่อมเข้ากับขา](https://reader033.vdocuments.pub/reader033/viewer/2022041804/5e531dcaa2b535016162f06a/html5/thumbnails/22.jpg)
แบบฝึกหดั – แสงแปดระดบั (light-8.c)
อ่านความเขม้แสงจากขา PC4
ตีความผลลพัธเ์ป็น 8 ระดบั (0-7)
น าระดบัท่ีตีความไดม้าแสดงผลบน LED ในรูปเลขฐานสอง
(ไบนารี) 3 บิต
แนวทาง: น าบิต 9..7 จากผลลพัธ ์ADC มาแสดงผล
ความสวา่ง 0 (มืดสุด)
ความสวา่ง 2
ความสวา่ง 1
ความสวา่ง 3
ความสวา่ง 4
ความสวา่ง 6
ความสวา่ง 5
ความสวา่ง 7 (สวา่งสุด)