- การตั้งค่าฮาร์ดแวร์และข้อกำหนด
- N76E003 วงจรอินเทอร์เฟซ LED และปุ่มกด
- N76E003 แผนภาพขาออก
- โปรแกรมควบคุม GPIO อย่างง่ายสำหรับ N76E003
- การเขียนโปรแกรม N76E003 และการตรวจสอบเอาต์พุต
ในบทช่วยสอนก่อนหน้านี้เราใช้โปรแกรม LED กระพริบพื้นฐานเพื่อเริ่มต้นใช้งานคู่มือN76E003เราได้เรียนรู้วิธีกำหนดค่า Keil IDE และตั้งค่าสภาพแวดล้อมสำหรับการเขียนโปรแกรมไมโครคอนโทรลเลอร์ nuvoton หน่วย N76E003 ถึงเวลาแล้วที่จะก้าวต่อไปอีกเล็กน้อยและใช้อินเทอร์เฟซ GPIOพื้นฐานเพื่อควบคุมฮาร์ดแวร์เพิ่มเติม หากคุณสนใจคุณสามารถตรวจสอบบทแนะนำ GPIO ไมโครคอนโทรลเลอร์อื่น ๆ ที่ระบุไว้ด้านล่าง -
- STM32 Nucleo64 พร้อม CubeMx และ TrueSTUDIO - การควบคุม LED
- STM8S พร้อมด้วย Cosmic C GPIO Control
- PIC พร้อม MPLABX LED Blink Tutorial
- MSP430 พร้อม Code Composer Studio - Simple LED Control
เนื่องจากในการกวดวิชาของเราก่อนหน้านี้เราใช้เพียงนำไปสู่การกระพริบตาโดยใช้ขา IO ตามเอาท์พุท ในบทช่วยสอนนี้เราจะเรียนรู้วิธีใช้พิน IOอื่นเป็นอินพุตและควบคุม LED เพิ่มเติม โดยไม่ต้องเสียเวลามากลองประเมินว่าเราต้องการการตั้งค่าฮาร์ดแวร์ประเภทใด
การตั้งค่าฮาร์ดแวร์และข้อกำหนด
เนื่องจากจำเป็นต้องใช้สวิตช์เป็นอินพุตสิ่งแรกที่เราต้องการคือปุ่มกด นอกจากนี้เรายังต้องการ LED เพิ่มเติมเพื่อควบคุมโดยปุ่มกดนั้น นอกจากสองตัวนี้เรายังต้องการตัวต้านทานเพื่อ จำกัด กระแสไฟ LED และตัวต้านทานเพิ่มเติมสำหรับวัตถุประสงค์ในการดึงลงข้ามปุ่มกด สิ่งนี้จะแสดงให้เห็นเพิ่มเติมในส่วนแผนผัง ส่วนประกอบที่เราต้องการ -
- ปุ่มกด (สวิตช์ชั่วขณะใด ๆ โดยเฉพาะ - สวิตช์สัมผัส)
- LED สีใดก็ได้
- ตัวต้านทาน 4.7k สำหรับวัตถุประสงค์แบบดึงลง
- ตัวต้านทาน 100R
ไม่ต้องพูดถึงนอกเหนือจากองค์ประกอบข้างต้นเราต้องN76E003 ไมโครคอนโทรลเลอร์คณะกรรมการพัฒนาการชั่นเช่นเดียวกับNu-Link โปรแกรมเมอร์ นอกจากนี้ยังจำเป็นต้องใช้เขียงหั่นขนมและสายเชื่อมต่อเพื่อเชื่อมต่อส่วนประกอบทั้งหมดดังที่แสดงด้านล่าง
N76E003 วงจรอินเทอร์เฟซ LED และปุ่มกด
ในฐานะที่เราสามารถมองเห็นในที่อยู่ด้านล่างวงจรไฟ LED การทดสอบที่อยู่ภายในสำนักงานคณะกรรมการพัฒนาการมีการเชื่อมต่ออยู่กับพอร์ต 1.4และ LED เพิ่มเติมมีการเชื่อมต่ออยู่กับพอร์ต 1.5 ตัวต้านทาน R3 ใช้เพื่อ จำกัด กระแสไฟ LED
ในพิน 1.6 จะมีการเชื่อมต่อปุ่มกดชื่อ SW เมื่อใดก็ตามที่กดปุ่มหมุดจะอยู่สูง มิฉะนั้นตัวต้านทานแบบดึงลง 4.7K R1 จะลดลง คุณสามารถเรียนรู้เพิ่มเติมเกี่ยวกับตัวต้านทานแบบดึงขึ้นและแบบดึงลงได้หากคุณยังใหม่กับแนวคิดนี้
พินยังเป็นพินที่เกี่ยวข้องกับโปรแกรมที่โปรแกรมเมอร์เข้าถึง ใช้ในการส่งข้อมูลโปรแกรม แต่เราจะเห็นเหตุผลที่อยู่เบื้องหลังการเลือกหมุดดังกล่าวรวมทั้งได้รับข้อมูลที่เป็นธรรมเกี่ยวกับการทำแผนที่ของขา N76E003
N76E003 แผนภาพขาออก
แผนภาพขา N76E003สามารถเห็นได้ในด้านล่างอิมเมจเฉพาะบล็อก
อย่างที่เราเห็นแต่ละพินมีหลายฟังก์ชันและสามารถใช้เพื่อวัตถุประสงค์ที่แตกต่างกันได้ ลองมาเป็นตัวอย่าง พิน 1.7 สามารถใช้เป็นอินเทอร์รัปต์หรืออินพุตอะนาล็อกหรือเป็นการใช้งานอินพุต - เอาท์พุตทั่วไป ดังนั้นหากใช้พินใด ๆ เป็นพิน I / O ฟังก์ชันที่เกี่ยวข้องจะไม่สามารถใช้งานได้
ด้วยเหตุนี้พิน 1.5 ซึ่งใช้เป็นขาเอาต์พุต LED จึงสูญเสีย PWM และฟังก์ชันอื่น ๆ แต่นั่นไม่ใช่ปัญหาเนื่องจากไม่จำเป็นต้องใช้ฟังก์ชันอื่นสำหรับโครงการนี้ เหตุผลเบื้องหลังการเลือกพิน 1.5 เป็นเอาต์พุตและพิน 1.6 เป็นอินพุตเนื่องจากพิน GND และ VDD ใกล้เคียงที่สุดสำหรับการเชื่อมต่อที่ง่ายดาย
อย่างไรก็ตามในไมโครคอนโทรลเลอร์จาก 20 พินนี้สามารถใช้ 18 พินเป็นพิน GPIO ได้ พิน 2.0 ใช้สำหรับรีเซ็ตอินพุตโดยเฉพาะและไม่สามารถใช้เป็นเอาต์พุตได้ นอกเหนือจากพินนี้คุณสามารถกำหนดค่าพินทั้งหมดได้ในโหมดที่อธิบายไว้ด้านล่าง
ตามแผ่นข้อมูล pxM1.n และ pxM2.n เป็นรีจิสเตอร์สองตัวที่ใช้เพื่อกำหนดการควบคุมการทำงานของพอร์ต I / O ตอนนี้การมาเขียนและอ่านพอร์ต GPIO เป็นสิ่งที่แตกต่างไปจากเดิมอย่างสิ้นเชิง เนื่องจากการเขียนลงทะเบียนควบคุมพอร์ตจะเปลี่ยนสถานะการล็อคของพอร์ตในขณะที่การอ่านพอร์ตจะได้รับสถานะของสถานะลอจิก แต่สำหรับการอ่านพอร์ตนั้นจะต้องตั้งค่าเป็นโหมดอินพุต
โปรแกรมควบคุม GPIO อย่างง่ายสำหรับ N76E003
โปรแกรมทั้งหมดที่ใช้ในบทช่วยสอนนี้สามารถพบได้ที่ด้านล่างของหน้านี้คำอธิบายของโค้ดมีดังนี้
การตั้งค่าพินเป็นอินพุต
เริ่มจากการป้อนข้อมูลก่อน ตามที่กล่าวไว้ก่อนหน้านี้ในการอ่านสถานะของพอร์ตจำเป็นต้องตั้งค่าเป็นอินพุต ดังนั้นเมื่อเราได้เลือก P1.6 เป็นพินสวิตช์อินพุตของเราเราจึงแสดงมันผ่านบรรทัดด้านล่างของข้อมูลโค้ด
# กำหนด SW P16
ต้องตั้งค่าพินเดียวกันนี้เป็นอินพุต ดังนั้นในฟังก์ชั่นการตั้งค่าพินจะถูกตั้งค่าเป็นอินพุตโดยใช้บรรทัดด้านล่าง
การตั้งค่าเป็นโมฆะ (โมฆะ) {P14_Quasi_Mode; P15_Quasi_Mode; P16_Input_Mode; }
บรรทัดนี้ P16_Input_Mode; ถูกกำหนดไว้ในไฟล์ส่วนหัว Function_define.h ใน“ BSP include library” ที่ตั้งค่าพินบิตเป็น P1M1- = SET_BIT6; P1M2 & = ~ SET_BIT6 SET_BIT6 ยังถูกกำหนดไว้ในส่วนหัวของแฟ้มเดียวกันย่คด
# กำหนด SET_BIT6 0x40
การตั้งค่าพินเป็นเอาต์พุต
เช่นเดียวกับพินอินพุตขาเอาต์พุตที่ใช้โดย LED ทดสอบออนบอร์ดและ LED1 ภายนอกถูกกำหนดไว้ในส่วนแรกของรหัสด้วย PIN ตามลำดับ
#define Test_LED P14 #define LED1 P15
หมุดเหล่านี้ถูกตั้งค่าเป็นเอาต์พุตในฟังก์ชันการตั้งค่าโดยใช้บรรทัดด้านล่าง
การตั้งค่าเป็นโมฆะ (โมฆะ) { P14_Quasi_Mode; // เอาต์พุต P15_Quasi_Mode; // เอาต์พุต P16_Input_Mode; }
บรรทัดเหล่านี้ยังกำหนดไว้ในไฟล์ส่วนหัว Function_define.h โดยตั้งค่าพินบิตเป็น P1M1 & = ~ SET_BIT4; P1M2 & = ~ SET_BIT4 . SET_BIT6 ยังถูกกำหนดไว้ในส่วนหัวของแฟ้มเดียวกันย่คด
# กำหนด SET_BIT4 0x10
ไม่มีที่สิ้นสุดในขณะที่วนซ้ำ
ฮาร์ดแวร์หากเชื่อมต่อด้วยพลังงานและทำงานได้อย่างสมบูรณ์แบบซึ่งควรให้เอาต์พุตอย่างต่อเนื่องแอปพลิเคชันจะไม่หยุดนิ่ง มันทำสิ่งเดียวกันเป็นเวลาไม่สิ้นสุด ที่นี่มาฟังก์ชั่นนั้นห่วงขณะที่ไม่มีที่สิ้นสุดแอปพลิเคชั่นภายใน while loop ทำงานอย่างไม่มีที่สิ้นสุด
ในขณะที่ (1) { Test_LED = 0; sw_delay (150); Test_LED = 1; sw_delay (150); ถ้า (SW == 1) {LED1 = 0; } else {LED1 = 1; }}}
ด้านบน while loop กะพริบ led ตามค่า sw_delay และตรวจสอบสถานะของ SW หากกดสวิตช์ P1.6 จะสูงและเมื่อกดแล้วสถานะการอ่านจะเป็น 1 ในสถานการณ์นี้ในขณะนี้สวิตช์จะถูกกดและพอร์ต P1.6 ยังคงสูงอยู่ LED1 จะเรืองแสง
การเขียนโปรแกรม N76E003 และการตรวจสอบเอาต์พุต
ในการเริ่มต้นใช้งานบทช่วยสอนN76E003เราได้เรียนรู้วิธีการตั้งโปรแกรม N76E003 แล้วดังนั้นเราจะทำซ้ำขั้นตอนเดียวกันที่นี่เพื่อตั้งโปรแกรมบอร์ดของเรา คอมไพล์โค้ดสำเร็จและส่งคืนคำเตือน 0 และ 0 ข้อผิดพลาดและกระพริบโดยใช้วิธีการกะพริบเริ่มต้นโดย Keil
ดังที่คุณเห็นในภาพด้านบน LED ภายนอกของเราจะเปิดขึ้นเมื่อฉันกดปุ่มกด การทำงานทั้งหมดของโครงการสามารถพบได้ในวิดีโอที่ลิงก์ด้านล่าง หวังว่าคุณจะสนุกกับบทช่วยสอนและเรียนรู้สิ่งที่เป็นประโยชน์หากคุณมีคำถามใด ๆ ทิ้งไว้ในส่วนความคิดเห็นด้านล่าง คุณยังสามารถใช้ฟอรัมของเราเพื่อถามคำถามทางเทคนิคอื่น ๆ