บทความนี้กล่าวถึงขั้นตอนการเขียนโปรแกรม โค้ดภาษา C ให้กับไมโครคอนโทรลเลอร์ Arduino Uno (ATmega328P) ด้วย MPLAB-X IDE การเขียนโปรแกรมไมโครคอนโทรลเลอร์ Arduino เช่น Uno / Nano ปรกติก็มี Arduino IDE เป็นซอฟต์แวร์ให้เลือกใช้งานกัน ซึ่งก็ใช้งานได้สะดวก แต่ถ้าเราจะเขียนโค้ดภาษา C สำหรับ AVR 8-bit MCU เรายังมีตัวเลือกอื่นๆ เช่น การใช้งาน Atmel AVR Studio 7 แต่เนื่องจากว่า บริษัท Atmel ได้กลายเป็นส่วนหนึ่งของบริษัท Microchip ไปแล้วตั้งแต่ปี ค.ศ. 2016 และทางบริษัทก็แนะนำให้ใช้ MPLAB-X IDE เป็นตัวเลือกใหม่สำหรับนักพัฒนา จึงเป็นทีมาของบทความนี้
ขั้นตอนการทํางาน
1 : ติดตั้ง MPLAB-X IDE
ติดตั้ง MPLAB-X IDE และ XC8 Compiler ตามลิงค์ด้านล่าง
2 : สร้างชนิดของโปรเจค
เมื่อเปิดโปรแกรม MPLAB-X ขึ้นมา ให้คลิกที่เมนู File -> New Project..
ที่ส่วน Categories: ให้เลือก Microchip Embedded แล้่วเลือก Projects: เป็น Standalone Project -> Next
3 : เลือกเบอร์ไมโครคอนโทรลเลอร์
Family เลือกเป็น 8-bit AVR MCUs (Xmega/Mega/Tiny)
เราสามารถเลือกเบอร์ไมโครคอนโทรลเลอร์ตามเบอร์ที่เราต้องการ ด้วยการพิมพ์ชื่อเบอร์ไมโครคอนโทรลลเลอร์ ที่เราต้องการ ที่ช่อง Device โดยจะต้องเป็นเบอร์ที่มี Compiler ได้รองรับแล้ว
ซึ่งบอร์ด Arduino UNO นั้น ใช้ IC ไมโครคอนโทรลเลอร์ เบอร์ ATmega328P ของ บริษัท Atmel
Device จึงเลือกเป็น ATmega328P
การเลือกใช้ Tool สำหรับการดีบักและอัพโหลดไฟล์ไปยังบอร์ดไมโครคอนโทรลเลอร์ (ซึ่งมีหลายตัวเลือก เช่น Microchip PICKit 4, Microchip SNAP, J-Link) แต่ในกรณีนี้ให้เราเลือก Simulator ซึ่งจะสามารถจำลองการทำงานของโค้ดได้
Tool เลือกเป็น Simulator
คลิก Next
3 : เลือกตัวแปลงภาษา หรือ Compiler
เราต้องเลือกตัวแปลภาษา หรือ Compiler ที่เราต้องการจะใช้ในโปรเจคนี้ของเรา โปรแกรม MPLAB-X จะแสดง Compiler ที่เคยติดตั้งไว้แล้ว ที่อยู่ภายในเครื่องของเรา ที่เป็น Compiler ของค่ายไมโครชิพ แสดงออกมาให้เห็นทั้งหมด ซึ่งเราสามารถเลือก Compiler ที่เหมาะสมได้ ในที่นี้กำลังจะเขียนโปรแกรมลง ATmega328P ซึ่งเจ้า XC8 สามารถที่จะรองรับได้ ดังนั้้น จึงคลิกเลือก XC8 เพื่อเป็น Compiler สำหรับโปรเจคนี้
เลือก CX8 -> Next
4 : ตั้งชื่อโปรเจค
ตั้งชื่อสำหรับโปรเจกต์ใหม่ และระบุ Folder สำหรับโปรเจกต์ดังกล่าว
Project Name เป็น led_blink -> UTF8 -> Finish
5 : เขียนโค้ดภาษา C
ที่แท็บ Projects ไปที่ ชื่อโปรเจค ในตัวอย่างชื่อ led_blink
สร้างไฟล์ main.c และเพิ่มเข้าไว้ในโปรเจกต์ เพื่อทดลองโค้ดตัวอย่าง โดย คลิกขวา ที่ Source Files -> New -> main.c
File Name เป็น main -> Finish
คลิกที่ไฟล์ main.c
โค้ดตัวอย่างเป็นการทำให้ LED ที่อยู่บนบอร์ด Arduino Uno ที่ขา D13 หรือขา PB5 ของ ATmega328P กระพริบได้ การหน่วงเวลา หรือเว้นระยะ จะใช้วิธีที่เรียกว่า Software Delay Loop
เขียนโปรแกรมตามโค้ดด้านล่างนี้
#include <xc.h>
void sw_delay( uint32_t n) {
for (uint32_t i=0; i < n; i++) {
asm("nop");
}
}
void main(void) {
DDRB |= (1 << 5); // PB5 pin as output
while(1) {
PORTB |= (1<<5); // output high to PB5 pin
sw_delay( 1000000ul );
PORTB &= ~(1<<5); // output low to PB5 pin
sw_delay( 1000000ul );
}
return;
}
คลิก Save
ลองคอมไพล์โค้ด โดย คลิก Build Main Project
ถ้าคอมไพล์โค้ดได้สำเร็จแล้ว จะแสดง BUILD SUCCESSFUL และบรรทัดล่างลงไปจะแสดงที่อยู่ของ ไฟล์ .hex ซึ่งไฟล์นี้เราสามารถนำไปโปรแกรมลงบอร์ดไมโครคอนโทรลเลอร์ได้
ตัวอย่าง ที่อยู่ของ ไฟล์ .hex
C:/Users/ชื่อผู้ใช้/MPLABXProjects/led_blink.X/dist/default/production/led_blink.X.production.hex
หรือถ้ากดดูที่แท็บ Files (ถัดจาก Projects) led_blink -> dist -> default -> production เราจะมองเห็นจะแสดงที่อยู่ของ ไฟล์ .hex เช่นกัน
ในขั้นตอน Build Project เราจะได้ไฟล์ .hex ซึ่งสามารถนำไปใช้โปรแกรมบอร์ด Arduino Uno เพื่อทดสอบการทำงานของโค้ดในฮาร์ดแวร์จริงได้
6 : อัพโหลดไฟล์ .hex ไปยังบอร์ด Arduino UNO
ติดตั้ง XLoader โดยดาวน์โหลดซอฟต์แวร์ XLoader ได้ที่ :
เมื่อดาว์นโหลดไฟล์เสร็จแล้ว คลายไฟล์ แล้วคลิกเปิดไฟล์ XLoader
.hex คือไฟล์รหัสภาษาเครื่อง (machine code) เป็นไฟล์ต้นฉบับเลขฐานสิบหกที่มักใช้โดยอุปกรณ์ลอจิกที่โปรแกรมได้เช่นไมโครคอนโทรลเลอร์ มันมีการตั้งค่าข้อมูลการกำหนดค่าหรือข้อมูลอื่น ๆ ที่บันทึกในรูปแบบเลขฐานสิบหก
คลิก … เลือกไฟล์ .hex ที่ได้จากขั้นตอนที่ 5
คลิก Open
Device เลือกเป็น Uno(ATmega328)
เชื่อมต่อสาย USB จาก คอมพิวเตอร์ ไปที่บอร์ด Arduino UNO
คลิกขวา ที่ Start เลือกไปที่ Device Manager
ไปที่ Ports (COM & LPT) จะพบ Arduino Uno ในตัวอย่างเป็น (COM3) แสดงว่าคอมพิวเตอร์ของเราสามารถ ติดต่อสื่อสารกับ บอร์ด Arduino Uno ได้แล้ว
ที่ COM port เลือก ตามรูปด้านบนในตัวอย่างคือ COM3 (COM แต่ละเครื่องไม่เหมือนกันให้เลือก COM ตามที่ปรากฏ)
คลิก Upload
ถ้าอัพโหลดได้สำเร็จจะแสดง uploaded
ไฟ LED ที่เชื่อมต่อที่ขา PB5 บนบอร์ด กระพริบ ติด-ดับ แสดงว่า การทดสอบการทำงานของโค้ดในฮาร์ดแวร์จริง สําเร็จแล้ว