Page 1

Unicon  181

   การอานคาหรือรับคาจากสวิตช เปนความสามารถหนึงที ่ ไมโครคอนโทรลเลอร ่ สมัยใหมตองรองรับและ เชือมต ่ อใชงานได โดยเฉพาอยางยิ่งกับการติดตอสวิตชกดจํานวนมากเปน 10 ตัวขึ้นไป การตอแบบพื้นฐานใน ลักษณะสวิตชหนึงตั ่ วตอขาพอรตหนึงขา ่ เปนการเชือมต ่ อทีง่ ายทังทางฮาร ้ ดแวรและกระบวนการทางซอฟตแวร แตจะสินเปลื ้ องและทําใหขาพอรตของไมโครคอนโทรลเลอรไดรับการจัดสรรไปใชงานแบบไมคุมค  า ทางออกของการใชงานสวิตชจํานวนมากกับไมโครคอนโทรลเลอรคือ ทําการจัดวงจรการเชื่อมตอ สวิตชใหมใหเปนแบบเมตริกซ เรียกวา วงจรสวิตชแบบเมตริกซ (matrix switch) ดังแสดงตัวอยางวงจรในรูป ที่ 8-1 สวิตชจะถูกตอกันในแนวแกนตังและแกนนอน ้ เรียกสายสัญญาณในแนวตังว ้ า หลัก หรือ คอลัมน (column) ในขณะทีสายสั ่ ญญาณในแนวนอนจะเรียกวา แถว หรือ โรว (row) ดังนันค ้ าของสวิตชจึงประกอบดวย ตําแหนง ในแนวคอลัมนและโรว กระบวนการทีจะทํ ่ าใหไดมาซึงค ่ าของสวิตชมีขันตอนพอสมควร ้ แตวงจรของสวิตชแบบ นีมี้ ขอดีคือ รองรับการเพิมของสวิ ่ ตชไดอยางสะดวก เพียงเพิมเติ ่ มจํานวนสวิตชและแกไขซอฟตแวรอีกเล็กนอยเทา นัน้ ทําใหวงจรสวิตชเมตริกซเปนทีนิ่ ยมใชมากในระบบควบคุมอัตโนมัติหรือกึงอั ่ ตโนมัติทีมี่ จํานวนสวิตชมากกวา 8 ตัว ในการใชงานทัวไปจะเรี ่ ยกสวิตชแบบเมตริกซนีว้ า คียแพด (keypad) R1-C1

R1-C2

R1-C3

R1-C4

R2-C1

R2-C2

R2-C3

R2-C4

R3-C1

R3-C2

R3-C3

R3-C4

R4-C1

R4-C2

R4-C3

R4-C4

R1

R2

R3

R4 C1

C2

C3

C4

รูปที่ 8-1 วงจรพื้นฐานของสวิตชมเตริกซหรือคียแพด 4x4 จุด และหนาตาของคียแพด 4x4 จุดทีมี่ พืนฐานโครงสร ้ างวงจรมาจากสวิตชเมตริกซ 4x4 จุด (ภาพประกอบจาก www.digitkey.com, www.mikroe.com, www.futurelec.com)


182 

Unicon

   มีตัวอยางวงจรเชื่อมตอสวิตชเมตริกซขนาด 4x4 จุดกับไมโครคอนโทรลเลอรแสดงในรูปที่ 8-2 ใชขา พอรตของไมโครคอนโทรลเลอรเชื่อมตอเขากับสวิตชเมตริกซรวม 8 เสนคือ สายของคอลัมน 4 สาย (C1 ถึง C4) และสายทางโรวอีก 4 สาย (R1 ถึง R4) โดยเฉพาะที่ขาพอรตทีต่ อกับแนวคอลัมนทั้งหมดจะตองกําหนด ใหทํางานเปนอินพุต และควรมีตัวตานทานตอพูลอัปไวเพื่อกําหนดสภาวะเริ่มตนทีไม ่ มีการกดสวิตช ในการทํางานไมโครคอนโทรลเลอรจะสงขอมูล “0” ไปยังขาพอรตทีต่ อกับสายโรวของสวิตชเมตริกซ เริมจาก ่ R1 ไลไปจนถึง R4 นันคื ่ อขอมูลทีส่ งออกไปจะมีดวยกัน 4 คาคือ 1110, 1101, 1011 และ 0111 ในทุกครังที ้ ่ มีการสงขอมูลไปยังสายโรวหรือแถวของสวิตชเมตริกซ ไมโครคอนโทรลเลอรจะอานคาทีขาพอร ่ ตซึงต ่ อกับสาย คอลัมนทัง้ 4 ขาเขามาดวย หากไมมีการกดสวิตช คาของขาพอรตทีต่ อกับสายคอลัมนของสวิตชเมตริกซจะเปน 1111 ทังหมด ้ ถาหากมีการกดคีย คาของขอมูลก็จะไมเปน 1111 อีกตอไป เปนการแจงใหทราบวา มีการกดสวิตชเมตริกซ ขึนแล ้ ว จากนันไมโครคอนโทรลเลอร ้ ก็จะคนหาตําแหนงตอไป

R1-C1

R1-C2

R1-C3

R1-C4

R2-C1

R2-C2

R2-C3

R2-C4

R3-C1

R3-C2

R3-C3

R3-C4

R4-C1

R4-C2

R4-C3

R4-C4

ไมโครคอนโทรลเลอร R1

R2

พอรตเอาตพุต R3

R4

+5V

C1

C2

C3

C4

พอรตอินพุต 4.7k~10k

รูปที่ 8-2 วงจรเชือมต ่ อสวิตชเมตริกซขนาด 4x4 จุดเขากับไมโครคอนโทรลเลอร


Unicon  183

 เพื่ อความสะดวกในการเรียนรูและทดลองการเชื่อมตอกับสวิตชเมตริกซหรือคียแพดของฮารดแวร Wiring I/O ในที่นีจึ้ งนํา ZX-SW16 แผงวงจรสวิตชเมตริกซ 4x4 จุดมาใชประกอบในการทดลอง ในรูปที่ 8-3 แสดงการจัดวางตําแหนงของสวิตชบนแผงวงจร ZX-SW16 และวงจรสมบูรณ แผงวงจร ZX-SWITCH16 ไดรับการออกแบบใหสามารถเลือกติดตังตั ้ วตานทานทังแบบพู ้ ลอัปหรือพูล ดาวนเพือกํ ่ าหนดสถานะของสายสัญญาณในขณะทีไม ่ มีการกดสวิตช โดยตัวตานทานทีแนะนํ ่ าคือ ตัวตานทานแบบ เน็ตเวิรก 5 ขา ซึงภายในจะมี ่ โครงสรางเปนตัวตานทาน 4 ตัวทีต่ อขาหนึงร ่ วมกัน ดังแสดงในรูปที่ 8-4 จุดตอทีไม ่ ไดกําหนดชือหรื ่ อจุดตอรูปสี่เหลียมจะเป ่ นจุดบัดกรีลอย ผูใชงานสามารถตอเขากับไฟเลียง ้ หรือกราวดก็ได ดังในรูปที่ 8-5 หากตอเขากับไฟเลี้ยงก็จะเปนการกําหนดใหการตอตัวตานทานเขากับแผงวงจร สวิตชนีเป ้ นแบบพูลอัป นันคื ่ อ มีการกําหนดสถานะลอจิก “1” ใหกับสายคอลัมนในขณะที่ไมมีการกดสวิตช หากตอกราวดก็จะเปนการกําหนดใหการตอตัวตานทานเขากับแผงวงจรสวิตชนีเป ้ นแบบพูลดาวน นันคื ่ อ มีการ กําหนดสถานะลอจิก “0” ใหกับสายคอลัมนในขณะที่ไมมีการกดสวิตช

R1-C1

R1-C2

R1-C3

R1-C4

R2-C1

R2-C2

R2-C3

R2-C4

R3-C1

R3-C2

R3-C3

R3-C4

R4-C1

R4-C2

R4-C3

R4-C4

C1 C2 C3 C4 R1 R2R3 R4

R1-C1

R1-C2

R1-C3

R1

R1-C4

R2

R3 R2-C1

R2-C2

R2-C3

R2-C4

R4

R3-C1

R3-C2

R3-C3

R3-C4

R4-C1

R4-C2

R4-C3

R4-C4

C1

(ก) รูปรางและการกําหนดตําแหนงสวิตชของ ZX-SW16 แผงวงจรสวิตชเมตริกซ 4x4 จุด

C2

C3

C4

(ข) วงจรสมบูรณของ ZX-SW16 แผงวงจรสวิตชเมตริกซ 4x4 จุด

รูปที่ 8-3 หนาตาและวงจรของแผงวงจรสวิตชเมตริกซขนาด 4x4 จุดรุน ZX-SW16


184 

Unicon

472

(ก) รูปรางของตัวตานทานเน็ตเวิรก แบบ 5 ขา

(ข) วงจรภายในของตัวตานทานเน็ตเวิรก แบบ 5 ขา

รูปที่ 8-4 ลักษณะของตัวตานทานเน็ตเวิรกและวงจรภายในทีแนะนํ ่ าใหใชกับ ZX-SW16 แผงวงจร สวิตชเมตริกซ 4x4 จุด ถาตอกับไฟเลี้ยง เปนการกําหนดใหตอตัวตานทานพูลอัป ถาตอกับกราวด เปนการกําหนดใหตอตัวตานทานพูลดาวน

บัดกรีติดตั้งตัวตานทาน เน็ตเวิรกแบบ 5 ขา คา 4.7k ถึง 10k

C1 C2 C3 C4 R1R2 R3R4

R1-C1

R1-C2

R1-C3

R1-C4

R2-C1

R2-C2

R2-C3

R2-C4

R3-C1

R3-C2

R3-C3

R3-C4

R4-C1

R4-C2

R4-C3

R4-C4

รูปที่ 8-5 แสดงแนวทางการบัดกรีเพือต ่ อตัวตานทานเน็ตเวิรกเขากับแผงวงจรสวิตชเมตริกซ ZX-SW16 เพือกํ ่ าหนดสถานะลอจิกในกรณีทีไม ่ มีการกดสวิตช


Unicon  185

     ในการทดลองนี้เปนการอานคาสวิตชที่ถูกกดบนแผงวงจร ZX-SW16 แลวนําคาของสวิตชตัวนั้นมา แสดงบนจอแสดงผลของ GLCD-XT

8.6.1 เตรียมการบอรด Unicon (1) ถอดบอรด GLCD-XT ออกจากบอรด Unicon กอน หากมีการติดตั้งอยู (2) บัดกรีคอนเน็กเตอร IDC ตัวเมีย 16 ขาแถวเดี่ยว เขาที่จุดบัดกรีของขาพอรตทีว่ างอยูทางซายมือ ของบอรด Unicon (3) บัดกรีคอนเน็กเตอร IDC ตัวเมีย 10 ขาแถวเดียว ่ เขาที่จุดบัดกรีของขาพอรตทีว่ างอยูทางขวามื  อของ บอรด Unicon (4) นําบอรด GLCD-XT กลับมาติดตั้งเขากับบอรด Unicon จะไดบอรด Unicon ที่พรอมสําหรับการทดลองเชื่อมตอกับแผงวงจรสวิตชเมตริกซ ZX-SW16 ดังรูป ที่ 8-6 อยางไรก็ตาม อาจใชคอนเน็กเตอร IDC ตัวผูแถวเดี  ่ยวแทนก็ได

8.6.2 เตรียมการแผงวงจร ZX-SW16 บัดกรีตัวตานทานเน็ตเวิรก 4.7k 5 ขา เขาที่ตําแหนง COLUMN ของแผงวงจร โดยใหขารวมอยูชิด ขวา ใชรูปที่ 8-5 ในการอางอิง

รูปที่ 8-6 แสดงบอรด Unicon ทีบั่ ดกรีคอนเน็กเตอร IDC ทังแบบตั ้ วเมีย (ภาพดานซาย) และแบบตัวผู (ภาพดานขวา) สําหรับใชงานกับแผงวงจรเมตริกซสวิตช ZX-SW16


186 

Unicon

8.6.3 เชื่อมตอวงจร ทําการเชื่อมตอวงจรตามรูปที่ 8-7 ที่บอรด Unicon หากเลือกใชคอนเน็กเตอร IDC ตัวเมีย ใหใชสาย ตอวงจรเบอร #22AWG ที่ใชกับแผงตอวงจรเบรดบอรดในการเชื่อมตอ หรือจะใชสาย IDC-1MF จํานวน 9 เสน ในการเชื่อมตอก็ได หากเลือกใชคอนเน็กเตอรตัวผู แนะนําใหใชสาย IDC-1MF หรือ IDC-1FF ในการเชื่อมตอ ในรูปที่ 8-8 แสดงหนาตาของสายแบบตางๆ ที่ใชในการเชื่อมตอวงจร

+5V

3

1

2 0

1

4 30 12 6

ZX-SW16

R1-C1

R1-C2

R1-C3

R1-C4

R2-C1

R2-C2

R2-C3

R2-C4

R3-C1

R3-C2

R3-C3

R3-C4

R4-C1

R4-C2

R4-C3

R4-C4

Unicon port

C1 C2 C3 C4 R1 R2 R3 R4

R1-C1

R2-C1

R1-C2

R2-C2

R1-C3

R2-C3

R1-C4

R3-C2

R3-C3

3

R2

2

R3

0

R4

1

R2-C4

+5V R3-C1

R1

R3-C4

C1

C2

C3

C4

4 30

R4-C1

R4-C2

R4-C3

R4-C4

บัดกรีตัวตานทานเน็ตเวิรก 4.7k 5 ขา

12 6 R1 4.7k *4

ตอวงจรลงบนเบรดบอรด

รูปที่ 8-7 วงจรทดลองใชงานบอรด Unicon กับแผงวงจรสวิตชเมตริกซ ZX-SW16 อานคาสวิตชทีถู่ กกด มาแสดงผลทีจอแสดงผลของบอร ่ ด GLCD-XT


Unicon  187

(ค) สายตอวงจรแบบสายไฟเดี่ยว เบอร #22AWG (ก) สาย IDC-1FF

(ข) สาย IDC-1MF

รูปที่ 8-8 แสดงสายสัญญาณทีใช ่ ในการทดลองนี้ (ก) ตัวอยางการตอวงจร ดวยสายตอวงจรเบอร #22AWG

(ข) ตัวอยางการตอวงจร ดวยสาย IDC-1MF หรือ IDC-1FF

รูปที่ 8-9 ภาพตัวอยางของการตอวงจรระหวางบอรด Unicon กับแผงวงจรสวิตชเมตริกซ ZX-SW16


188 

Unicon

จากวงจรใชขาพอรต 3, 2, 0 และ 1 ตอกับสายคอลัมน C1 ถึง C4 ของสวิตชเมตริกซ และกําหนดให ทํางานเปนขาพอรตอินพุตดิจิตอล สวนขาพอรต 4, 30, 12 และ 6 ตอกับสายโรว R1 ถึง R4 ของสวิตชเมตริกซ และกําหนดใหทํางานเปนขาพอรตเอาตพุตดิจิตอล ขารวมของแผงวงจรสวิตชตอกับขาไฟเลียง ้ +5V ของบอรด Unicon จึงทําใหขาพอรต 4, 30, 12 และ 6 มีการตอตัวตานทานพูลอัปคา 4.7k กับไฟเลี้ยง เพื่อกําหนดสถานะ ลอจิกใหแนนอนในกรณีที่ไมมีการกดสวิตช

8.6.4 โปรแกรมทดลอง แสดงรายละเอียดของโปรแกรมสําหรับทดลองในโปรแกรมที่ 8-1 #include <unicon.h> char Rpin[4] = {4,30,12,6}; char Cpin[4] = {3,2,0,1}; char i,j,key=16; void Keypad() { for (i=0;i<4;i++) { out(Rpin[i],0); for(j=0;j<4;j++) { if (in(Cpin[j])==0) { key=(i*4)+j; } } out(Rpin[i],1); } } void setup() { glcdClear(); setTextSize(5); glcd(1,1,"??"); while (key==16) { Keypad(); } } void loop() { Keypad(); glcd(1,1,"%d ",key); }

// Include main library // Define ROW Pin // Define COL Pin // Scan key function // ROW counter // Set ROW ==> LOW

// Check the key pressed in COL at ROW ===> LOW // ROW * COL = KEY data

// Set ROW ==> HIGH

// // // //

Clear screen of GLCD-XT Set text size of GLCD-XT Show title character Wait for key pressing

// Scan and get key data function // Show key ==> GLCD-XT

โปรแกรมที่ 8-1 ไฟล Keypad4x4_simple.ino โปรแกรมภาษา C/C++ ของ Arduino สําหรับบอรด Unicon เพือเชื ่ อมต ่ อและอานคาจากแผงวงจรสวิตชเมตริกซ ZX-SW16 แสดงผลทีจอแสดงผลกราฟ ่ ก LCD สีของบอรด GLCD-XT


Unicon  189

หลักการของการสแกนคียหรือตรวจสอบการกดคียในโปรแกรม อธิบายไดดังนี้ ที่ตอนตนของโปรแกรมมีการประกาศตัวแปรแบบอะเรยไว 2 ตัวคือ Rpin และ Cpin char Rpin[4] = {4,30,12,6}; // Define ROW Pin char Cpin[4] = {3,2,0,1};

// Define COL Pin

โดยตัวแปรแตละตัวมีสมาชิก 4 ตัว ซึงก็ ่ คือขาพอรตทีใช ่ งานนันเอง ่ ดวยการกําหนดตําแหนงขาพอรต ในลักษณะนี้ จึงกําหนดตําแหนงของสวิตชไดดังรูปที่ 8-10 เมื่อเริ่มโปรแกรม กําหนดใหตัวแปร i เปนตัวนับตําแหนงของสายสัญญาณดานแถวหรือโรว มีคา 0 ถึง 3 (ไมเกิน 4) และเพิ่มคาครั้งละหนึง่ จากนั้นทําการสงคาลอจิก “0” ออกมายังขาพอรตแถวแรกที่กําหนด ดวย Rpin ดวยคําสั่ง out(Rpin[i],0); จากนั้นทําการกําหนดคาตัวแปร j ใหมีคา 0 ถึง 3 และมีการเพิ่ม คาทีละหนึ่ง ตัวแปร j ใชในการชี้ตําแหนงของสวิตชที่ถูกกดในแนวหลักหรือคอลัมน โดยจะวนตรวจสอบวา มีการกดสวิตชหรือไม ดวยคําสั่ง if (in(Cpin[j])==0) Unicon port +5V

3 2 0 1

4 30 12 6

C1 C2 C3 C4 R1 R2R3 R4

0

1

2

3

R1-C1

R1-C2

R1-C3

R1-C4

4

5

6

7

R2-C1

R2-C2

R2-C3

R2-C4

8 R3-C1

9 10 11 R3-C2

R3-C3

R3-C4

12 13 14 15 R4-C1

R4-C2

R4-C3

R4-C4

                                                         

รูปที่ 8-10 แสดงความสัมพันธระหวางขาพอรตของบอรด Unicon กับตําแหนงของสวิตชบนแผงวงจร สวิตช ZX-SW16


190 

Unicon



 R1-C1

R1-C2

0

R1-C3

1

Unicon

R1-C4

2

3

R2-C1

R2-C2

R2-C3

R2-C4

R3-C1

R3-C2

R3-C3

R3-C4

R4-C1

R4-C2

R4-C3

R4-C4

 if (in(Cpin[j])==0)

       

+5V

C1

C2

C3

R1

0

4

R2

1

30

R3

1

12

R4

1

6

C4

1 0

R1 4.7k *4

2 3

รูปที่ 8-11 กลไกการทํางานของโปรแกรมในการตรวจสอบการกดสวิตชเมือ่ i = 0 หากมีการกดสวิตชเกิดขึ้นเมือค ่ า j เปน “0” ตําแหนงของสวิตชที่กดจะคํานวณไดจากคําสั่ง key=(i*4)+j;

เมื่อ i=0 เนืองจากเริ ่ ่มตนสแกนแถวแรกและ j=0 คาของ key จึงเทากับ (0 * 4) + 0 = 0 นันคื ่ อ สวิตช 0 ถูกกด ในรูปที่ 8-11 แสดงกลไกการทํางานของโปรแกรมในการตรวจสอบการกดสวิตชเมื่อ i = 0 หากไมมีการกดสวิตชเกิดขึ้น คาของ j จะเพิ่มเปน 1, 2 และ 3 หากยังไมมีการกดสวิตชเลย โปรแกรม จะออกจากเงือนไขของลู ่ ปตรวจสอบการกดสวิตชเมื่อ i=0 จากนั้นจะเพิ่มคาของ i เปน 1 ก็จะเลือนการสแกน ่ มายั งแถวที่ 2 ขาพอรต 30 จะทําหนาที่นี้ มีการเขียนขอมูล “0” มายังขาพอรต 30 เพื่อสงมายังขาของสวิตช ตําแหนง 4, 5, 6 และ 7 จากนั้นเขาสูลูปตรวจสอบการกดสวิตชดวยคําสั่ง if (in(Cpin[j])==0) อีกครั้ง คาของ j ก็จะเริ่มจาก 0 ถึง 3 หากมีกดสวิตชเกิดขึ้นเมือ่ j=2 คาของ key จากคําสั่ง key=(i*4)+j; จะได (1 * 4) + 2 = 4 + 2 = 6 นันคื ่ อ สวิตช 6 ถูกกด ในรูปที่ 8-12 แสดงกลไกการทํางานของโปรแกรมในการตรวจ สอบการกดสวิตชเมื่อ i=1 การทํางานจะวนเชนนี้สําหรับ i=2 และ i=3 หากไมมีการกดสวิตชใดๆ ก็จะวนกลับไปที่ i=0 ไป ตลอดการทํางาน รูปที่ 8-13 และ 8-4 แสดงกลไกการทํางานของโปรแกรมในการตรวจสอบการกดสวิตชเมื่อ i=2 และ i=3


Unicon  191



 R1-C1

R1-C2

R1-C3

R1-C4

R2-C1

R2-C2

R2-C3

R2-C4



4

if (in(Cpin[j])==0)

       

5

6

R3-C2

R3-C3

R3-C4

R4-C1

R4-C2

R4-C3

R4-C4

+5V

C2

R1

1

4

R2

0

30

R3

1

12

R4

1

6

7

R3-C1

C1

Unicon

C3

C4

1 0 2

R1 4.7k *4

3

รูปที่ 8-12 กลไกการทํางานของโปรแกรมในการตรวจสอบการกดสวิตชเมือ่ i = 1

  R1-C1

R1-C2

R1-C3

R1-C4

R2-C1

R2-C2

R2-C3

R2-C4

R3-C1

R3-C2

R3-C3

R3-C4

Unicon

 if (in(Cpin[j])==0)

       

8

9

R4-C1

+5V

R4-C2

C1

10 R4-C3

C2

11

R1

1

4

R2

1

30

R3

0

12

R4

1

6

R4-C4

C3

C4

1 0

R1 4.7k *4

2 3

รูปที่ 8-13 กลไกการทํางานของโปรแกรมในการตรวจสอบการกดสวิตชเมือ่ i = 2


192 

Unicon

  R1-C1

R1-C2

R1-C3

R1-C4

R2-C1

R2-C2

R2-C3

R2-C4

R3-C1

R3-C2

R3-C3

R3-C4

R4-C1

R4-C2

R4-C3

R4-C4

Unicon

 if (in(Cpin[j])==0)

       

12

+5V

C1

13

C2

14

C3

15

R1

1

4

R2

1

30

R3

1

12

R4

0

6

C4

1 0

R1 4.7k *4

2 3

รูปที่ 8-14 กลไกการทํางานของโปรแกรมในการตรวจสอบการกดสวิตชเมือ่ i = 3

Unicon08-181192  
Read more
Read more
Similar to
Popular now
Just for you