- วัสดุที่ต้องการ:
- แผนภูมิวงจรรวม:
- คำอธิบายการเขียนโปรแกรม:
- การตั้งค่าฮาร์ดแวร์สำหรับลำดับ LED กะพริบ:
- การอัปโหลดและการทำงาน:
นี่คือการกวดวิชาที่สองของลำดับของการกวดวิชาในการที่เราเป็นผู้เรียนรู้ MSP430G2 LaunchPadจาก Texas Instruments ใช้พละ IDE ในบทช่วยสอน Blinky LED ที่ผ่านมาเราได้แนะนำตัวเราให้รู้จักกับ LaunchPad Development Board และ Energia IDE นอกจากนี้เรายังได้อัปโหลดโปรแกรมแรกของเราซึ่งก็คือการกะพริบ LED บนบอร์ดเป็นระยะ ๆ
ในบทช่วยสอนนี้เราจะเรียนรู้วิธีใช้ตัวเลือกการอ่านแบบดิจิทัลและการเขียนแบบดิจิทัลเพื่ออ่านสถานะของอุปกรณ์อินพุตเช่นสวิตช์และควบคุมเอาต์พุตหลายรายการเช่น LED ในตอนท้ายของบทช่วยสอนนี้คุณจะได้เรียนรู้การทำงานกับอินพุตและเอาท์พุตดิจิทัลซึ่งสามารถใช้เชื่อมต่อกับเซ็นเซอร์ดิจิทัลหลายตัวเช่นเซ็นเซอร์ IR เซ็นเซอร์ PIR ฯลฯ และยังเปิดหรือปิดเอาต์พุตเช่น LED, Buzzer เป็นต้นฟังดูน่าสนใจ ขวา!!? มาเริ่มกันเลย.
วัสดุที่ต้องการ:
- MSP430G2 LaunchPad
- LED ทุกสี - 8
- สวิตช์ - 2
- ตัวต้านทาน 1k - 8
- การเชื่อมต่อสายไฟ
แผนภูมิวงจรรวม:
ในบทช่วยสอนก่อนหน้านี้เราสังเกตเห็นว่า Launch Pad นั้นมาพร้อมกับ LED สองดวงและสวิตช์บนบอร์ด แต่ในการกวดวิชานี้เราจะต้องยิ่งไปกว่านั้นในขณะที่เรากำลังวางแผนที่จะเรืองแสงไฟ LED แปดในลำดับเมื่อมีการกดปุ่ม นอกจากนี้เราจะเปลี่ยนลำดับเมื่อกดปุ่มอื่นเพื่อให้น่าสนใจ ดังนั้นเราจึงต้องสร้างวงจรที่มีไฟ LED 8 ดวงและสวิตช์สองตัวดูแผนภาพวงจรทั้งหมดได้ด้านล่าง
ที่นี่ LED 8 ดวงคือเอาต์พุตและสวิตช์สองตัวเป็นอินพุต เราสามารถเชื่อมต่อสิ่งเหล่านี้กับพิน I / O ใด ๆ บนบอร์ด แต่ฉันได้เชื่อมต่อ LRD จากพิน P1.0 ถึง P2.1 และเปลี่ยน 1 และ 2 เป็นพิน P2.4 และ P2.3 ตามที่แสดงด้านบน
พินแคโทดทั้งหมดของ LED จะเชื่อมโยงกับกราวด์และพินแอโนดเชื่อมต่อกับพิน I / O ผ่านตัวต้านทาน ตัวต้านทานนี้เรียกว่าตัวต้านทาน จำกัด กระแสตัวต้านทานนี้ไม่บังคับสำหรับ MSP430 เนื่องจากกระแสสูงสุดที่ขา I / O สามารถจ่ายได้คือ 6mA เท่านั้นและแรงดันไฟฟ้าที่ขาคือ 3.6V เท่านั้น อย่างไรก็ตามมันเป็นแนวทางปฏิบัติที่ดีที่จะใช้มัน เมื่อพินดิจิทัลใด ๆ เหล่านี้สูงขึ้นไฟ LED ตามลำดับจะเปิดขึ้น หากคุณจำโปรแกรม LED ของบทช่วยสอนล่าสุดได้คุณจะจำได้ว่า digitalWrite (LED_pin_name, HIGH) จะทำให้ LED เรืองแสงและ digitalWrite (LED_pin_name, LOW) จะเปลี่ยนเป็น LED
สวิตช์เป็นอุปกรณ์อินพุตปลายด้านหนึ่งของสวิตช์เชื่อมต่อกับขั้วกราวด์และอีกด้านหนึ่งเชื่อมต่อกับพินดิจิทัล P2.3 และ P2.4 ซึ่งหมายความว่าเมื่อใดก็ตามที่เรากดสวิตช์ขา I / O (2.3 หรือ 2.4) จะต่อสายดินและจะปล่อยให้เป็นอิสระหากไม่ได้กดปุ่ม ให้เราดูว่าเราจะใช้การจัดเรียงนี้ขณะเขียนโปรแกรมได้อย่างไร
คำอธิบายการเขียนโปรแกรม:
ต้องเขียนโปรแกรมเพื่อควบคุม LED 8 ดวงตามลำดับเมื่อกดสวิตช์ 1 จากนั้นเมื่อกดสวิตช์ 2 ลำดับจะต้องเปลี่ยน คุณสามารถดูโปรแกรมและวิดีโอสาธิตทั้งหมดได้ที่ด้านล่างของหน้านี้ ด้านล่างฉันจะอธิบายโปรแกรมทีละบรรทัดเพื่อให้คุณเข้าใจได้ง่าย
เช่นเคยเราควรเริ่มต้นด้วยฟังก์ชัน void setup () ซึ่งเราจะประกาศว่าพินที่เราใช้อยู่คือขาอินพุตหรือขาออก ในโปรแกรมของเราจะมีเอาต์พุต LED 8 พินและสวิตช์ 2 ตัวเป็นอินพุต เหล่านี้8 ไฟ LED มีการเชื่อมต่อจาก P1.0 P2.1 ไปซึ่งเป็นหมายเลขพิน 2-9 บนกระดาน จากนั้นสวิตช์จะเชื่อมต่อกับพิน P2.3 และพิน 2.4 ซึ่งเป็นพินหมายเลข 11 และ 12 ตามลำดับ ดังนั้นเราจึงได้ประกาศสิ่งต่อไปนี้ใน การตั้งค่าโมฆะ ()
การตั้งค่าเป็นโมฆะ () {สำหรับ (int i = 2; i <= 9; i ++) {pinMode (i, OUTPUT); } สำหรับ (int i = 2; i <= 9; i ++) {digitalWrite (i, LOW); } pinMode (11, INPUT_PULLUP); pinMode (12, INPUT_PULLUP); }
ดังที่เราทราบกันดีว่า ฟังก์ชัน pinMode () ประกาศว่าพินเป็นเอาต์พุตหรืออินพุตและ ฟังก์ชัน digitalWrite () ทำให้สูง (เปิด) หรือต่ำ (ปิด) เราได้ใช้ for loop เพื่อทำการประกาศนี้เพื่อลดจำนวนบรรทัด ตัวแปร “ i” จะเพิ่มขึ้นจาก 2 เป็น 9 ใน for loop และสำหรับการเพิ่มแต่ละครั้งฟังก์ชันภายในจะดำเนินการ อีกสิ่งหนึ่งที่อาจทำให้คุณสับสนคือคำว่า“ INPUT_PULLUP ” สามารถประกาศพินเป็นอินพุตได้โดยเรียกใช้ฟังก์ชัน pinMode (Pin_name, INPUT) แต่ที่นี่เราได้ใช้ INPUT_PULLUP แทน INPUT และทั้งคู่มีการเปลี่ยนแปลงที่เห็นได้ชัดเจน
เมื่อเราใช้พินไมโครคอนโทรลเลอร์พินควรเชื่อมต่อกับต่ำหรือสูง ในกรณีนี้พิน 11 และ 12 เชื่อมต่อกับสวิตช์ซึ่งจะเชื่อมต่อกับกราวด์เมื่อกด แต่เมื่อไม่ได้กดสวิตช์พินจะไม่เชื่อมต่อกับสิ่งใดเงื่อนไขนี้เรียกว่าพินลอยและไม่ดีสำหรับไมโครคอนโทรลเลอร์ ดังนั้นเพื่อหลีกเลี่ยงสิ่งนี้เราจึงใช้ตัวต้านทานแบบดึงขึ้นหรือแบบดึงลงเพื่อยึดพินให้อยู่ในสถานะเมื่อมันลอย ในMSP430G2553 Microcontroller หมุด I / O มีความต้านทานดึงขึ้นในการสร้างในการใช้สิ่งที่เราต้องทำคือเรียก INPUT_PULLUP แทน INPUT ในระหว่างการประกาศเช่นเดียวกับที่ได้ทำไว้ข้างต้น
ตอนนี้ให้เข้าสู่ฟังก์ชัน void loop () สิ่งที่เขียนในฟังก์ชันนี้จะถูกดำเนินการตลอดไป ขั้นตอนแรกในโปรแกรมของเราคือตรวจสอบว่าสวิตช์ถูกกดหรือไม่และหากกดเราควรเริ่มกะพริบไฟ LED ตามลำดับ เพื่อตรวจสอบว่ามีการกดปุ่มบรรทัดต่อไปนี้หรือไม่
ถ้า (digitalRead (12) == LOW)
ฟังก์ชั่นใหม่ที่นี่คือฟังก์ชัน digitalRead () ฟังก์ชันนี้จะอ่านสถานะของพินดิจิทัลและจะส่งคืน HIGH (1) เมื่อพินได้รับแรงดันไฟฟ้าบางส่วนและจะกลับต่ำ (0) เมื่อขาต่อสายดิน ในฮาร์ดแวร์ของเราพินจะต่อสายดินก็ต่อเมื่อเรากดปุ่มมิฉะนั้นจะสูงเนื่องจากเราใช้ตัวต้านทานแบบดึงขึ้น ดังนั้นเราจึงใช้คำสั่ง if เพื่อตรวจสอบว่าปุ่มถูกกดหรือไม่
เมื่อกดปุ่มแล้วเราจะเข้าสู่ลูป ในขณะที่ (1) ไม่มีที่สิ้นสุด นี่คือจุดที่เราเริ่มกะพริบไฟ LED ตามลำดับ การวนซ้ำแบบไม่มีที่สิ้นสุดจะแสดงอยู่ด้านล่างและสิ่งที่เขียนในลูปจะทำงานตลอดไปจนกว่าจะหยุดพัก ใช้คำสั่ง
แส้ (1) {}
ภายในไม่มีที่สิ้นสุดในขณะที่เราตรวจสอบสถานะของสวิทช์ที่สองที่เชื่อมต่อกับขา 11
หากกดสวิตช์นี้เราจะกะพริบ LED ในลำดับใดลำดับหนึ่งเราจะกะพริบในลำดับอื่น
ถ้า (digitalRead (11) == LOW) {สำหรับ (int i = 2; i <= 9; i ++) {digitalWrite (i, HIGH); ล่าช้า (100); } สำหรับ (int i = 2; i <= 9; i ++) digitalWrite (i, LOW); }
ในการกะพริบ LED ตามลำดับเราใช้ for loop อีกครั้งแต่คราวนี้เราใช้การหน่วงเวลาเล็กน้อยที่ 100 มิลลิวินาทีโดยใช้ฟังก์ชัน delay (100) เพื่อให้เราสังเกตเห็นว่า LED สูงขึ้น ในการทำให้ LED เรืองแสงเพียงครั้งละหนึ่งครั้งเรายังใช้อีกอัน สำหรับการ วนซ้ำเพื่อปิด LED ทั้งหมด ดังนั้นเราจึงเปิดไฟ led รอสักครู่แล้วปิด LED ทั้งหมดจากนั้นเพิ่มจำนวนการนับเปิดไฟ LED รอสักพักและวงจรจะดำเนินต่อไป แต่ทั้งหมดนี้จะเกิดขึ้นตราบเท่าที่ไม่ได้กดสวิตช์ที่สอง
หากกดสวิตช์ที่สอง แล้วเราเปลี่ยนลำดับโปรแกรมจะมีความคาดหวังมากหรือน้อยเหมือนกันสำหรับลำดับที่ LED เปิดอยู่ บรรทัดที่แสดงด้านล่างลองดูและหาสิ่งที่เปลี่ยนแปลงไป
อื่น {สำหรับ (int i = 9; i> = 2; i--) {digitalWrite (i, HIGH); ล่าช้า (100); } สำหรับ (int i = 2; i <= 9; i ++) digitalWrite (i, LOW); }
ใช่ for loop ได้รับการเปลี่ยนแปลง ก่อนหน้านี้เราทำให้ LED เรืองแสงจากหมายเลข 2 และไปจนถึง 9 แต่ตอนนี้เราจะเริ่มจากเลข 9 และลดลงไปจนถึง 2 วิธีนี้เราจะสังเกตได้ว่ามีการกดสวิตช์หรือไม่
การตั้งค่าฮาร์ดแวร์สำหรับลำดับ LED กะพริบ:
โอเคในส่วนของทฤษฎีและซอฟต์แวร์ทั้งหมดก็พอแล้ว มาดูส่วนประกอบบางอย่างและดูว่าโปรแกรมนี้มีลักษณะการทำงานอย่างไร วงจรนั้นง่ายมากและด้วยเหตุนี้จึงสามารถสร้างได้อย่างง่ายดายบนเขียงหั่นขนม แต่ฉันบัดกรี LED และเปิดสวิตช์บอร์ด perfเพื่อให้ดูเรียบร้อย บอร์ด perf ที่ฉันบัดกรีแสดงอยู่ด้านล่าง
ดังที่คุณเห็นว่าเรามีหมุดเอาต์พุตของ LED และสวิตช์ที่นำออกมาเป็นหมุดเชื่อมต่อ ตอนนี้เราได้ใช้สายขั้วต่อตัวเมียกับตัวเมียเพื่อเชื่อมต่อ LED และเปลี่ยนไปใช้บอร์ด MSP430 LaunchPad ตามที่แสดงในภาพด้านล่าง
การอัปโหลดและการทำงาน:
เมื่อคุณใช้ฮาร์ดแวร์เสร็จแล้วเพียงแค่เชื่อมต่อบอร์ด MSP430 กับคอมพิวเตอร์ของคุณและเปิด Energia IDE และใช้โปรแกรมที่ระบุไว้ในตอนท้ายของหน้านี้ ตรวจสอบให้แน่ใจว่าได้เลือกบอร์ดที่ถูกต้องและพอร์ต COM ใน Energia IDE แล้วคลิกที่ปุ่มอัปโหลด โปรแกรมควรได้รับการคอมไพล์สำเร็จและเมื่ออัปโหลดแล้วจะแสดงข้อความ “ เสร็จสิ้นการอัปโหลด”
ตอนนี้กดปุ่ม 1 บนกระดานและไฟ LED จะสว่างขึ้นตามลำดับดังที่แสดงด้านล่าง
คุณยังสามารถกดปุ่มที่สองค้างไว้เพื่อตรวจสอบว่าลำดับมีการเปลี่ยนแปลงหรือไม่ การทำงานที่สมบูรณ์ของโครงการแสดงอยู่ในวิดีโอด้านล่าง หากคุณพอใจกับผลลัพธ์คุณสามารถลองทำการเปลี่ยนแปลงบางอย่างในโค้ดเช่นเปลี่ยนเวลาหน่วงเปลี่ยนลำดับเป็นต้นซึ่งจะช่วยให้คุณเรียนรู้และเข้าใจได้ดีขึ้น
หวังว่าคุณจะเข้าใจบทช่วยสอนและเรียนรู้สิ่งที่เป็นประโยชน์กับมัน หากคุณประสบปัญหาใด ๆ โปรดโพสต์คำถามในส่วนความคิดเห็นหรือใช้ฟอรัม มาพบกันในบทช่วยสอนอื่นที่จะเรียนรู้วิธีการอ่านแรงดันไฟฟ้าแบบอะนาล็อกโดยใช้แผ่นเปิด MSP30 ของเรา