วันอาทิตย์ที่ 20 มีนาคม พ.ศ. 2559

[Arduino #6] ลองของจริง 2 ตอน"ทำบูตโหลดเดอร์"

[Arduino #6] ลองของจริง 2 ตอน"ทำบูตโหลดเดอร์"

ไมโคร คอนโทรลเลอร์จะทำงานได้นั้นต้องมีชุดคำสั่งควบคุมการทำงานที่บรรจุภายในตัว ของมัน การที่เราจะบรรจุชุดคำสั่งดังกล่าวลงภายในตัวไมโครคอนโทรลเลอร์จำเป็นต้อง พึ่งเครื่องโปรแกรม แต่ 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;)

ไม่มีความคิดเห็น:

แสดงความคิดเห็น