การใช้งาน Atmel Studio 7 กับ Arduino UNO ด้วยภาษา C


Atmel Studio 7.0 คือ integrated พัฒนาการแพลตฟอร์ม (IDP) สำหรับการพัฒนาและดีบั๊กโปรแกรม Atmel ARM® Cortex™-M และ Atmel AVR® microcontroller-(MCU-) ซึ่งจะประกอบไปด้วย GCC C และ C++ Compiler (ที่ใช้แปลงภาษาซี ให้เป็น Machine Code), Assembly (ที่ใช้แปลงภาษาแอสแซมบลี ให้เป็น Machine Code) และ simulator บรรจุมาอยู่แล้ว

ขั้นตอนการทํางาน


1 : ติดตั้ง Atmel Studio 7.0


ดาวน์โหลดซอฟต์แวร์ Atmel Studio 7.0 ได้ที่ :


การติดตั้งเหมือนกับโปรแกรมทั่วๆไป


2 : สร้างโปรเจคสำหรับเขียนโค้ดภาษา C


เมื่อเปิดโปรแกรม Atmel Studio 7.0 ขึ้นมา ให้คลิกที่เมนู File -> New -> Project..


เลือกเป็น C/C++ -> GCC C Executable Project – ตั้งชื่อโปรเจค เป็น uno_c -> OK



ซึ่งบอร์ด Arduino UNO นั้น ใช้ IC ไมโครคอนโทรลเลอร์ เบอร์ ATmega328P ของ บริษัท Atmel ที่ Device Family : จึงเลือกเป็น ATmega -> ATmega328P -> OK


การใช้งาน Atmel Studio 7 กับ Arduino UNO ด้วยภาษา C



โปรแกรมจะสร้าง ไฟล์โค้ด main.c ให้โดยอัตโนมัติ


การใช้งาน Atmel Studio 7 กับ Arduino UNO ด้วยภาษา C



3 : เขียนโค้ดภาษา C


โค้ดตัวอย่างเป็นการทำให้ LED ที่อยู่บนบอร์ด Arduino Uno ที่ขา D13 หรือขา PB5 ของ ATmega328P กระพริบได้ ด้วยการหน่วงเวลา หรือเว้นระยะ จะใช้วิธีที่เรียกว่า Software Delay Loop

Arduino UNO


จากรูปด้านบน การเขียนโค้ดกำหนดขาของ Arduino UNO โซนสีม่วง ขาที่ 8 ถึง 13 ได้ดังนี้

  • ขา 8 เขียนเป็น 0B000001 // PORTB0
  • ขา 9 เขียนเป็น 0B000010 // PORTB1
  • ขา 10 เขียนเป็น 0B000100 // PORTB2
  • ขา 11 เขียนเป็น 0B001000 // PORTB3
  • ขา 12 เขียนเป็น 0B010000 // PORTB4
  • ขา 13 เขียนเป็น 0B100000 // PORTB5



เขียนโปรแกรมตามโค้ดด้านล่างนี้ 


 #define F_CPU 16000000
 #define BLINK_DELAY_MS 1000

 #include <avr/io.h>
 #include <util/delay.h>

 int main (void)
 {
     // Arduino digital pin 13 (pin 5 of PORTB) for output
     DDRB |= 0B100000; // PORTB5

     while (1) {
        // turn LED on
        PORTB |= 0B100000; // PORTB5
        _delay_ms(BLINK_DELAY_MS);

        // turn LED off 
        PORTB &= ~ 0B100000; // PORTB5 
        _delay_ms(BLINK_DELAY_MS);
    }
 }




คอมไพล์โค้ด โดย คลิก Build -> Build Solution


โปรแกรมจะสร้าง ไฟล์โค้ด uno_c.hex ที่โฟลเดอร์ Output Files ให้โดยอัตโนมัติ


.hex คือไฟล์รหัสภาษาเครื่อง (machine code)  เป็นไฟล์ต้นฉบับเลขฐานสิบหกที่มักใช้โดยอุปกรณ์ลอจิกที่โปรแกรมได้เช่นไมโครคอนโทรลเลอร์ มันมีการตั้งค่าข้อมูลการกำหนดค่าหรือข้อมูลอื่น ๆ ที่บันทึกในรูปแบบเลขฐานสิบหก


ซึ่งสามารถนำไปใช้โปรแกรมบอร์ด Arduino Uno เพื่อทดสอบการทำงานของโค้ดในฮาร์ดแวร์จริงได้


แสดงตำแหน่งไฟล์ uno_c.hex


4 : อธิบายโค้ด

This image has an empty alt attribute; its file name is 18-1.png


กำหนดให้คอนโทรลเลอร์ทำงานที่ความถี่ 16MHz เพราะ Arduino UNO ใช้คริสตัล 16Mhz เป็นแหล่งสัญญาณนาฬิกา

#define F_CPU 16000000


กำหนดให้ BLINK_DELAY_MS มีค่าเท่ากับ 1000 มิลลิวินาที

#define BLINK_DELAY_MS 1000


เรียกใช้งานคำสั่งใน io.h ซึ่งอยู่ในโฟลเดอร์ avr สำหรับควบคุมอินพุท/เอาท์พุท (เช่น PORTD, DDRD)

#include <avr/io.h>


เรียกใช้งานคำสั่งเกี่ยวกับการหน่วงเวลา ที่อยู่ในไฟล์ delay.h ในโฟลเดอร์ util

#include <util/delay.h>


ฟังก์ชั่น main จะเป็นฟังชั่นแรกที่โปแกรมเริ่มทำงาน ดังนั้นจึงเป็นฟังก์ชั่นบังคับ

int main (void)


กำหนดให้ขา PฺฺB5 หรือขา 13 ของบอร์ด Arduino ทำหน้าที่เอาท์พุท

DDRB |= 0B100000; // PORTB5


ทำงานไปเรื่อยๆ จนกว่าเงื่อนไขจะเป็นเท็จ คือจะวนลูปไปเรื่อยๆ

while (1)


ส่งลอจิก 1 ไปที่ขา PB5 หรือขา 13 ของบอร์ด Arduino ให้เป็น HIGH

PORTB |= 0B100000; // PORTB5


หน่วงเวลารอ 1000 มิลลิวินาที ตามค่า BLINK_DELAY_MS ที่กำหนดไว้

_delay_ms(BLINK_DELAY_MS);


ส่งลอจิก 0 ไปที่ขา PB5 หรือ ให้ขา 13 ของบอร์ด Arduino ให้เป็น LOW

PORTB &= ~ 0B100000; // PORTB5 


หน่วงเวลารอ 1000 มิลลิวินาที ตามค่า BLINK_DELAY_MS ที่ประกาศไว้

_delay_ms(BLINK_DELAY_MS);


รายละเอียดเพิ่มเติมเกี่ยวกับโปรแกรม


โปรแกรมข้างต้นเรียกใช้นิยามชื่อรีจีสเตอร์ (PORTB, DDRD ฯลฯ) จากไฟล์เฮดเดอร์ avr/io.h และฟังก์ชันหน่วงเวลา _delay_ms() จากไฟล์เฮดเดอร์ util/delay.h

ตัวเลขที่นำหน้าด้วย 0b ในโค้ดภาษาซีเป็นการบอกให้คอมไพเลอร์ตีความค่าตัวเลขที่ตามมาให้เป็นตัวเลขฐานสอง นอกจากเลขฐานสองแล้วภาษาซียังรองรับการระบุค่าจำนวนเต็มคงที่ในรูปฐานแปด (ขึ้นต้นด้วย 0) และฐานสิบหก (ขึ้นต้นด้วย 0x)


การคอมไพล์โปรแกรมให้เป็นภาษาเครื่อง


กระบวนการแปลโปรแกรมภาษาชั้นสูงให้เป็นภาษาเครื่องนั้นเรียกว่าเป็นการคอมไพล์ (compile) ซึ่งอาศัยโปรแกรมที่เรียกว่าคอมไพเลอร์ (compiler) เป็นตัวดำเนินการ เราอาศัยโปรแกรม avr-gcc เป็นตัวคอมไพเลอร์



5 : อัพโหลดไฟล์ .hex ไปยังบอร์ด Arduino UNO

การอัพโหลดที่แนะนำมี 2 วิธีคือ


5.1 : อัพโหลดโค้ดผ่าน Arduino IDE

โดยทำตามขั้นตอนลิงค์ด้านล่าง


5.2 : อัพโหลดโค้ดผ่าน XLoader


ติดตั้ง XLoader โดยดาวน์โหลดซอฟต์แวร์ XLoader ได้ที่ :


เมื่อดาว์นโหลดไฟล์เสร็จแล้ว คลายไฟล์ แล้วคลิกเปิดไฟล์ XLoader

คลิก … เลือกไฟล์ .hex ที่ได้จากขั้นตอนที่ 3

คลิก 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 บนบอร์ด กระพริบ ติด-ดับ แสดงว่า การทดสอบการทำงานของโค้ด ภาษา C ในฮาร์ดแวร์จริง สําเร็จแล้ว




6 : อุปกรณ์ที่ใช้

Leave a Reply

Your email address will not be published. Required fields are marked *

เราใช้คุกกี้เพื่อพัฒนาประสิทธิภาพ และประสบการณ์ที่ดีในการใช้เว็บไซต์ของคุณ คุณสามารถศึกษารายละเอียดได้ที่ นโยบายความเป็นส่วนตัว และสามารถจัดการความเป็นส่วนตัวเองได้ของคุณได้เองโดยคลิกที่ ตั้งค่า

Privacy Preferences

คุณสามารถเลือกการตั้งค่าคุกกี้โดยเปิด/ปิด คุกกี้ในแต่ละประเภทได้ตามความต้องการ ยกเว้น คุกกี้ที่จำเป็น

Allow All
Manage Consent Preferences
  • Always Active

Save