Important Announcement
PubHTML5 Scheduled Server Maintenance on (GMT) Sunday, June 26th, 2:00 am - 8:00 am.
PubHTML5 site will be inoperative during the times indicated!

Home Explore Lab10

Lab10

Published by kowit, 2018-03-27 20:22:33

Description: ใบงานการทดลองที่ 10 การใช้งานโรตารี่เอ็นโค้ดเดอร์ร่วมกับอินเตอร์รัพท์จากภายนอก

Search

Read the Text Version

ใบงานการทดลองท่ี 10 การใช้งานโรตารี่เอ็นโค้ดเดอร์ร่วมกับอินเตอร์รัพท์จากภายนอกวัตถปุ ระสงค์เชงิ พฤติกรรมเพ่ือใหน้ กั ศกึ ษาสามารถ 1. เขียนโปรแกรมรับคา่ โรตารี่เอน็ โคด้ เดอร์โดยใช้อินเตอร์รัพท์จากภายนอกได้อย่างถกู ต้อง 2. เขียนโปรแกรมเพ่ือรบั อนิ เตอรร์ พั ทจ์ ากภายนอกมากกวา่ หนึ่งแหล่งได้อย่างถูกต้องอปุ กรณ์ประกอบการทดลอง 1 เครอ่ื ง 1 บอรด์ 1. คอมพิวเตอรท์ ี่มชี อ่ งเสียบ USB 1 บอรด์ 2. บอรด์ Arduino Mega 2560 20 เส้น 3. บอร์ด One the all 1 เส้น 4. สายเช่อื มต่อ 5. สาย USB type A to USB type Bลงชื่อผูท้ ดลอง 1. _____________________________ 2.__________________________________ทฤษฎีท่ีเก่ยี วขอ้ ง Rotary Encoder เป็นอุปกรณ์ท่ีมีลักษณะเป็นปุ่มหมุนได้สองทิศทาง คือ ทิศทางทวนเข็มนาฬิกาและทิศทางตามเข็มนาฬิกา เอาต์พุตท่ีได้จาก Rotary Encoder จะอยู่ในรูปของสัญญาณ Pulse A และPulse B ทีเ่ กิดจากการ Encode เวลาหมนุ Rotary Encoder ดังรูปใบงานท่ี 10-1รูปใบงานท่ี 10-1 Rotary Encoder บนบอร์ด One the All หนังสอื ชดุ ฝึกด้านดิจิทลั 193

จากรปู ใบงานท่ี 10-2 จะเห็นได้ว่าถา้ หมุน Rotary Encoder ในทิศทางตามเข็มนาฬิกา (Clockwise)สัญญาณ Pulse A จะมีเฟสนาสัญญาณ Pulse B อยู่ 90 องศา แต่ถ้าหมุน Rotary Encoder ในทิศทางทวนเข็มนาฬิกา (Counterclockwise) สัญญาณ Pulse A จะมีเฟสตามสัญญาณ Pulse B อยู่ 90 องศา ในการเขียนโปรแกรมเพื่อรับค่าจาก Rotary Encoder เราจะใช้การนับสัญญาณ Pulse เพ่ือระบุจานวนรอบในการหมุน และใชก้ ารตรวจสอบเฟสของสัญญาณ Pulse A และ Pulse B เพ่อื ระบุทิศทางการหมนุ รูปใบงานท่ี 10-2 ลกั ษณะสญั ญาณท่ีได้จากโรตาร่ีเอ็นโคด้ เดอร์ นอกจากการรับค่าดังกล่าวแล้ว Rotary Encoder บนบอร์ด One the All ยงั สามารถตรวจสอบการกดของผู้ใช้ด้วย Push Button Switch ที่อยู่ภายใน Rotary Encoder บนบอร์ด One the All จะมีR Pull-up ต่อไว้กับ Push Button Switch ตัวน้ี ดังน้ันเมื่อผู้ใช้กดลงบนก้านของ Rotary Encoder จะอ่านค่าจากขา SW ได้เท่ากับลอจิก 0 แต่ถ้าไม่กดลอจิกมีค่าเท่ากับ 1 หรือที่เรียกว่า Active Low และภายในRotary Encoder ยังมี LED สีเขียว และสีแดงที่ทาให้เราสามารถเปลี่ยนสีของ Rotary Encoder ได้อีกด้วยรายละเอยี ดขาสญั ญาณ I/O ของ Rotary Encoder แสดงดังรูปใบงานท่ี 10-3 รปู ใบงานท่ี 10-3 ตาแหน่งขาสัญญาณบนโมดลู โรตาร่ีเอ็นโค้ดเดอร์194 หนงั สอื ชุดฝกึ ดา้ นดิจิทัล

ตารางใบงานที่ 10-1 รายละเอยี ดของขาสัญญาณขาสญั ญาณ รายละเอยี ดA สญั ญาณ เอาตพ์ ุต Pulse AB สญั ญาณ เอาตพ์ ุต Pulse B ดจิ ิทลั อนิ พุต ไปยงั LED สเี ขียวGREEN ปอ้ นอินพุตสถานะ “0” = LED สีเขยี วดับ ป้อนอินพุตสถานะ “1” = LED สเี ขยี วติด ดจิ ทิ ลั อนิ พุต ไปยัง LED สีแดงRED ป้อนอนิ พตุ สถานะ “0” = LED สแี ดงดบั ป้อนอนิ พุตสถานะ “1” = LED สีแดงตดิ ดิจิทลั เอาตพ์ ตุ จาก Push Button SwitchSW จา่ ยเอาต์พตุ สถานะ “0” = Rotary Encoder ถกู กด จ่ายเอาต์พุตสถานะ “1” = Rotary Encoder ไมถ่ ูกกดช่องสญั ญาณสาหรับการใช้งานอินเตอร์รัพท์จากภายนอกแสดง ดังรปู ใบงานท่ี 10-4 รูปใบงานที่ 10-4 ตาแหนง่ ขาสัญญาณบนโมดลู โรตาร่ีเอน็ โค้ดเดอร์คาสง่ั ทีใ่ ชใ้ นการเปดิ ใชง้ านอนิ เตอรร์ พั ทจ์ ากภายนอก attachInterrupt (interrupt, ISR, mode); เมื่อ interrupt : หมายเลขของแหล่งอนิ เตอรร์ ัพท์ ISR : คอื ช่ือฟังกช์ ัน่ ท่จี ะไปทางานเมื่อเกิดการอินเตอรร์ ัพท์ mode : คอื เหตกุ ารณท์ ีต่ ้องการใหเ้ กิดการอินเตอร์รัพท์ขัน้ ตอนการทดลอง ในการทดลองนี้ จะเป็นการยกตัวอย่างการใช้งานอินเตอร์รัพท์จากภายนอกทั้งจากแหล่งเดียว และมากกว่าหนึ่งแหล่ง โดยใช้งานร่วมกับโรตาร่ีเอ็นโค้ดเดอร์และแสดงผลผ่านเซเวนเซกเมนต์ ซ่ึงดาเนินการทดลองตามขัน้ ตอนดงั นี้ หนงั สอื ชุดฝกึ ดา้ นดจิ ิทัล 195

1. เช่ือมต่อเซเวนเซกเมนต์และโรตารี่เอ็นโค้ดเดอร์เข้ากับอาร์ดุยโน ดังตารางที่ 10-2 และ รูปใบงานที่ 10-5ดังน้ีตารางใบงานท่ี 10-2 รายละเอยี ดการเชอ่ื มตอ่ ขาสัญญาณระหว่างโมดูลต่างๆ บอร์ดอาร์ดยุ โน โมดลู 7-Segment บอร์ดอาร์ดุยโน โมดลู Rotary Switch D1 A D18 A D2 B D17 B D3 C D16 D4 D D15 GREEN D5 E D19 RED D6 F SW D7 G D8 DP บอรด์ อาร์ดุยโน ไฟเลี้ยงวงจร D9 SC1 Vin 9V D10 SC2 GND GNDโดยแสดงได้ ดังรูปใบงานท่ี 10-5 รปู ใบงานที่ 10-5 การเชอ่ื มต่อเพือ่ ใช้ในการทดลอง196 หนังสอื ชุดฝกึ ด้านดจิ ทิ ัล

2. เขียนโปรแกรมบน Arduino IDE ตามโปรแกรมการทดลองท่ี 10-1โปรแกรมการทดลองที่ 10-11 int A = 1;2 int B = 2;3 int C = 3;4 int D = 4;5 int E = 5;6 int F = 6;7 int G = 7;8 int DP = 8;9 int SC1 = 9;10 int SC2 = 10;1112 int A_Pulse = 18; // ext int 513 int B_Pulse = 17; // input14 int GREEN = 16; // out15 int RED = 15; // out16 int SW_Rotary = 19; // ext int 41718 int num[10] =19 {0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};2021 volatile int value = 50;22 volatile int color = 0;2324 void digitalWrite_8bit(int digit){25 digitalWrite(A, (digit & 0x01)); // set Bit 026 digitalWrite(B, (digit & 0x02)); // set Bit 127 digitalWrite(C, (digit & 0x04)); // set Bit 228 digitalWrite(D, (digit & 0x08)); // set Bit 329 digitalWrite(E, (digit & 0x10)); // set Bit 430 digitalWrite(F, (digit & 0x20)); // set Bit 531 digitalWrite(G, (digit & 0x40)); // set Bit 632 digitalWrite(DP, (digit & 0x80)); // set Bit 733 }3435 void show_segment(int n){36 int a = n%10 ; int b = n/10;37 digitalWrite(SC1,LOW);38 digitalWrite(SC2,HIGH);39 digitalWrite_8bit(num[a]); delay(10);4041 digitalWrite(SC2,LOW);42 digitalWrite(SC1,HIGH);43 digitalWrite_8bit(num[b]); delay(10);44 }45 หนังสอื ชุดฝึกดา้ นดิจิทัล 197

โปรแกรมการทดลองท่ี 10-1 (ตอ่ )4647 void setup (){48 pinMode(A,OUTPUT);49 pinMode(B,OUTPUT);50 pinMode(C,OUTPUT);51 pinMode(D,OUTPUT);52 pinMode(E,OUTPUT);53 pinMode(F,OUTPUT);54 pinMode(G,OUTPUT);55 pinMode(DP,OUTPUT);56 pinMode(SC1,OUTPUT);57 pinMode(SC2,OUTPUT);58 pinMode(GREEN,OUTPUT);59 pinMode(RED,OUTPUT);60 attachInterrupt(5, rotary_check, FALLING); // A61 pinMode(B_Pulse,INPUT); // B6263 }6465 void rotary_check(void){66 if(digitalRead(B_Pulse)==HIGH)67 if(value < 99) value++;68 if(digitalRead(B_Pulse)==LOW)69 if(value > 0) value--;70 }717273 void loop (){74 show_segment(value);75 }763. ทาการ Compile แลว้ Upload โปรแกรมลงบน Arduino บนั ทึกผลการทางานเบอ้ื งต้น………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………4. ทดสอบการทางาน โดยหมุนที่โรตารี่เอ็นโค้ดเดอร์ สังเกตการณ์แสดงค่าบนเซเวนเซกเมนต์ แล้วบันทึกผลการทางาน…………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………198 หนงั สือชุดฝกึ ดา้ นดิจิทลั

5. จากการทดลอง จงทดสอบและอธบิ ายการทางานของโปรแกรมมาพอเขา้ ใจ………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………6. แกไ้ ขโปรแกรม โดยเพ่มิ เติมส่วนตา่ งๆ ดงั โปรแกรมการทดลองท่ี 10-1(แก้ไข)โปรแกรมการทดลองท่ี 10-1 (แกไ้ ข)47 void setup (){48 pinMode(A,OUTPUT);49 pinMode(B,OUTPUT);50 pinMode(C,OUTPUT);51 pinMode(D,OUTPUT);52 pinMode(E,OUTPUT);53 pinMode(F,OUTPUT);54 pinMode(G,OUTPUT);55 pinMode(DP,OUTPUT);56 pinMode(SC1,OUTPUT);57 pinMode(SC2,OUTPUT);58 pinMode(GREEN,OUTPUT);59 pinMode(RED,OUTPUT);60 attachInterrupt(5, rotary_check, FALLING); // A61 attachInterrupt(4, switch_in , FALLING); // Sw rotary62 pinMode(B_Pulse,INPUT); // B63 }6465 void rotary_check(void){66 if(digitalRead(B_Pulse)==HIGH)67 if(value < 99) value++;68 if(digitalRead(B_Pulse)==LOW)69 if(value > 0) value--;70 }7172 void loop (){73 show_segment(value);74 }7576 void switch_in(void){77 if(color == 0){78 digitalWrite(GREEN,HIGH);79 digitalWrite(RED,LOW);80 }81 if(color == 1){82 digitalWrite(RED,HIGH);83 digitalWrite(GREEN,LOW);84 }85 color = !color;86 } หนังสือชดุ ฝึกด้านดิจทิ ลั 199

7. ทาการ Compile โปรแกรมแล้ว Upload โปรแกรมลงบน Arduino บันทกึ ผลการทางานเบอ้ื งตน้……………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………8. ทดสอบการทางาน โดยกดสวติ ซ์ และหมุนตวั โรตาร่เี อน็ โคด้ เดอร์ แลว้ บนั ทกึ ผลการทางาน………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………สรปุ ผลการทดลอง………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………คาถามทา้ ยการทดลอง1. จากการทดลองขา้ งตน้ เป็นการใช้อินเตอร์รพั ท์ภายนอกหมายเลขใดบ้าง และจงอธบิ ายว่าต่ออยู่กับขาใด จะเกดิ การอนิ เตอรร์ พั ทเ์ ม่อื เกดิ เหตุการณใ์ ด…………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………2. จงอธิบายข้นั ตอนของการเขยี นโปรแกรมเพื่อใช้งานอินเตอร์รัพท์จากภายนอก มาเปน็ ข้ันตอน……………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………200 หนงั สอื ชดุ ฝกึ ดา้ นดิจิทัล


Like this book? You can publish your book online for free in a few minutes!
Create your own flipbook