ไมโครคอนโทรลเลอร์จะทำงานได้นั้นต้องมีชุดคำสั่งควบคุมการทำงานที่บรรจุภายในตัวของมัน การที่เราจะบรรจุชุดคำสั่งดังกล่าวลงภายในตัวไมโครคอนโทรลเลอร์จำเป็นต้องพึ่งเครื่องโปรแกรม แต่ CPU Arduino คือไมโครคอนโทรลเลอร์ธรรมดาตัวหนึ่งที่มีบูตโหลดเดอร์อยู่ภายในตัวของมันแล้ว บูตโหลดเดอร์นี้เป็นตัวจำการรับข้อมูลของชุดคำสั่งควบคุมการทำงาน (โปรแกรม) จากคอมพิวเตอร์เข้ามาสู่ตัวมันเองโดยไม่ต้องพึ่งเครื่องโปรแกรม ซึ่งทำให้ผู้ใช้งานสะดวกต่อการนำไปใช้งานเนื่องจากไม่ต้องมีเครื่องโปรแกรมก็สามารถใช้งานได้ ในบทความตอนนี้ขอนำเสนอวิธีการทำบูตโหลดเดอร์เข้าสู่ CPU ตัวใหม่ที่ยังไม่มีบูตโหลดเดอร์ให้กลายเป็น CPU Arduino (ที่มีบูตโหลดเดอร์พร้อมใช้งาน)
อุปกรณ์ที่ใช้ในการดำเนินการทำบูตโหลดเดอร์ในตอนนี้ประกอบด้วย
1. บอร์ด Arduino UNO R3 (ที่ใช้งานได้ปกติทั่วไป)
2. ไอซี CPU ใหม่ เบอร์ ATmega8A, ATmega168, ATmega328 (ในตอนนี้ใช้ ATmega168)
3. คริสตอล 16 MHz
4. BreadBroad (แผงวจรที่ใช้ต่อวงจร CPU ตัวใหม่)
5. Capacitor 22pF
6. Resistor 10k
7. USB to UART (TTL Level) สำหรับทดสอบการทำงานเมื่อทำเสร็จ
วงจรที่ใช้ในการทำบูตโหลดเดอร์
เนื่องจากต้องการทำบูตโหลดเดอร์โดยใช้ไฟล์ optiboot (ซึ่งมีมาให้ในโปรแกรม Arduino) เนื่องจากไฟล์บูตโหลดเดอร์ดังกล่าวนี้มีขนาดเล็กทำให้เหลือพื้นที่ใช้งานมากขึ้น(เขียนโปรแกรมใส่ได้มากขึ้น) และมีความเร็วในการอัพโหลดสูงทำให้ใช้เวลาในการอัพโหลดน้อย วิธีการเราจะต้องเพิ่มรายการเข้าไปในไฟล์ broad.txt ซึ่งเป็นโฟลเดอร์ย่อยอยู่ภายในโปรแกรม arduino
-เปิดไฟล์ broad.txt (เพื่อแทรกรายการ)
ทำการแทรกรายการของไอซี ATmega168g เข้าไปดังรูป (ในตัวอย่างจะแทรกเข้าเป็นรายการที่สอง)
############################################################## Opti168.name=[Optiboot] Arduino ATmega168 Opti168.upload.protocol=arduino Opti168.upload.maximum_size=15872 Opti168.upload.speed=115200 Opti168.bootloader.low_fuses=0xFF Opti168.bootloader.high_fuses=0xDD Opti168.bootloader.extended_fuses=0x02 Opti168.bootloader.path=optiboot Opti168.bootloader.file=optiboot_atmega168.hex Opti168.bootloader.unlock_bits=0x3F Opti168.bootloader.lock_bits=0x0F Opti168.build.mcu=atmega168 Opti168.build.f_cpu=16000000L Opti168.build.core=arduino:arduino Opti168.build.variant=arduino:standard ############################################################## Opti8.name=[Optiboot] Arduino ATmega8 Opti8.upload.protocol=arduino Opti8.upload.maximum_size=7680 Opti8.upload.speed=115200 Opti8.bootloader.low_fuses=0xbf Opti8.bootloader.high_fuses=0xdc Opti8.bootloader.path=optiboot Opti8.bootloader.file=optiboot_atmega8.hex Opti8.bootloader.unlock_bits=0x3F Opti8.bootloader.lock_bits=0x0F Opti8.build.mcu=atmega8 Opti8.build.f_cpu=16000000L Opti8.build.core=arduino:arduino Opti8.build.variant=arduino:standard ##############################################################
ขั้นตอนการทำบูตโหลดเดอร์แบ่งออกเป็น 2 ขั้นตอนคือ
1. การทำบอร์ด Arduino UNO R3 กลายเป็นบอร์ดโปรแกรม (บอร์ดเบิร์น)
2. การเบิร์นบูตโหลดเดอร์ลง CPU ตัวใหม่
ขั้นตอนการทำบอร์ด Arduino UNO R3 กลายเป็นบอร์ดโปรแกรม (บอร์ดเบิร์น) เริ่มจาก
-เปิดโปรแกรม Arduino IDE (สำหรับทำบูตโหลดเดอร์ให้กับ Atmega8 ต้องใช้เวอร์ชั่น 1.0.x เท่านั้น)
-เลือกบอร์ดเป็น Arduino Uno ดังรูป
-เลือกพอร์ตอนุกรมที่บอร์ด Arduino UNO เชื่อมต่อ มีวิธีการสังเกตุว่าเป็นพอร์ดใด สามารถทำได้ดังนี้ ในขณะที่ยังไม่เสียบสาย USB (ของบอร์ด Arduino UNO) มีรายการพอร์ตอะไรบ้าง
ทำการเสียบสาย USB ของบอร์ด Arduino UNO เข้าคอมพิวเตอร์
สังเกตุพอร์ตที่เพิ่มขึ้นมา ให้ทำการเลือกพร์ตที่เพิ่มขึ้นมานั้น
-เลือกชนิดเครื่องโปรแกรมเป็น AVRISP mkII (หากเลือกชนิดขึ้นเมื่อมีการคลิก upload โปรแกรมจะวิ่งเข้าสู่งบอร์ด Arduino ที่กำลังต่อสาย USB กับคอมพิวเตอร์อยู่)
-เปิดไฟล์ ArduinoISP
-คลิก Upload หลังจากนี้บอร์ด Arduino UNO ก็จะกลายเป็นเครื่องโปรแกรมในชื่อว่า Arduino as ISP
ขั้นตอนการเบิร์นบูตโหลดเดอร์ลง CPU ตัวใหม่ เริ่มจาก
-ต่อวงจร CPU ตัวใหม่ลง BreadBroad (หรื่อวงจรที่สร้างขึ้น)
-เชื่อมต่อสายสัญญาณระหว่างบอร์ด Arduino UNO (ที่ทำในขึ้นตอนแรก) กับวงจร CPU ใหม่โดยมีการเชื่อมต่อดังนี้
บอร์ดเบิร์น(ArduinoUNO)-->บอร์ด CPU ใหม่ที่สร้างขึ้น
D13-->D13
D12-->D12
D11-->D11
D10-->pin 1 (Reset)
และไฟเลี้ยงสำหรับวงจรใหม่ดังรูป
(รูปการเชื่อมต่อวงจรจริง)
-เปิดโปรแกรม Arduino IDE (Sketch) เลือกรายการบอร์ดเป็นบอร์ดใหม่ที่เราได้ทำการแทรกไปในตอนต้นดังรูป สำหรับ CPU ATmega8A ให้เลือก "[Optiboot] Arduino ATmega8" และกรณีใช้ CPU เบอร์ ATmega328 ให้เลือก Arduino Uno
-เสียบสาย USB (Arduini UNO) เลือกพอร์ตที่บอร์ดเชื่อมต่อ
-เลือกเครื่องโปรแกรมเป็น Arduino as ISP
-คลิกที่ Burn Bootloader
เสร็จสิ้นการทำบูตโหลดเดอร์ ตอนนี้ CPU ใหม่ก็กลายเป็น CPU Arduino ที่สามารถรับการอัพโหลดไฟล์ได้โดยตรงไม่ต้องใช้เครื่องโปรแกรมได้แล้ว
การทดสอบการใช้งาน
-ต่อ LED (ในที่นี้ต่อที่ขา D9)
-ใช้ตัวแปลง USB to UART (TTL Level) ที่มีขา DTR มาให้ดังรูป
การเชื่อมต่อเป็นดังรูป
การเชื่อมต่อระหว่างตัวแปลง USB to UART กับวงจรมีดังนี้
DTR--->Reset (ผ่าน C 0.1uF)
RXD--->TXD
TXD--->RXD
+5V--->VCC
GND--->GND
-ต่อ USB เข้าคอมพิวเตอร์
-เลือกพอร์ตที่เป็นรายการที่เพิ่มขึ้นมา
-เลือกบอร์ดเป็นบอร์ดใหม่ที่เราสร้างขึ้น ([Optiboot] Arduino ATmega168)
-เปิดไฟล์ตัวอย่าง Blink
-คลิก Upload (ในการณีที่ LED เลื่อนไปต่อขา D9 ให้ทำการเปลี่ยน int led=13; เป็น int led=9;)
สังเกตุผลที่เกิดขึ้น (เสร็จสิ้นการทดสอบวงจรใหม่)
คลิปการดำเนินการทำบูตโหลดเดอร์สำหรับ CPU ใหม่
โปรดติดตามบทความอื่น ๆ ในตอนต่อ ๆ ไป
ขอบคุณสำหรับการติดตาม
ครูประภาส สุวรรณเพชร