- วัสดุที่ต้องการ:
- หน่วยความจำแฟลช:
- ICSP (ในการเขียนโปรแกรมวงจรอนุกรม):
- วงจรและฮาร์ดแวร์:
- การเบิร์นโค้ดโดยใช้ MPLAB IPE:
ในบทช่วยสอนสองบทก่อนหน้านี้เราได้กล่าวถึงวิธีการเริ่มต้นใช้งาน PIC โดยใช้คอมไพเลอร์ MPLABX และ XC8 เราได้สร้างโปรแกรม LED กะพริบครั้งแรกพร้อม PIC และตรวจสอบโดยการจำลอง ตอนนี้ถึงเวลาที่เราจะต้องรับมือกับฮาร์ดแวร์ ในการกวดวิชานี้เราจะสร้างวงจรขนาดเล็กบนบอร์ดไข่ปลาสำหรับกะพริบไฟ LED โดยใช้ PIC เราจะถ่ายโอนโปรแกรมไปยังไมโครคอนโทรลเลอร์ PIC ของเราและตรวจสอบไฟ LED กะพริบ ในการตั้งโปรแกรม PIC MCU เราจะใช้ MPLAB IPE
วัสดุที่ต้องการ:
ตามที่กล่าวไว้ในบทช่วยสอนก่อนหน้านี้เราจะต้องใช้สื่อต่อไปนี้
- PicKit 3
- PIC16F877A ไอซี
- 40 - ขายึด IC
- คณะกรรมการ Perf
- 20 MHz คริสตัล OSC
- หมุด Bergstick หญิงและชาย
- 33pf Capacitor - 2Nos, 100uf และ 10uf cap
- ตัวต้านทาน 680 โอห์ม 10K และ 560ohm
- LED สีใดก็ได้
- 1 ชุดบัดกรี
- IC 7805
- อะแดปเตอร์ 12V
จะเกิดอะไรขึ้นเมื่อเรา "Burn" Microcontroller !!
เป็นเรื่องปกติในการอัปโหลดโค้ดไปยัง MCU และทำให้โค้ดทำงานได้ภายใน MCU
เพื่อที่จะเข้าใจสิ่งนี้ให้ดูที่โปรแกรมของเรา
ดังที่เราเห็นโค้ดนี้เขียนด้วยภาษาซีและ MCU ของเราจะไม่สมเหตุสมผล นี่คือส่วนหนึ่งของคอมไพเลอร์ของเราเข้ามา คอมไพเลอร์เป็นหนึ่งในที่แปลงรหัสนี้ในรูปแบบที่อ่านเครื่อง แบบฟอร์มที่เครื่องอ่านได้นี้เรียกว่ารหัส HEXทุกโครงการที่เราสร้างจะมีรหัส HEX ซึ่งจะอยู่ในไดเรกทอรีต่อไปนี้
** ตำแหน่งของคุณ ** \ Blink \ Blink.X \ dist \ default \ production \ Blink.X.production.hex
หากคุณสนใจที่จะทราบว่ารหัส HEX นี้มีลักษณะอย่างไรเพียงแค่เปิดโดยใช้แผ่นจดบันทึก สำหรับโปรแกรม Blink รหัส HEX จะมีลักษณะดังต่อไปนี้:
: 060000000A128A11FC2F18: 100FAA008316031386018312031386018312031324: 100FBA0086150D30F200AF30F100C130F000F00BB1: 100FCA00E42FF10BE42FF20BE42F0000831203133A: 100FDA0086110D30F200AF30F100C130F000F00B95: 100FEA00F42FF10BF42FF20BF42F0000DB2F830107: 060FFA000A128A11D52F36: 02400E007A3FF7: 00000001FF
มีหลายวิธีในการอ่านสิ่งนี้และวิธีทำความเข้าใจและย้อนกลับเป็นภาษาแอสเซมบลี แต่อยู่นอกขอบเขตของบทช่วยสอนนี้โดยสิ้นเชิง ดังนั้นเพื่อสรุปสั้น ๆ HEX เป็นผลลัพธ์ของซอฟต์แวร์ขั้นสุดท้ายของการเข้ารหัสของเราและนี่คือสิ่งที่ MPLAB IPE จะส่งออกไปเพื่อเบิร์น MCU
หน่วยความจำแฟลช:
รหัส HEX จะถูกจัดเก็บลงใน MCU ในสถานที่ที่เรียกว่าหน่วยความจำแฟลช หน่วยความจำแฟลชเป็นสถานที่ที่โปรแกรมของเราจะถูกเก็บไว้ใน MCU และดำเนินการจากที่นั่น เมื่อเรารวบรวมโปรแกรมใน MPLABX ของเราเราจะได้รับข้อมูลต่อไปนี้เกี่ยวกับประเภทของหน่วยความจำบนคอนโซลเอาต์พุต
เนื่องจากเราเพิ่งรวบรวมโปรแกรมไฟ LED กะพริบขนาดเล็กสรุปหน่วยความจำแสดงให้เห็นว่าเราใช้พื้นที่โปรแกรมเพียง 0.5% และ 1.4% ของพื้นที่ข้อมูล
หน่วยความจำของไมโครคอนโทรลเลอร์ PIC16F877 โดยทั่วไปแบ่งออกเป็น 3 ประเภท:
หน่วยความจำโปรแกรม:หน่วยความจำนี้มีโปรแกรม (ที่เราเขียนขึ้น) หลังจากที่เราเบิร์นแล้ว เพื่อเป็นการเตือนความจำ Program Counter จะเรียกใช้คำสั่งที่เก็บไว้ในหน่วยความจำของโปรแกรมทีละคำสั่ง เนื่องจากเราได้เขียนโปรแกรมขนาดเล็กมากเราจึงใช้พื้นที่เพียง 0.5% ของพื้นที่ทั้งหมด นี่คือหน่วยความจำแบบไม่ลบเลือนหมายความว่าข้อมูลที่จัดเก็บไว้จะไม่สูญหายหลังจากปิดเครื่อง
หน่วยความจำข้อมูล: เป็นประเภทหน่วยความจำ RAM ซึ่งมีรีจิสเตอร์พิเศษเช่น SFR (Special Function Register) ซึ่งรวมถึงตัวจับเวลา Watchdog, Brown out Reset เป็นต้นและ GPR (General Purpose Register) ที่รวม TRIS และ PORT เป็นต้นตัวแปรที่เก็บไว้ ในหน่วยความจำข้อมูลระหว่างโปรแกรมจะถูกลบหลังจากเราปิด MCU ตัวแปรใด ๆ ที่ประกาศในโปรแกรมจะอยู่ในหน่วยความจำข้อมูล นี่ยังเป็นหน่วยความจำที่ลบเลือน
ข้อมูล EEPROM (หน่วยความจำแบบอ่านอย่างเดียวที่สามารถลบโปรแกรมได้ด้วยไฟฟ้า): หน่วยความจำที่อนุญาตให้จัดเก็บตัวแปรอันเป็นผลมาจากการเขียนโปรแกรมที่เขียนขึ้น ตัวอย่างเช่นหากเรากำหนดตัวแปร "a" เพื่อบันทึกค่าเป็น 5 และเก็บไว้ใน EEPROM ข้อมูลนี้จะไม่สูญหายแม้ว่าจะปิดเครื่องแล้วก็ตาม นี่คือหน่วยความจำที่ไม่ลบเลือน
โปรแกรมหน่วยความจำแบบ EEPROM และความทรงจำที่ไม่ระเหยและเรียกว่าเป็น หน่วยความจำแฟลชหรือ EEPROM
ICSP (ในการเขียนโปรแกรมวงจรอนุกรม):
เราจะเขียนโปรแกรม PIC16F877A ของเราโดยใช้ตัวเลือก ICSP ที่มีอยู่ใน MCU ของเรา
ตอนนี้ ICSP คืออะไร?
ICSP เป็นวิธีง่ายๆที่ช่วยให้เราสามารถตั้งโปรแกรม MCU ได้แม้ว่าจะวางไว้ในบอร์ดโครงการแล้วก็ตาม ไม่จำเป็นต้องมีบอร์ดโปรแกรมเมอร์แยกต่างหากเพื่อตั้งโปรแกรม MCU สิ่งที่เราต้องมีคือ 6 การเชื่อมต่อจากโปรแกรมเมอร์ PicKit3 ไปยังบอร์ดของเราดังนี้:
1 |
VPP (หรือ MCLRn) |
เพื่อเข้าสู่โหมดการเขียนโปรแกรม |
2 |
Vcc |
Power Pin 11 หรือ 32 |
3 |
GND |
Ground PIN 12 หรือ 31 |
4 |
PGD - ข้อมูล |
RB7. PIN40 |
5 |
PGC - นาฬิกา |
RB6. PIN 39 |
6 |
PGM - เปิดใช้งาน LVP |
RB3 / RB4 ไม่บังคับ |
ICSP เหมาะสำหรับแพ็คเกจ PIC ทั้งหมด สิ่งที่เราต้องการคือดึงหมุดทั้งห้านี้ออก (PGM พินที่ 6 เป็นทางเลือก) จาก MCU ไปยัง Pickit3 ดังที่แสดงในภาพด้านล่าง
วงจรและฮาร์ดแวร์:
ตอนนี้เรามีรหัส HEX ของเราพร้อมและเรารู้วิธีเชื่อมต่อ PicKit 3 กับ PIC MCU ของเราโดยใช้ ICSP ดังนั้นเรามาต่อและประสานวงจรด้วยความช่วยเหลือของแผนผังด้านล่าง:
ในวงจรข้างต้นฉันใช้ 7805 เพื่อควบคุมเอาต์พุต 5V ไปยัง PIC MCU ของฉัน ควบคุมนี้จะถูกขับเคลื่อนโดยอะแดปเตอร์มาร์ท 12V ผนัง ไฟ LED สีแดงใช้เพื่อระบุว่า PIC เปิดอยู่หรือไม่ ขั้วต่อ J1 ใช้สำหรับการเขียนโปรแกรม ICSP หมุดเชื่อมต่อตามที่กล่าวไว้ในตารางด้านบน
MCLR พินแรกจะต้องอยู่ในระดับสูงโดยมีค่าเริ่มต้น 10,000 วิธีนี้จะป้องกันไม่ให้ MCU รีเซ็ต ในการรีเซ็ต MCU พิน MCLR จะต้องยึดกับกราวด์ซึ่งสามารถทำได้ด้วยความช่วยเหลือของสวิตช์ SW1
LED เชื่อมต่อกับพิน RB3 ผ่านตัวต้านทานที่มีค่า 560 โอห์ม (ดูเครื่องคำนวณตัวต้านทาน LED) หากทุกอย่างเหมาะสมทันทีที่โปรแกรมของเราจะถูกอัปโหลดนี้ไฟ LED กระพริบตาควรอยู่บนพื้นฐานของโปรแกรม วงจรทั้งหมดสร้างขึ้นบน Perfboard โดยการบัดกรีส่วนประกอบทั้งหมดตามที่คุณเห็นในภาพด้านบน
การเบิร์นโค้ดโดยใช้ MPLAB IPE:
ในการเบิร์นโค้ดให้ทำตามขั้นตอนด้านล่าง:
- เปิด MPLAB IPE
- เชื่อมต่อปลายด้านหนึ่งของ PicKit 3 เข้ากับพีซีของคุณและปลายอีกด้านหนึ่งกับพิน ICSP ของคุณบนบอร์ด perf
- เชื่อมต่อกับอุปกรณ์ PIC ของคุณโดยคลิกที่ปุ่มเชื่อมต่อ
- เรียกดูไฟล์ Blink HEX และคลิกที่ Program
หากทุกอย่างเป็นไปตามแผนที่วางไว้คุณจะได้รับข้อความแสดงความสำเร็จบนหน้าจอ ตรวจสอบโค้ดและวิดีโอด้านล่างสำหรับการสาธิตแบบเต็มและใช้ส่วนความคิดเห็นหากคุณมีข้อสงสัย
ขอขอบคุณ!!!
มาพบกันในบทช่วยสอนถัดไปที่เราจะเล่นกับ LED และสวิตช์เพิ่มเติม