การนำเข้า Arduino Sketch สำหรับ AVR โดยใช้ซอฟต์แวร์ MPLAB-X IDE#

Keywords: Atmel/Microchip AVR MCUs, ATmega328P, MPLAB-X IDE, Arduino Sketch


MPLAB-IDE & Arduino Import Plug-In#

บทความนี้ นำเสนอขั้นตอนการติดตั้ง Arduino Import Plugin สำหรับซอฟต์แวร์ Microchip MPLAB-X IDE (v6.00) และทดลองนำเข้าตัวอย่างไฟล์ Arduino Sketch สำหรับบอร์ด Arduino Nano (ATmega328P) เพื่อนำมาเขียนโค้ดภาษา C/C++ และจำลองการทำงานหรือดีบักโค้ดด้วย Simulator

ขั้นตอนการนำเข้า Arduino Sketch เพื่อใช้งานร่วมกับ MPLAB-X IDE มีดังนี้

  • ติดตั้ง Arduino Import Plug-in สำหรับ MPLAB-X IDE
  • นำเข้า Arduino Sketch ที่ได้เคยสร้างไว้ เพื่อสร้างเป็นโปรเจกต์ใหม่
  • เลือก Arduino Platform ให้เป็น Arduino AVR Boards
  • ระบุ Location หรือ Path ของ Arduino IDE (ทดลองใช้เวอร์ชัน 1.8.13)
  • ระบุ Location หรือ Path ของ Arduino Core for AVR (เป็นเวอร์ชัน 1.8.4) ที่ได้ติดตั้งโดย Arduino IDE เอาไว้พร้อมใช้งานแล้ว
  • ระบุไดเรกทอรีสำหรับสร้างโปรเจกต์ใหม่ (Projet Directory) และจบขั้นตอนการนำเข้าโปรเจกต์

ตัวอย่าง Arduino Sketch#

โค้ดตัวอย่างสาธิตการทำให้ขา D11 และ D12 เป็นขาสำหรับเอาต์พุต-ดิจิทัล และมีการสลับสถานะลอจิก ตามระยะเวลา (หน่วยเป็นมิลลิวินาที) ที่กำหนดไว้โดย INTERVAL_MSEC

ให้นำไปโค้ดตัวอย่างนี้ไปสร้างเป็น Arduino Sketch และคอมไพล์โค้ดโดยใช้ซอฟต์แวร์ Arduino IDE (ผู้ใช้จะต้องติดตั้งซอฟต์แวร์นี้ในเครื่องคอมพิวเตอร์)

#include <Arduino.h>
#define NUM_LEDS        (2)
#define INTERVAL_MSEC   (20)

// global constants / variables
const int LED_PINS[ NUM_LEDS ] = { 12, 13 }; // D12 and D13
uint32_t ts, now;
uint8_t cnt = 0;

void setup() {
  for ( int i=0; i < NUM_LEDS; i++ ) { // configure output pins
     pinMode( LED_PINS[i], OUTPUT );   // LED output
     digitalWrite( LED_PINS[i], LOW ); // output LOW
  }
  ts = millis(); // save timestamp
}

void loop() {
  now = millis(); // get the current timestamp (in msec)
  // Do we need to update output now ?
  if ( now - ts >= INTERVAL_MSEC ) { 
     // keep the timestamp 
     ts = now;
     // select the pin
     int pin = LED_PINS[ cnt ]; 
     // increment the counter variable by 1
     cnt = (cnt + 1) % NUM_LEDS;
     // toggle the selected pin either D12 or D13
     digitalWrite( pin, !digitalRead( pin ) );
  }
}

รูป: ตัวอย่าง Arduino Sketch

โดยทั่วไปแล้ว เราจะใช้ซอฟต์แวร์ Arduino IDE สำหรับการเขียนโค้ด คอมไพล์ และอัปโหลดไปยังบอร์ด Arduino แต่ไม่สามารถดีบักการทำงานได้โดยใช้ตัวจำลองการทำงาน (Simulator) หรือ อุปกรณ์สำหรับการดีบักโค้ดในฮาร์ดแวร์

 


การติดตั้ง Arduino Import Plugin#

เปิดโปรแกรม MPLAB-X IDE แล้วไปทำคำสั่งจากเมนู Tools > Plugins และจะปรากฎหน้าต่างใหม่ชื่อ Plugins ถัดไปให้กดปุ่ม Check for Updates แล้วจึงตรวจสอบดูรายการของ Plugins ที่สามารถดาวน์โหลดมาใช้งานได้

เลือก Arduino Import Plugin แล้วกดปุ่ม Install เพื่อทำขั้นตอนการติดตั้ง

รูป: ทำขั้นตอนติดตั้ง Arduino Import Plugin

รูป: แสดงรายการ Plugins ที่ได้มีการติดตั้งพร้อมใช้งานแล้วใน MPLAB-X IDE

 


การนำเข้า Arduino Sketch#

ถัดไปเป็นขั้นตอนการนำเข้าไฟล์ ** Arduino Sketch (.ino) ที่มีอยู่แล้ว ให้ทำคำสั่งจากเมนู File > Import > Import Arduino Project**

รูป: เริ่มขั้นตอนการนำเข้า Arduino Sketch

รูป: เลือก Arduino Sketch ที่ต้องการนำมาเข้าใน MPLAB-X IDE

รูป: เลือกไมโครคอนโทรลเลอร์เป็น ATmega328P สำหรับบอร์ด Arduino Nano v3.0

รูป: เลือก Hardware Tools ให้เป็น Simulator เพื่อใช้ในการดีบักโค้ด

รูป: เปิดไฟล์ .cpp ที่อยู่ใน Source ของโปรเจกต์ ซึ่งถูกสร้างมาจากไฟล์ .ino โดยอัตโนมัติ

 

ปัญหา: จากการทดลองใช้งาน (อ้างอิงเวอร์ชัน v1.8.3 ที่ได้ทดลองใช้งาน) เมื่อคอมไพล์โค้ดในโปรเจกต์ จะพบปัญหาเกี่ยวกับคำสั่ง #include "new" ในไฟล์ new.h แต่ก็มีวิธีการแก้ไขดังนี้

  • ให้แก้ไขจากเดิม #include "new" ให้เป็น #include "new.h"
  • ให้แก้ไขไฟล์ new.h ที่มีอยู่ใน "Imported Core" ให้มีเนื้อหาภายในเหมือนกับไฟล์ new

จากนั้นจึงทำขั้นตอน Build Project

รูป: ทำขั้นตอนจากเมนู Production > Build Project ... เพื่อคอมไพล์โค้ดที่ได้นำเข้าจาก Arduino Sketch

รูป: กำหนดตำแหน่งของ Breakpoint (เช่น บรรทัดที่ 32 ในรูปตัวอย่าง) ก่อนเข้าสู่ Debug Session

ในระหว่างการดีบักโค้ด ผู้ใช้สามารถเพิ่มรายการติดตาม (ในหน้าต่าง Watches) เพื่อดูการเปลี่ยนแปลงค่าของตัวแปร (Global Symbols หรือ SFRs) ในโปรเจกต์ได้

รูป: ตัวอย่างการตั้งค่า Oscillator Options สำหรับ Simulator

รูป: เมนูคำสั่งที่เกี่ยวข้องกับการดีบัก เช่น Continue เพื่อรันโค้ดต่อไป หลังจากถูกหยุดไว้ชั่วคราวเมื่อทำคำสั่งมาถึง Breakpoint


 

การนำเข้า Arduino Sketch ที่ใช้ไลบรารี FreeRTOS#

ตัวอย่างถัดไป สาธิตการนำเข้า Arduino Sketch ที่มีการใช้งานไลบรารี FreeRTOS ดังต่อไปนี้

// include the FreeRTOS library for AVR
#include <Arduino_FreeRTOS.h>

#define NUM_LEDS  (4)
const int LED_PINS[ NUM_LEDS ] = { 5, 6, 7, 8 };

void task( void *pvParameters ); // task entry function

void setup() {
   for ( int i=0; i < NUM_LEDS; i++ ) {
     pinMode( LED_PINS[i], OUTPUT ); // configure output pins
     digitalWrite( LED_PINS[i], LOW ); // LED output LOW
   } 
   // create a new task
   xTaskCreate( task, "Task", 128, NULL, tskIDLE_PRIORITY+1, NULL );
   // Note the task scheduler is started automatically.  
}

void loop() {
  /* empty */
}

void task( void *pvParameters ) { // task-entry function
   uint8_t cnt = 0; // a counter variable, increment by 1
   while(1) { 
     int pin = LED_PINS[ cnt ];
     digitalWrite( pin, LOW ); // turn the current LED off
     cnt = (cnt+1) % NUM_LEDS;
     pin = LED_PINS[ cnt ]; 
     digitalWrite( pin, HIGH ); // turn the next LED on
     vTaskDelay( pdMS_TO_TICKS(1000) ); 
   }
}

ทำขั้นตอนเหมือนเดิม แต่เปลี่ยน Arduino Sketch ที่จะนำเข้าในตัวอย่างนี้

รูป: การนำเข้าและจำลองการทำงาน (ดีบัก) Arduino Sketch ที่มีการใช้คำสั่งจากไลบรารี FreeRTOS


การเรียกใช้คำสั่งภายนอกเพื่ออัปโหลดไฟล์ไปยังบอร์ด Arduino#

หากต้องการจะอัปโหลดไฟล์ .hex ที่ได้จากการคอมไพล์โค้ด ไปยังบอร์ด Arduino (เช่น Arduino Nano ในตัวอย่างนี้) ก็มีวิธีการดังนี้

1) ให้สร้างไฟล์ชื่อ nano_programmer.bat ให้มีคำสั่งต่อไปนี้ (เรียกใช้คำสั่ง avrdude ของ Arduino Tools) แล้วบันทึกไฟล์

@echo OFF
set ARDUINO_TOOLS_PATH="C:\Users\%USERNAME%\AppData\Local\Arduino15\packages\arduino\tools"
%ARDUINO_TOOLS_PATH%\avrdude\6.3.0-arduino17\bin\avrdude.exe ^
  -C%ARDUINO_TOOLS_PATH%\avrdude\6.3.0-arduino17\etc\avrdude.conf ^
  -v -patmega328p -carduino -P%1 -b115200 -D -Uflash:w:%2:i

2) กลับไปยังโปรเจกต์ที่ได้สร้างไว้ใน MPLAB-X IDE แล้วให้ไปที่ File > Project Properties > Conf: [default] > Building และกดเลือก Check Box: Execute the line after build เขียนคำสั่งที่ต้องการทำในช่องบรรทัดถัดไป (เรียกใช้ไฟล์ nano_programmer.bat) ในรูปตัวอย่างได้เลือกใช้พอร์ตอนุกรมหมายเลข COM9 (อาจเป็นหมายเลขอื่นและขึ้นอยู่กับคอมพิวเตอร์ที่กำลังใช้งาน)

รูป: การตั้งค่าเพื่อให้ทำคำสั่งเพิ่มหลังจากทำขั้นตอน Build Project ได้สำเร็จ

รูป: เมื่อทำขั้นตอน Build Project จะมีการอัปโหลดไฟล์ .hex ไปยังบอร์ดโดยอัตโนมัติ

 


กล่าวสรุป#

ผู้ใช้สามารถนำเข้า Arduino Sketch (ไฟล์ .ino) เพื่อนำมาเขียนโค้ด คอมไพล์ และดีบักการทำงานของโค้ด โดยใช้ซอฟต์แวร์ Microchip MPLAB-X IDE

 


This work is licensed under a Creative Commons Attribution-ShareAlike 4.0 International License.

Created: 2022-01-27 | Last Updated: 2022-01-28