Arduino-Hacking

เบิร์น Bootloader ให้ Arduino ตัวใหม่ด้วย FTDI-Bitbang [ตอนที่ 2]

By July 25, 2010 May 9th, 2011 No Comments

จากตอนที่แล้ว เราก้อได้แปลงกายเจ้า 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 มีสี่ขั้นตอนสั้นๆดังนี้ครับ

  1. Unlock
  2. Write Fusebit
  3. Burn Bootloader
  4. 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 แล้วครับ

chang

ชื่อ “ช้าง” ส่วนมากเขาจะเรียกว่า “พี่ช้าง” แล้ว มีความสนใจทางเทคโนโลยีทางคอมพิวเตอร์ อิเล็กทรอนิกส์ และ หุ่นยนต์ เป็นทั้งนักคิด นักประดิษฐ์ ชอบทดลองเล่น จนเดี่ยวนี้รู้สึกว่าจะเล่นมากกว่ามืออาชีพไปสักแล้ว

Leave a Reply