จากตอนที่แล้ว เราก้อได้แปลงกายเจ้า UCON-UART [FT232RL] เป็นเครื่องเบิร์นได้แล้ว ในบทความตอนนี้ เราจะเอาเครื่องเบิร์น FTDI ฺBitbang กับ avrdude-gui ใช้งาน burn bootloader กันดีกว่าครับ ความจริงเราสามารถปรับแต่งให้ Arduino IDE เบิร์น bootloader ได้ ซึ่งสนใจก้อเข้าไปอ่านตามลิงค์นี้ “How to run this “FTDI Bitbang method” with the Arduino-IDE” ที่ผมทดลองมายังไม่สะดวกมากนักครับ เพราะว่าอย่างหนึ่ง คือ ตัวโปรแกรม avrdude จะต้องปรับแต่ง เพื่อให้ใช้กับ bitbang ได้ ซึ่งมันยังไม่ compatible กับ arduino-0018 ครับ ลักษณะโปรเจค open-source ก้ออย่างงี้ล่ะครับ ถ้ามันยังไม่นิยมมาก ก้อไม่ค่อยเป็นมาตราฐาน และบ่อยครั้งมันก้อปิดตัวเองไปช้าๆ ครับ ตอนนี้เราก้อใช้กับมันแล้วทำความเข้าใจกันไปครับ
การเบิร์น bootloader ถ้าเราใช้ Arduino IDE ขั้นตอนจะไม่ยุ่งยากมากครับ กด [Burn Bootloader] จากเมนูอย่างเดียว ก้อจบ แต่พอเราใส่เครื่องเบิร์นไปใน IDE ไม่ได้ เลยลำบากเลย วิธีนี้ก้อเผื่อไว้ครับ ส่วนมากเครื่องเบิร์นหรือเครื่องโปรแกรมที่ขายในไทย มันอาจจะไม่ใช้ไม่ได้กับ arduino IDE เราก้อ manual เองเลย [ใครอยากใช้ FTDI แบบไม่ manual? เข้าไปดูตามลิงค์นี้ครับ]
สำหรับในบทความนี้จะขอยึดกับ การเบิร์น Bootloader ของ ไอซี ATmega328 เป็นหลักครับ สำหรับไอซีตัวอื่น ทางท่านผู้อ่าน ต้องลองเองครับ
ขั้นตอนการเบิร์น bootloader มีสี่ขั้นตอนสั้นๆดังนี้ครับ
- Unlock
- Write Fusebit
- Burn Bootloader
- Lock
วิธีการเบิร์น bootloader
[ 0 – Zero] เตรียมความพร้อมก่อน ให้ตั้ง clock mode เป็นแบบช้า ให้ใส่ “-B 4800” เข้าไปก่อน?
** chip ใหม่ ยังไม่สามารถใช้ความเร็วสูงได้ (fast clock mode)
1. unlock Fuse-Bit
[1] กด [Chip Erase] ลบให้หมด.
[2] จากนั้นกดปุ่ม [Read] บริเวณกรอก Lockbit , ตรวจสอบว่าค่า Lockbit = 0x3F หรือป่าว
2. Write Fuse-bits
(1) เซ็ท Fusebit ตามค่าข้างล่าง (สำหรับ ATmega328)
- hfuse = DA
- lFuse = FF
- eFuse = 05
(2) คลิก [Write] เพื่อเขียน fusebit
สลับโหมดเป็น Fast Clock
ลบพารามิเตอร์? ” -B 4800″ ในช่อง command line แล้วกด read fuse-bits
ถ้าอ่านค่า fuse bits ผิคให้กลับสลับเป็นค่า slow clock อีกรอบ แล้วทำการเขียน Fuse-Bits ใหม่
3. เบิร์นไฟล์ Bootloader
[1] กดปุ่ม […] -> เลือกไฟล์? “G:\arduino\arduino-0018\hardware\bootloaders\atmega\ATmegaBOOT_168_atmega328.hex”
[2] กดปุ่ม [Erase-Write-Verify] ที่บริเวณ Flash Area
4. เซ็ท lock bit? ล๊อคไม่ให้มีการเขียนทับบริเวณ bootloader
[1] เซ็ทค่า Lock = 0F
[2] กดปุ่ม [Write] เพื่อบันทึกค่า
ที่กล่าวไปสำหรับ atmega328 แต่ถ้าใครใช้ AVR ตัวอื่น อย่าง ATmega8 และ ATmega168 ใช้ขั้นตอนแบบเดิม แต่ Fuse-bit ไม่เหมือนกันครับ ใช้ค่าดังตัวเลขข้างล่าง
สำหรับ ATmega168
- hfuse = DD
- lfuse = FF
- efuse = 00
- unlock = 3F
- lock = 0F
- bootloader file
arduino-0018\hardware\bootloaders\atmega\ATmegaBOOT_168_diecimila.hex
สำหรับ ATmega8
- hfuse = CA
- lfuse = DF
- unlock = 3F
- lock = 0F
- bootloader file
arduino-0018\arduino-0018\hardware\arduino\bootloaders\atmega8\ATmegaBOOT.hex
หลังจากนั้น ถอดสาย ICSP จากนั้นจ่ายไฟเข้าไปยังบอร์ด arduino จะได้เห็น LED13 กระพริบๆ? ตอนนี้ตัวไอซี ATmega ตัวใหม่เราได้บรรจุ Bootloader พร้อมจะนำไปใช้กับ Arduino IDE แล้วครับ