- เตรียมพร้อมสำหรับการเขียนโปรแกรม:
- การสร้างโครงการใหม่โดยใช้ MPLAB-X:
- ทำความรู้จักกับ Configuration Registers:
- การตั้งค่า Configuration Bits ใน MPLAB-X:
- การเขียนโปรแกรม PIC เพื่อกะพริบ LED:
- แผนภาพวงจรและการจำลอง Proteus:
นี่คือบทช่วยสอนที่สองของซีรี่ส์การสอน PIC ของเรา ในบทช่วยสอนก่อนหน้าของเราการเริ่มต้นใช้งานไมโครคอนโทรลเลอร์ PIC: บทนำเกี่ยวกับ PIC และ MPLABX เราได้เรียนรู้สิ่งพื้นฐานเกี่ยวกับไมโครคอนโทรลเลอร์ PIC ของเราเรายังติดตั้งซอฟต์แวร์ที่จำเป็นและซื้อโปรแกรมเมอร์ PicKit 3 ตัวใหม่ซึ่งเราจะใช้ในไม่ช้า ตอนนี้เราพร้อมที่จะเริ่มต้นกับโปรแกรมไฟ LED กระพริบแรกโดยใช้ PIC16F877A นอกจากนี้เรายังจะได้เรียนรู้เกี่ยวกับ Configuration Registers ในบทช่วยสอนนี้
บทช่วยสอนนี้คาดว่าคุณได้ติดตั้งซอฟต์แวร์ที่จำเป็นบนคอมพิวเตอร์ของคุณและคุณรู้พื้นฐานที่ดีเกี่ยวกับ PIC MCU หากไม่เป็นเช่นนั้นโปรดย้อนกลับไปที่บทช่วยสอนก่อนหน้าและเริ่มจากตรงนั้น
เตรียมพร้อมสำหรับการเขียนโปรแกรม:
เนื่องจากเราตัดสินใจใช้ PIC16F877A กับคอมไพเลอร์ XC8 ให้เราเริ่มต้นใช้งานแผ่นข้อมูลของพวกเขา ฉันขอแนะนำให้ทุกคนดาวน์โหลด PIC16F877A Datasheet และคู่มือ XC8 Compiler เนื่องจากเราจะอ้างถึงสิ่งเหล่านี้บ่อยครั้งเมื่อเราดำเนินการผ่านบทช่วยสอนของเรา เป็นแนวทางปฏิบัติที่ดีเสมอในการอ่าน Datasheet ที่สมบูรณ์ของ MCU ใด ๆ ก่อนที่เราจะเริ่มเขียนโปรแกรมจริง
ตอนนี้ก่อนที่เราจะเปิด MPLAB-X และเริ่มการเขียนโปรแกรมมีสิ่งพื้นฐานบางประการที่เราต้องระวัง อย่างไรก็ตามเนื่องจากนี่เป็นรายการแรกของเราฉันไม่อยากจะล้อเลียนพวกคุณด้วยทฤษฎีมากมาย แต่เราจะหยุดที่นี่และที่นั่นในขณะที่เราเขียนโปรแกรมและฉันจะอธิบายให้คุณฟัง หากคุณไม่มีเวลามากพอที่จะอ่านสิ่งเหล่านี้ทั้งหมดเพียงแค่เหลือบดูแล้วข้ามไปที่วิดีโอที่ด้านล่างของหน้า
การสร้างโครงการใหม่โดยใช้ MPLAB-X:
ขั้นตอนที่ 1:เปิด MPLAB-X IDE ที่เราติดตั้งในคลาสก่อนหน้าเมื่อโหลดแล้วควรมีลักษณะดังนี้
ขั้นตอนที่ 2:คลิกที่ไฟล์ -> โครงการใหม่หรือใช้ปุ่มลัด Ctrl + Shift + N คุณจะได้รับ POP-UP ต่อไปนี้ซึ่งคุณต้องเลือก โครงการแบบสแตนด์อโลน และคลิกถัดไป
ขั้นตอนที่ 3: ตอนนี้เราต้องเลือกอุปกรณ์ของเราสำหรับโครงการ ดังนั้นพิมพ์เป็น PIC16F877A ในส่วน เลือกอุปกรณ์ แบบเลื่อนลง เมื่อเสร็จแล้วควรเป็นแบบนี้จากนั้นคลิกที่ Next
ขั้นตอนที่ 4:หน้าถัดไปจะให้เราเลือกเครื่องมือสำหรับโครงการของเรา นี่จะเป็น PicKit 3 สำหรับโครงการของเรา เลือก PicKit 3 แล้วคลิกถัดไป
ขั้นตอนที่ 5:หน้าถัดไปจะขอให้เลือกคอมไพเลอร์เลือกคอมไพเลอร์ XC8 แล้วคลิกถัดไป
ขั้นตอนที่ 6:ในหน้านี้เราต้องตั้งชื่อโครงการของเราและเลือกตำแหน่งที่จะต้องบันทึกโครงการ ฉันตั้งชื่อโครงการนี้ว่าBlinkและบันทึกไว้บนเดสก์ท็อปของฉัน คุณสามารถตั้งชื่อและบันทึกด้วยวิธีที่คุณต้องการ โปรเจ็กต์ของเราจะถูกบันทึกเป็นโฟลเดอร์ที่มีนามสกุล. Xซึ่ง MAPLB-X สามารถเปิดใช้งานได้โดยตรง คลิกเสร็จสิ้นเมื่อเสร็จสิ้น
ขั้นตอนที่ 7:แค่นั้น !!! โครงการของเราถูกสร้างขึ้น หน้าต่างทางซ้ายสุดจะแสดงชื่อโปรเจ็กต์ (Here Blink) ให้คลิกเพื่อให้เราสามารถดูไดเรกทอรีทั้งหมดที่อยู่ในนั้นได้
ในการเริ่มการเขียนโปรแกรมเราจำเป็นต้องเพิ่มไฟล์ C Main ภายในไดเร็กทอรีไฟล์ต้นฉบับของเรา ทำได้โดยคลิกขวาที่ไฟล์ต้นฉบับแล้วเลือกใหม่ -> C ไฟล์หลักดังที่แสดงในภาพด้านล่าง
ขั้นตอนที่ 8:กล่องโต้ตอบต่อไปนี้จะปรากฏขึ้นซึ่งจะต้องระบุชื่อของไฟล์ C ฉันตั้งชื่อในกะพริบตาอีกครั้ง แต่ตัวเลือกเหลือให้คุณ ตั้งชื่อในคอลัมน์ชื่อไฟล์และคลิกที่เสร็จสิ้น
ขั้นตอนที่ 9: เมื่อสร้างไฟล์หลัก C แล้ว IDE จะเปิดให้เราพร้อมกับรหัสเริ่มต้นบางส่วนตามที่แสดงด้านล่าง
ขั้นตอนที่ 10:ตอนนี้เราสามารถเริ่มเขียนโปรแกรมโค้ดของเราในไฟล์ C-main ได้แล้ว รหัสเริ่มต้นจะไม่ถูกใช้ในบทช่วยสอนของเรา ลองลบออกให้หมด
ทำความรู้จักกับ Configuration Registers:
ก่อนที่จะเริ่มโปรแกรมไมโครคอนโทรลเลอร์เราต้องรู้เกี่ยวกับการลงทะเบียนการกำหนดค่า
ดังนั้น Configuration register เหล่านี้คืออะไรเราควรตั้งค่าอย่างไรและทำไม?
อุปกรณ์ PIC มีหลายตำแหน่งซึ่งมีบิตการกำหนดค่าหรือฟิวส์ บิตเหล่านี้ระบุการทำงานพื้นฐานของอุปกรณ์เช่น โหมดออสซิลเลเตอร์ตัวจับเวลาการเฝ้าดูโหมดการเขียนโปรแกรมและการป้องกันรหัส บิตเหล่านี้จะต้องตั้งอย่างถูกต้องเพื่อที่จะเรียกใช้รหัสมิฉะนั้นเรามีอุปกรณ์ที่ไม่ทำงาน ดังนั้นจึงเป็นเรื่องสำคัญมากที่จะต้องทราบเกี่ยวกับรีจิสเตอร์การกำหนดค่าเหล่านี้ก่อนที่เราจะเริ่มด้วยโปรแกรมกะพริบตา
ในการใช้ Configuration register เหล่านี้เราต้องอ่าน Datasheet และทำความเข้าใจว่า Configuration bits ประเภทต่างๆพร้อมใช้งานและฟังก์ชันอะไรบ้าง บิตเหล่านี้สามารถตั้งค่าหรือรีเซ็ตได้ตามข้อกำหนดการเขียนโปรแกรมของเราโดยใช้การกำหนดค่า pragma
pragma มีรูปแบบดังต่อไปนี้
#pragma config setting = state-value #pragma config register = value
โดยที่ การตั้งค่า เป็นตัวบอกการตั้งค่าคอนฟิกูเรชันเช่น WDT และสถานะคือคำอธิบายแบบข้อความของสถานะที่ต้องการเช่นปิด ลองพิจารณาตัวอย่างต่อไปนี้
#pragma config WDT = ON // เปิดตัวจับเวลา watchdog #pragma config WDTPS = 0x1A // ระบุค่าหลังสเกลของตัวจับเวลา
ผ่อนคลาย!!….. ผ่อนคลาย !!…. รีแล็กซ์ !!…...
ฉันรู้ว่ามันเข้ามาในหัวของเรามากเกินไปและการตั้งค่า Configuration bits เหล่านี้อาจจะดูยากสำหรับมือใหม่ !! แต่มันไม่ท้าทายกับ MPLAB-X ของเรา
การตั้งค่า Configuration Bits ใน MPLAB-X:
Microchip ทำให้กระบวนการที่น่าเบื่อหน่ายนี้ง่ายขึ้นมากโดยใช้การแสดงกราฟิกของบิตการกำหนดค่าประเภทต่างๆ ดังนั้นในการตั้งค่าเราก็ต้องทำตามขั้นตอนด้านล่างนี้
ขั้นตอนที่ 1: คลิกที่ Window -> PIC Memory View -> Configuration Bits ดังแสดงด้านล่าง.
ขั้นตอนที่ 2:ควรเปิดหน้าต่าง Configuration Bits ที่ด้านล่างของ IDE ดังที่แสดงด้านล่าง นี่คือสถานที่ที่เราสามารถตั้งค่าบิตการกำหนดค่าแต่ละบิตตามความต้องการของเรา ฉันจะอธิบายแต่ละบิตและวัตถุประสงค์ของมันเมื่อเราดำเนินการตามขั้นตอนต่างๆ
ขั้นตอนที่ 3:บิตแรกคือบิตการเลือกออสซิลเลเตอร์
PIC16F87XA สามารถใช้งานได้ในโหมดออสซิลเลเตอร์สี่โหมด โหมดทั้งสี่นี้สามารถเลือกได้โดยการเขียนโปรแกรมสองบิตการกำหนดค่า (FOSC1 และ FOSC0):
- LP คริสตัลพลังต่ำ
- XT Crystal / Resonator
- HS คริสตัล / เรโซเนเตอร์ความเร็วสูง
- ตัวต้านทาน RC / ตัวเก็บประจุ
สำหรับโครงการของเราเราใช้ Osc 20Mhz ดังนั้นเราต้องเลือก HSจากกล่องแบบเลื่อนลง
ขั้นตอนที่ 4: บิตถัดไปคือตัวจับเวลาสุนัขเฝ้าบ้านของเราเปิดใช้งานบิต
Watchdog Timer เป็นออสซิลเลเตอร์ RC บนชิปที่ทำงานฟรีซึ่งไม่ต้องใช้ส่วนประกอบภายนอกใด ๆ RC oscillator นี้แยกจาก RC oscillator ของขา OSC1 / CLKI นั่นหมายความว่า WDT จะทำงานแม้ว่านาฬิกาบนหมุด OSC1 / CLKI และ OSC2 / CLKO ของอุปกรณ์จะหยุดทำงานแล้วก็ตาม ในระหว่างการทำงานปกติการหมดเวลาของ WDT จะสร้างการรีเซ็ตอุปกรณ์ (รีเซ็ตตัวจับเวลา Watchdog) บิต TO ในการลงทะเบียนสถานะจะถูกล้างเมื่อหมดเวลา Watchdog Timer หากไม่ล้างตัวจับเวลาในการเข้ารหัสซอฟต์แวร์ของเรา MCU ทั้งหมดจะรีเซ็ตเมื่อตัวจับเวลา WDT ล้นทุกครั้ง WDT สามารถปิดใช้งานได้อย่างถาวรโดยการล้างบิตการกำหนดค่า
เราไม่ได้ใช้ WDT ในโปรแกรมของเราดังนั้นให้เราล้างมันโดยเลือกปิดจากกล่องดรอปดาวน์
ขั้นตอนที่ 5: บิตถัดไปจะเป็นบิตตัวจับเวลาการเปิดเครื่อง
ตัวตั้งเวลาเปิดเครื่องให้การหมดเวลาที่ระบุไว้ที่ 72 มิลลิวินาทีเมื่อเปิดเครื่องจาก POR เท่านั้น Powerup Timer ทำงานบน RC oscillator ภายใน ชิปจะถูกเก็บไว้ในการรีเซ็ตตราบเท่าที่ PWRT ทำงานอยู่ การหน่วงเวลาของ PWRT ทำให้ VDD เพิ่มขึ้นถึงระดับที่ยอมรับได้ มีการจัดเตรียมบิตการกำหนดค่าเพื่อเปิดหรือปิดใช้งาน PWRT
เราจะไม่ต้องการความล่าช้าในโปรแกรมของเราดังนั้นให้เราปิดสิ่งนั้นด้วย
ขั้นตอนที่ 6:บิตถัดไปจะเป็นการเขียนโปรแกรมแรงดันไฟฟ้าต่ำ
LVP บิตของคำกำหนดค่าช่วยให้สามารถเขียนโปรแกรม ICSP แรงดันไฟฟ้าต่ำได้ โหมดนี้ช่วยให้สามารถตั้งโปรแกรมไมโครคอนโทรลเลอร์ผ่าน ICSP โดยใช้แหล่ง VDD ในช่วงแรงดันไฟฟ้าที่ใช้งานได้ นั่นหมายความว่าไม่จำเป็นต้องนำ VPP มาที่ VIHH แต่สามารถปล่อยทิ้งไว้ที่แรงดันไฟฟ้าปกติได้ ในโหมดนี้พิน RB3 / PGM มีไว้สำหรับฟังก์ชันการเขียนโปรแกรมและหยุดเป็นพิน I / O สำหรับวัตถุประสงค์ทั่วไป ในระหว่างการเขียนโปรแกรม VDD จะใช้กับพิน MCLR ในการเข้าสู่โหมดการเขียนโปรแกรมต้องใช้ VDD กับ RB3 / PGM หากมีการตั้งค่าบิต LVP
ให้เราปิด LVP เพื่อให้เราสามารถใช้ RB3 เป็นพิน I / O ได้ การทำเช่นนี้เพียงแค่เปิดนี้ปิดโดยใช้กล่องแบบหล่นลง
ขั้นตอนที่ 7:บิตถัดไปจะเป็น EEPROM และบิตการป้องกันหน่วยความจำโปรแกรม หากบิตนี้เปิดอยู่เมื่อตั้งโปรแกรม MCU แล้วจะไม่มีใครดึงโปรแกรมของเราจากฮาร์ดแวร์ แต่ตอนนี้ให้เราปล่อยให้ทั้งสามปิดอยู่
เมื่อการตั้งค่าเสร็จสิ้นตามคำแนะนำกล่องโต้ตอบควรมีลักษณะดังนี้
ขั้นตอนที่ 8:ตอนนี้คลิกที่สร้างซอร์สโค้ดเป็นเอาต์พุตโค้ดของเราจะถูกสร้างขึ้นตอนนี้เพียงแค่คัดลอกพร้อมกับไฟล์ส่วนหัวและวางลงในไฟล์ C-Blink.c ของเราดังที่แสดงด้านล่าง
นั่นคืองาน Configuration ของเราเสร็จสิ้น เราสามารถกำหนดค่านี้สำหรับโครงการทั้งหมดของเรา แต่ถ้าคุณสนใจคุณสามารถยุ่งกับพวกเขาได้ในภายหลัง
การเขียนโปรแกรม PIC เพื่อกะพริบ LED:
ในโปรแกรมนี้เราจะใช้ไมโครคอนโทรลเลอร์ PICของเราเพื่อกะพริบ LED ที่เชื่อมต่อกับขา I / O ลองมาดูในฉันหมุดที่แตกต่างกัน / O ที่มีอยู่บนเราPIC16F877A
ตามที่ปรากฏข้างต้นPIC16F877 มี 5 อินพุต / เอาต์พุตพอร์ตพื้นฐาน โดยปกติจะแสดงด้วย PORT A (RA), PORT B (RB), PORT C (RC), PORT D (RD) และ PORT E (RE) พอร์ตเหล่านี้ใช้สำหรับการเชื่อมต่ออินพุต / เอาต์พุต ในคอนโทรลเลอร์นี้“ PORT A” กว้างเพียง 6 บิต (RA-0 ถึง RA-5),” PORT B”,“ PORT C”,” PORT D” กว้างเพียง 8 บิต (RB-0 ถึง RB-7, RC-0 ถึง RC-7, RD-0 ถึง RD-7), "PORT E" มีความกว้างเพียง 3 บิต (RE-0 ถึง RE-2)
พอร์ตทั้งหมดนี้เป็นแบบสองทิศทาง ทิศทางของพอร์ตถูกควบคุมโดยใช้ TRIS (X) register (TRIS A ใช้กำหนดทิศทางของ PORT-A, TRIS B ใช้กำหนดทิศทางสำหรับ PORT-B เป็นต้น) การตั้งค่าบิต TRIS (X) '1' จะตั้งค่าบิต PORT (X) ที่เกี่ยวข้องเป็นอินพุต การล้าง TRIS (X) บิต '0' จะตั้งค่าบิต PORT (X) ที่เกี่ยวข้องเป็นเอาต์พุต
สำหรับโครงการของเราเราต้องสร้างพิน RB3 ของ PORT B เป็นเอาต์พุตเพื่อให้ LED ของเราสามารถเชื่อมต่อกับมันได้ นี่คือรหัสสำหรับ LED กะพริบด้วยไมโครคอนโทรลเลอร์ PIC:
# รวม
ครั้งแรกที่เราได้ระบุความถี่คริสตัลภายนอกโดยใช้ #define _XTAL_FREQ 20000000. จากนั้นใน main () เป็นโมฆะ ฟังก์ชั่นที่เราสั่งให้ MCU ของเราที่เราจะใช้ RB3 เป็นเอาท์พุท (TRISB = 0x00;) ขา จากนั้นจึงใช้ลูป ในขณะที่ ไม่มีที่สิ้นสุดเพื่อให้ไฟ LED กะพริบตลอดไป ในการกะพริบ LED เราต้องเปิดและปิดด้วยความล่าช้าที่เห็นได้ชัด
เมื่อเขียนโค้ดเสร็จแล้วให้สร้าง Project โดยใช้คำสั่ง Run -> Build Main Project สิ่งนี้ควรรวบรวมโปรแกรมของคุณ หากทุกอย่างเรียบร้อยดี (ตามที่ควรจะเป็น) คอนโซลเอาต์พุตที่ด้านล่างของหน้าจอจะแสดงข้อความ BUILD SUCCESSFUL ดังแสดงในภาพด้านล่าง
แผนภาพวงจรและการจำลอง Proteus:
เมื่อเราสร้าง Project และถ้า Build สำเร็จ ไฟล์ HEX จะถูกสร้างขึ้นที่พื้นหลังของ IDE ของเรา ไฟล์ HEX นี้สามารถพบได้ในไดเร็กทอรีด้านล่าง
อาจแตกต่างกันไปสำหรับคุณหากคุณบันทึกไว้ในตำแหน่งอื่น
ตอนนี้ให้เราเปิด Proteus ที่เราติดตั้งไว้ก่อนหน้านี้อย่างรวดเร็วและสร้างแผนผังสำหรับโครงการนี้ เราจะไม่อธิบายวิธีดำเนินการดังกล่าวเนื่องจากอยู่นอกขอบเขตของโครงการนี้ แต่ไม่ต้องกังวลมีอธิบายไว้ในวิดีโอด้านล่าง เมื่อคุณทำตามคำแนะนำและสร้างแผนผังควรมีลักษณะดังนี้
ในการจำลองผลลัพธ์ให้คลิกที่ปุ่มเล่นที่มุมล่างซ้ายของหน้าจอหลังจากโหลดไฟล์ Hex ควรกะพริบ LED ที่เชื่อมต่อกับ RB3 ของ MCU หากคุณมีปัญหาใด ๆ โปรดดูวิดีโอหากยังไม่สามารถแก้ไขได้ให้ใช้ส่วนความคิดเห็นเพื่อขอความช่วยเหลือ
ตอนนี้เราได้ทำโปรเจ็กต์แรกของเราด้วยไมโครคอนโทรลเลอร์ PICและตรวจสอบผลลัพธ์โดยใช้ซอฟต์แวร์จำลอง ไปปรับแต่งกับโปรแกรมและสังเกตผลลัพธ์ จนกว่าเราจะพบกันในโครงการต่อไปของเรา
เดี๋ยวนะ !!
ในโครงการต่อไปของเราเราจะเรียนรู้วิธีการทำงานกับฮาร์ดแวร์จริง เพื่อที่เราจะต้องมีเครื่องมือต่อไปนี้ให้พร้อม ถึงแล้วมีความสุขในการเรียนรู้ !!
- PicKit 3
- PIC16F877A ไอซี
- 40 - ขายึด IC
- คณะกรรมการ Perf
- 20Mhz คริสตัล OSC
- หมุด Bergstick หญิงและชาย
- 33pf ตัวเก็บประจุ - 2Nos
- ตัวต้านทาน 680 โอห์ม
- LED สีใดก็ได้
- ชุดบัดกรี