- วัสดุที่จำเป็น
- การทำความเข้าใจโมดูลจอยสติ๊ก:
- แผนภูมิวงจรรวม:
- การเขียนโปรแกรมสำหรับเชื่อมต่อจอยสติ๊ก:
- มุมมองจำลอง:
- ฮาร์ดแวร์และการทำงาน:
อุปกรณ์อินพุตมีบทบาทสำคัญในโครงการอิเล็กทรอนิกส์ใด ๆ อุปกรณ์ป้อนข้อมูลเหล่านี้ช่วยให้ผู้ใช้โต้ตอบกับโลกดิจิทัล อุปกรณ์ป้อนข้อมูลสามารถทำได้ง่ายเพียงแค่ปุ่มกดหรือซับซ้อนพอ ๆ กับหน้าจอสัมผัส แตกต่างกันไปตามความต้องการของโครงการ ในบทช่วยสอนนี้เราจะเรียนรู้วิธีการเชื่อมต่อจอยสติ๊กกับไมโครคอนโทรลเลอร์ PIC ของเราจอยสติ๊กเป็นวิธีที่ยอดเยี่ยมในการโต้ตอบกับโลกดิจิทัลและเกือบทุกคนจะเคยใช้อันนี้เพื่อเล่นวิดีโอเกมในช่วงวัยรุ่น
จอยสติ๊กอาจดูเหมือนเป็นอุปกรณ์ที่มีความซับซ้อน แต่จริงๆแล้วมันเป็นเพียงการรวมกันของโพเทนชิโอมิเตอร์สองตัวและปุ่มกด ดังนั้นจึงง่ายมากที่จะเชื่อมต่อกับ MCU ใด ๆ หากเรารู้วิธีใช้คุณสมบัติ ADC ของ MCU นั้น เราได้เรียนรู้วิธีใช้ ADC กับ PIC แล้วดังนั้นจึงเป็นเพียงวิธีแก้ปัญหาในการเชื่อมต่อจอยสติ๊ก สำหรับผู้ที่เป็นมือใหม่ขอแนะนำให้เรียนรู้โครงการ ADC ข้างต้นรวมถึงโครงการลำดับการกะพริบ LED เพื่อให้เข้าใจโครงการได้ง่ายขึ้น
วัสดุที่จำเป็น
- PicKit 3 สำหรับการเขียนโปรแกรม
- โมดูล Joy Stick
- PIC16F877A ไอซี
- 40 - ขายึด IC
- คณะกรรมการ Perf
- 20 MHz คริสตัล OSC
- หมุด Bergstik
- ตัวต้านทาน 220ohm
- 5-LEDs ทุกสี
- 1 ชุดบัดกรี
- IC 7805
- อะแดปเตอร์ 12V
- การเชื่อมต่อสายไฟ
- เขียงหั่นขนม
การทำความเข้าใจโมดูลจอยสติ๊ก:
จอยสติ๊กมีให้เลือกหลายรูปทรงและขนาดโมดูลจอยสติ๊กทั่วไป จะแสดงในรูปด้านล่าง จอยสติ๊กไม่ได้เป็นอะไรมากไปกว่าโพเทนชิโอมิเตอร์และปุ่มกดที่ติดตั้งอยู่เหนือการจัดเรียงกลไกอัจฉริยะ โพเทนชิออมิเตอร์ใช้เพื่อติดตามการเคลื่อนไหว X และ Y ของจอยสติ๊กและปุ่มนี้ใช้เพื่อตรวจจับหากกดจอยสติ๊ก โพเทนชิโอมิเตอร์ทั้งสองให้แรงดันไฟฟ้าแบบอะนาล็อกซึ่งขึ้นอยู่กับตำแหน่งของจอยสติ๊ก และเราสามารถหาทิศทางการเคลื่อนที่ได้โดยการตีความการเปลี่ยนแปลงแรงดันไฟฟ้าเหล่านี้โดยใช้ไมโครคอนโทรลเลอร์บางตัว ก่อนหน้านี้เราได้เชื่อมต่อ Joystick กับ AVR, Joystick กับ Arduino และ Raspberry Pi
ก่อนที่จะเชื่อมต่อเซ็นเซอร์หรือโมดูลใด ๆ กับไมโครคอนโทรลเลอร์สิ่งสำคัญคือต้องรู้ว่ามันทำงานอย่างไร ที่นี่จอยสติ๊กของเรามีพินเอาต์พุต 5 พินซึ่งสองอันมีไว้สำหรับพลังงานและสามอันสำหรับข้อมูล โมดูลควรใช้พลังงาน + 5V พินข้อมูลมีชื่อว่า VRX, VRY และ SW
คำว่า“ VRX” ย่อมาจาก Variable voltage บนแกน X และคำว่า“ VRY” หมายถึง Variable voltage ในแกน Yและ“ SW” หมายถึงสวิตช์
ดังนั้นเมื่อเราเลื่อนจอยสติ๊กไปทางซ้ายหรือขวาค่าแรงดันไฟฟ้าบน VRX จะแตกต่างกันไปและเมื่อเราปรับเปลี่ยนขึ้นหรือลง VRY จะแตกต่างกันไป ในทำนองเดียวกันเมื่อเราเคลื่อนย้ายในแนวทแยงมุมเราทั้ง VRX และ VRY จะแตกต่างกันไป เมื่อเรากดสวิตช์ขา SW จะเชื่อมต่อกับกราวด์ รูปด้านล่างจะช่วยให้คุณเข้าใจค่า Output ได้ดีขึ้นมาก
แผนภูมิวงจรรวม:
ตอนนี้เรารู้แล้วว่า Joy stick ทำงานอย่างไรเราสามารถสรุปได้ว่าเราจะต้องใช้หมุด ADC สองตัวและพินอินพุตดิจิตอลหนึ่งอันเพื่ออ่านพินข้อมูลทั้งสามของโมดูลจอยสติ๊ก แผนภาพวงจรทั้งหมดแสดงในภาพด้านล่าง
ดังที่คุณเห็นในแผนภาพวงจรแทนที่จะใช้จอยสติ๊กเราได้ใช้โพเทนชิออมิเตอร์ RV1 และ RV3 สองตัวเป็นอินพุตแรงดันไฟฟ้าอะนาล็อกและอินพุตตรรกะสำหรับสวิตช์ คุณสามารถติดตามป้ายที่เขียนด้วยสีม่วงเพื่อให้ตรงกับชื่อหมุดและทำการเชื่อมต่อของคุณตามนั้น
โปรดทราบว่าพินอนาล็อกเชื่อมต่อกับช่อง A0 และ A1 และสวิตช์ดิจิทัลเชื่อมต่อกับ RB0 นอกจากนี้เรายังจะมีไฟ LED 5 ดวงที่เชื่อมต่อเป็นเอาท์พุตเพื่อให้เราสามารถเรืองแสงได้ตามทิศทางที่จอยสติ๊กขยับ ดังนั้นหมุดเอาต์พุตเหล่านี้จึงเชื่อมต่อกับ PORT C จาก RC0 ถึง RC4 เมื่อเราแพนแผนภาพวงจรของเราแล้วเราสามารถดำเนินการเขียนโปรแกรมต่อได้จากนั้นจำลองโปรแกรมในวงจรนี้จากนั้นสร้างวงจรบนเขียงหั่นขนมจากนั้นอัปโหลดโปรแกรมไปยังฮาร์ดแวร์ เพื่อให้คุณทราบถึงฮาร์ดแวร์ของฉันหลังจากทำการเชื่อมต่อด้านบนดังแสดงด้านล่าง
การเขียนโปรแกรมสำหรับเชื่อมต่อจอยสติ๊ก:
โปรแกรมจอยสติกอินเตอร์เฟซกับ PICเป็นเรื่องง่ายและตรงไปตรงมา เรารู้แล้วว่าพินใดที่จอยสติ๊กเชื่อมต่ออยู่และหน้าที่ของมันคืออะไรดังนั้นเราจึงต้องอ่านแรงดันแอนะล็อกจากพินและควบคุม LED เอาต์พุตตามนั้น
โปรแกรมที่สมบูรณ์ในการดำเนินการนี้มีให้ในตอนท้ายของเอกสารนี้ แต่สำหรับการอธิบายสิ่งต่างๆฉันกำลังทำลายโค้ดเป็นตัวอย่างข้อมูลที่มีความหมายขนาดเล็กด้านล่าง
เช่นเคยโปรแกรมเริ่มต้นด้วยการตั้งค่าบิตการกำหนดค่าเราจะไม่พูดคุยเกี่ยวกับการตั้งค่าบิตการกำหนดค่ามากนักเนื่องจากเราได้เรียนรู้แล้วในโครงการ LED กะพริบและมันก็เหมือนกันสำหรับโครงการนี้ด้วย เมื่อตั้งค่าบิตการกำหนดค่าแล้วเราจะต้องกำหนดฟังก์ชัน ADC สำหรับใช้โมดูล ADC ใน PIC ของเรา ฟังก์ชั่นเหล่านี้ยังได้เรียนรู้ในวิธีใช้ ADC กับบทช่วยสอน PIC หลังจากนั้นเราต้องประกาศว่าพินใดเป็นอินพุตและพินใดเป็นพินเอาต์พุต ที่นี่ LED เชื่อมต่อกับ PORTC ดังนั้นจึงเป็นพินเอาต์พุตและขาสวิตช์ของจอยสติ๊กเป็นพินอินพุตดิจิตอล ดังนั้นเราจึงใช้บรรทัดต่อไปนี้เพื่อประกาศเหมือนกัน:
// ***** การกำหนดค่า I / O **** // TRISC = 0X00; // PORT C ใช้เป็นพอร์ตเอาต์พุต PORTC = 0X00; // ทำให้พินทั้งหมดต่ำ TRISB0 = 1; // RB0 ใช้เป็นอินพุต // *** สิ้นสุดการกำหนดค่า I / O ** ///
หมุด ADC ไม่จำเป็นต้องกำหนดเป็น inputหมุดเพราะพวกเขาเมื่อใช้ฟังก์ชั่นการ ADC ก็จะได้รับมอบหมายให้เป็นขาอินพุต เมื่อกำหนดพินแล้วเราสามารถเรียกใช้ฟังก์ชัน ADC_initialize ที่เรากำหนดไว้ก่อนหน้านี้ ฟังก์ชันนี้จะตั้งค่าการลงทะเบียน ADC ที่ต้องการและเตรียมโมดูล ADC
ADC_Initialize (); // กำหนดค่าโมดูล ADC
ตอนนี้เราก้าวเข้าสู่ความไม่มีที่สิ้นสุด ในขณะที่ วนซ้ำ ภายในวงนี้เราจะต้องตรวจสอบค่าของ VRX, Vry และตะวันตกเฉียงใต้และขึ้นอยู่กับค่าที่เราจะต้องควบคุมการส่งออกนำของเราสามารถเริ่มกระบวนการตรวจสอบได้โดยการอ่านแรงดันอนาล็อกของ VRX และ VRY โดยใช้บรรทัดด้านล่าง
int joy_X = (ADC_Read (0)); // อ่านแกน X ของจอยสติ๊ก int joy_Y = (ADC_Read (1)); // อ่านแกน Y ของจอยสติ๊ก
บรรทัดนี้จะบันทึกค่าของ VRX และ VRY ในตัวแปร joy_X และ joy_Y ตามลำดับ ฟังก์ชัน ADC_Read (0) หมายความว่าเรากำลังอ่านค่า ADC จากช่อง 0 ซึ่งเป็นพิน A0 เราได้เชื่อมต่อ VRX และ VRY เพื่อตรึง A0 และ A1 แล้วเราจึงอ่านจาก 0 และ 1
หากคุณสามารถรวบรวมจากบทช่วยสอน ADC ของเราเรารู้ว่าเราอ่านแรงดันอนาล็อก PIC ที่เป็นอุปกรณ์ดิจิทัลจะอ่านค่าจาก 0 ถึง 1023 ค่านี้ขึ้นอยู่กับตำแหน่งของโมดูลจอยสติ๊ก คุณสามารถใช้แผนภาพฉลากด้านบนเพื่อดูว่าคุณคาดหวังค่าใดสำหรับทุกตำแหน่งของจอยสติ๊ก
นี่ฉันได้ใช้ค่าขีด จำกัด 200 เป็นวงเงินที่ต่ำกว่าและมีมูลค่า 800 เป็นขีด จำกัด คุณสามารถใช้อะไรก็ได้ที่คุณต้องการ ดังนั้นขอให้ใช้ค่าเหล่านี้และเริ่มเรืองแสงไฟ LED s ตาม ในการทำสิ่งนี้เราต้องเปรียบเทียบค่าของ joy_X กับค่าที่กำหนดไว้ล่วงหน้าโดยใช้ลูป IF และทำให้หมุด LED สูงหรือต่ำดังที่แสดงด้านล่าง บรรทัดความคิดเห็นจะช่วยให้คุณเข้าใจได้ดีขึ้น
ถ้า (joy_X <200) // Joy ขยับขึ้น {RC0 = 0; RC1 = 1;} // เรืองแสง LED ด้านบน อื่น ๆ ถ้า (joy_X> 800) // จอยเลื่อนลง {RC0 = 1; RC1 = 0;} // อื่น ๆ LED เรืองแสงล่าง// ถ้าไม่ย้าย{RC0 = 0; RC1 = 0;} // ปิด led ทั้งสอง
เราสามารถทำเช่นเดียวกันกับค่าของแกน Y ได้เช่นกัน เราต้องแทนที่ตัวแปร joy_X ด้วย joy_Y และควบคุมขา LED สองขาถัดไปดังที่แสดงด้านล่าง โปรดทราบว่าเมื่อไม่ได้ขยับจอยสติ๊กเราจะปิดไฟ LED ทั้งสองดวง
ถ้า (joy_Y <200) // Joy ย้ายไปทางซ้าย {RC2 = 0; RC3 = 1;} // เรืองแสง LED ด้านซ้าย อื่น ๆ ถ้า (joy_Y> 800) // จอยย้ายไปทางขวา {RC2 = 1; RC3 = 0;} // LED เรืองแสงทางขวา อื่น ๆ // ถ้าไม่ย้าย {RC2 = 0; RC3 = 0;} // ปิด LED ทั้งสอง
ตอนนี้เรามีอีกหนึ่งสิ่งสุดท้ายที่ต้องทำเราต้องตรวจสอบสวิตช์ว่าถูกกดหรือไม่ ขาสวิตช์เชื่อมต่อกับ RB0 ดังนั้นเราจึงสามารถใช้ if loop ได้อีกครั้งและตรวจสอบว่าเปิดอยู่หรือไม่ หากกดเราจะเปิดไฟ LED เพื่อแสดงว่ากดสวิตช์แล้ว
if (RB0 == 1) // ถ้ากดจอย RC4 = 1; // LED กลางเรืองแสงอื่น RC4 = 0; // ปิด LED กลาง
มุมมองจำลอง:
สามารถจำลองโครงการที่สมบูรณ์ได้โดยใช้ซอฟต์แวร์ Proteus เมื่อคุณเขียนโปรแกรมคอมไพล์โค้ดและเชื่อมโยงรหัสฐานสิบหกของการจำลองกับวงจร จากนั้นคุณจะสังเกตเห็นไฟ LED ส่องสว่างตามตำแหน่งของโพเทนชิโอมิเตอร์ การจำลองดังแสดงด้านล่าง:
ฮาร์ดแวร์และการทำงาน:
หลังจากตรวจสอบรหัสโดยใช้การจำลองแล้วเราสามารถสร้างวงจรบนกระดานขนมปังได้ หากคุณทำตามบทช่วยสอน PIC คุณจะสังเกตเห็นว่าเราใช้บอร์ด perf ตัวเดียวกันซึ่งมีวงจร PIC และ 7805 บัดกรีอยู่ หากคุณสนใจที่จะสร้างมันขึ้นมาเพื่อให้คุณใช้กับโครงการ PIC ทั้งหมดของคุณให้บัดกรีวงจรบนบอร์ด perf หรือคุณสามารถสร้างวงจรทั้งหมดบนเขียงหั่นขนมก็ได้เช่นกัน เมื่อฮาร์ดแวร์เสร็จแล้วก็จะเป็นแบบนี้ด้านล่าง
ตอนนี้อัปโหลดรหัสไปยังไมโครคอนโทรลเลอร์ PIC โดยใช้ PICkit3 คุณสามารถอ้างอิงโครงการ LED กะพริบเพื่อขอคำแนะนำ คุณควรสังเกตว่าไฟสีเหลืองสว่างขึ้นทันทีที่อัปโหลดโปรแกรม ตอนนี้ใช้จอยสติ๊กและเปลี่ยนลูกบิดสำหรับแต่ละทิศทางของจอยสติ๊กคุณจะสังเกตเห็น LED ตามลำดับที่สูงขึ้น เมื่อกดสวิตช์ตรงกลางก็จะปิด LED ตรงกลาง
การทำงานนี้เป็นเพียงตัวอย่างเท่านั้นคุณสามารถสร้างโครงการที่น่าสนใจมากมายได้ นอกจากนี้ยังสามารถดูการทำงานทั้งหมดของโครงการได้จากวิดีโอที่ให้ไว้ในตอนท้ายของหน้านี้
หวังว่าคุณจะเข้าใจโครงการและสนุกกับการสร้างโครงการหากคุณมีปัญหาในการดำเนินการดังกล่าวอย่าลังเลที่จะโพสต์ไว้ในส่วนความคิดเห็นด้านล่างหรือเขียนไว้ในฟอรัมเพื่อขอความช่วยเหลือ