ผมสนุกสนานกับการพัฒนาโครงงานเล็ก ๆ น้อย ๆ โดยใช้ Arduino มาระยะหนึ่ง สิ่งที่รบกวนจิตใจมาตลอดก็คือเมื่อจะพัฒนาโครงงานใหม่ ผมจะต้องรื้อโครงงานเก่าเพื่อนำบอร์ด Arduino ออกมาใช้ใหม่เสมอ
จนกระทั่งมีนักศึกษาทักว่าถ้าต้องติดตั้งบอร์ด Arduino ลงไปในโครงงานทุกคราวไปมันจะไม่สิ้นเปลืองไปหน่อยหรือ? คิดในมุมกลับก็คือถ้ามันไม่มีวิธีที่ประหยัดกว่านี้ การพัฒนาชิ้นงานด้วย Arduino ก็ไม่น่าจะได้รับความนิยมกว้างขวางขนาดนี้หรอก เออแฮะ! นั่นก็จริง
เมื่อคิดได้ดังนั้นแล้วก็เลยทำการค้นคว้าข้อมูลอินเตอร์เนตดู จึงพบว่าโครงการ Arduino มีความสามารถที่จะโปรแกรม Sketch ลงไปในไอซีไมโครคอนโทรลเลอร์เพื่อนำไปใช้แบบเดี่ยว ๆ (Standalone) ได้ด้วย ทำให้หลังจากที่เราพัฒนา Sketch บนบอร์ดทดลอง Arduino และทดลองวงจรแล้วเราสามารถติดตั้ง Sketch นั้นกับไอซีไมโครคอนโทรลเลอร์เปล่า ๆ ก็ได้ (เข้าใจผิดมาตั้งนาน) จากนั้นจึงติดตั้งไมโครคอนโทรลเลอร์นั้นลงในวงจรได้เลยโดยที่ไม่ต้องเสียสละบอร์ด Arduino ของเราลงไปในทุกโครงการ ในการนี้เราจำเป็นจะต้องมีอุปกรณ์หลัก 2 สิ่งคือ
- บอร์ด Arduino รุ่นใดก็ได้เพื่อใช้เป็นตัวโปรแกรม (Programmer) และ
- ไอซีไมโครคอนโทรเลอร์ตระกูล AVR ที่จะใช้แทนบอร์ด Arduino
- Diecimila (ET-EASY168, POP-168) ใช้ Atmega168
- Arduino Mega (ET-EASYMEGA1280) ใช้ Atmega1280
- Arduino NG w/ Atmega168 ใช้ Atmega168
- Arduino NG w/ Atmega8 ใช้ Atmega8 <=== ผมใช้ตัวนี้เพราะหาไอซี Atmega8 ได้
- ทำให้บอร์ด Arduino ของเรากลายเป็นตัวโปรแกรม
- ติดตั้ง Arduino Sketch ของโครงงานของเราลงในไอซี AVR ตัวนั้น ๆ
ทำให้บอร์ด Arduino เป็นตัวโปรแกรม
ในโปรแกรม Arduino IDE รุ่นล่าสุด (1.0.1) จะมี Sketch ตัวอย่างชื่อ ArduinoISP.ino ติดตั้งมาแล้ว โดยอยู่ที่เมนูน File -> Examples -> ArduinoISP Sketch นี้จะทำหน้าทึ่ทำให้บอร์ด Arduino ของเราทำตัวเป็นตัวโปรแกรม
- ให้เปิด Sketch ArduinoISP ขึ้นมา
- ให้เลือกบอร์ดจากเมนู Tools -> Board ให้ตรงกับบอร์ดที่เราจะใช้เป็นตัวโปรแกรม ผมจะใช้ ET-EASYMEGA1280 ก็เลือกบอร์ดให้เป็น Arduino Mega
- สั่งอัพโหลด Sketch
ใช้บอร์ด Arduino เป็น ISP Programmer
หลังจากอัพโหลดเสร็จ บอร์ดของเราก็จะเป็น ISP Programmer แล้ว เราสามารถติดตั้ง Sketch ของเราลงบนไอซีไมโครคอนโทรลเลอร์ได้แล้ว การเชื่อมต่อไอซีกับบอร์ด Arduino ของเราก็ให้ดูตามซอร์สโค้ดของ ArduinoISP คือกรณีของผมซึ่งใช้ ET-EASYMEGA1280 ก็ให้ต่อ
- ขา 53 ของบอร์ดเข้ากับขา Reset ของไอซี (ขา 1)
- ขา 51 ของบอร์ดเข้ากับขา MOSI ของไอซี (ขา 17)
- ขา 50 ของบอร์ดเข้ากับขา MISO ของไอซี (ขา 18)
- ขา 53 ของบอร์ดเข้ากับขา SCK ของไอซี (ขา 19)
สมมติว่าเราจะทดลองติดตั้ง Sketch ชื่อ Blink จากตัวอย่างในโปรแกรม Arduino IDE ลงใน Atmega8 ก็ให้เปิด Sketch ตัวอย่างนั้นขึ้นมา
- เลือกบอร์ดเป็น Arduino NG w/Atmega8 เพราะมีไอซึ Atmega8 อยู่
- สั่ง File -> Upload using Programer หรือกด Crtl+Shift+U
เพิ่มเติม
ข้อมูลจากเว็บ Arduino เองและจากแหล่งอื่น ๆ เช่น http://www.ayarafun.com/2009/04/upload-arduino-with-avrdude-gui/ ระบุตรงกันว่าสามารถอัพโหลดโปรแกรมได้โดยไม่ต้องมีบูตโหลดเดอร์ (Bootloader) ก็ได้แต่จากการทดลองที่ทำเองมันทำไม่ได้ผล ผมทดลอง 2 แบบครับคือ
- ติดตั้งบูตโหลดเดอร์ลงใน Atmega8 ก่อน แล้วค่อยอัพโหลดโปรแกรม Blink ขึ้นไป Atmega8 ทำงานได้ตามที่คาดหวัง
- ไม่ติดตั้งบูตโหลดเดอร์ลงใน Atmega8 อัพโหลดโปรแกรม Blink ขึ้นไปเลย Atmega8 ทำงานผิดปกติ คือไฟกระพริบแต่ว่าด้วยความถี่ต่ำกว่าที่เขียนโปรแกรมมาก
วิธีการติดตั้งบูตโหลดเดอร์
หลังจากที่ติดตั้งโปรแกรม ArduinoISP บนบอร์ด ET-EASYMEGA1280 แล้ว ต่อวงจรเพื่อติดตั้งบูตโหลดเดอร์เหมือนกับการอัพโหลดโปรแกรมเข้า Atmega8 ตามรูปข้างบนนั่นแหละ
หลังจากเลือกบอร์ดให้เป็น Arduino NG w/ Atmega8 (เพราะผมใช้ Atmega8) จากเมนู Tools -> Board แล้วก็เลือกตัวโปรแกรมเมอร์ให้เป็น Arduino as ISP จากเมนู Tools -> Programmer
เมื่อเสร็จก็สั่งติดตั้งบูตโหลดเดอร์ลงใน Atmega8 ด้วย Tools -> Burn Bootloader ก็เสร็จเรียบร้อยครับ หลังจากนี้จะติดตั้งโปรแกรมอะไรก็ทำได้เลย
แหล่งข้อมูล
http://arduino.cc/en/Tutorial/ArduinoISP
http://arduino.cc/en/Hacking/PinMapping
http://arduino.cc/en/Tutorial/ArduinoToBreadboard