[Tutorial] วิธีการใช้งาน ArduinoISP สำหรับแก้ไข Burn Bootloader ให้ Arduino

Posted by | August 9, 2010 | Tutorial | 7 Comments

สวัสดีครับ มิตรรัก ชาว embeded และชาว arduino สำหรับตอนนี้เราจะมานำเสนอสร้างเครื่องเบิร์น กับวิธีการเบิร์น bootloader อีกแล้วครับท่าน สำหรับในบทความเนื้อหาเพื่อให้เราหาอุปกรณ์มาช่วย flash สำหรับคนที่หาเครื่องเบิร์นไม่ได้ งกไม่ยอมซื้อ ล้านแปดเหตุผล ที่จะอ้างมา ฮ่าๆ โดยเราจะใช้บอร์ด arduino นี้ล่ะ เบิร์นกันเองเลย

เรื่องของเรื่องก้อมีอยู่ว่า วันหนึ่งที่ผมเข้าไปเยี่ยมรุ่นน้อง ที่ชมรม ไม่ไกลจาก กทม เมืองฟ้าอมร ที่เต็มไปด้วย ร้านเหล้าปั่นน ขอบอกก่อนว่า ทางชมรม ก้อจะมีบอร์ด arduino ที่ทางเรา มีทั้งให้แอบแจกฟรี ทั้งซื้อมาใช้ และยืมลืม เป็นจำนวนมาก มีรุ่นน้อง มาถามทางผมว่า

รุ่นน้อง: “พี่ครับ ผมสามารถทำไอซีบนบอร์ด arduino ได้หรือป่าวครับ”

ซึ่งทางผมก้อตอบไป แบบไม่ต้องกลัวยอดขายจะตกไปว่า

CE.O: “ได้อยู่แล้ว หาไอซีมา เบิร์น boot loader เข้าไปก้อเสร็จแล้ว”

“แล้วมีเครื่องเบิร์นอะไรบ้างหรือป่าว เดี่ยวพี่ทำให้ดู “

รุ่นน้อง: “เครื่องเบิร์น ไม่หรอกครับ มีแต่บอร์ด arduino เต็มเลย O_o!!!! “

CE.O. กลุ้ม !!

ทางผมก้อเลยกลับมาคิด นี้จะซื้อเครื่องเบิร์นให้มันเก็บไว้ดีป่าวนิ!!! แต่ด้วยความงก จึงทำให้คิดได้ว่า อย่าเลย!! การกระทำแบบนั้นมันไม่ยันยืน เดี่ยวเครื่องนี้ยืมหาย ก้อต้องมีการรอคอยเครื่องเบิร์น เครื่องใหม่อีกแน่แท้ มันเป็นการแก้ไขปัญหาไม่ยันยืน สิ่งที่เราควรทำ ก้อคือให้ความรู้คู่คุณธรรม (อารมณ์ เหมือนรัฐบวม กำลังวางแผนสร้างชาติอะไรสักอย่าง)

แต่ก้อแต่อีก ผมก้อนึกได้ว่าเวปไอยาราฟันส์ (เวปยอดนิยมแห่งหนึ่ง) ก้อมีบทความตั้งเยอะ ที่เกี่ยวกับ เครื่องเบิร์นกับการแก้ไขปัญหา Bootloader ก้อน้องๆ ก้อยังไม่เข้าใจอยู่้เลย หรือว่ามันไม่อ่านกัน “ใช่ครับ” คงไม่อ่านกันเลย ฮ่าๆ อีกอย่างครับ เครื่องเบิร์นในชมรมนิ มีแต่คนยืม ถ้าช่วงไหนเป็นฤดูส่งงาน รุ่นพี่จะยืมไปทำงานส่งโปรเจค ก้อหาย หากันไม่เจออีก เอาครับ ไหนๆ ก้อมีแต่บอร์ด arduino วิธีนี้ล่ะ ดีที่สุด “ก้อเอาบอร์ด arduino นี้ล่ะ มาทำเครื่องเบิร์นสักเลย”

สำหรับวิธีนี้ ทางเจ้าของ Arduino เขาตั้งชื่อว่า AduinoISP ซึ่งเขาบรรจุไว้ใน arduino ตั่งแต่เวอร์ชั้น 0018 ไว้เลยคงจะหมดปัญหา หาไม่เจอ ไปได้ส่วนหนึ่ง สำหรับ ArduinoISP มันจะจำลองบอร์ด arduino เราเป็นเครื่องเบิร์นรุ่น STK500v1 ซึ่งจะเก่ากว่าเครื่องเบิร์นรุ่นปัจจุบันอยู่หลายช่วงครับ และความเร็วในการเบิร์น ไม่เร็วมากครับ 19200bps การเบิร์นอาจจะช้ากว่า FTDI Bitbang คงไม่เหมาะกับเอามาเป็นเครื่องเบิร์นใช้งานจริงจังนะครับ แต่ถ้าใช้งานเพื่อ burn bootloader ให้ arduino ผมว่ามันก้อช่วยประหยัดเงินดีครับ

เตรียมความพร้อม

สำหรับ “ArduinoISP” ที่ทางผมทดสอบ จะเจอ Bug อยู่นิดหน่อย เรื่องเกี่ยวกับ AVRDUDE ของเวอร์ชั่นที่เป็น Windows มันดันไม่ลองรับ เครื่องโปรแกรม STK500v1 หรือ ArduinoISP ทางผมลองหาข้อมูลจากในเน็ท ไม่เห็นมีใครเจอปัญหานี้เลย คิดว่าคงใช้แต่ mac กับ linux แต่ถ้าใครลองแล้วใช้งานได้ ก้อผ่านช่วงแก้ Bug นี้ไปได้เลย

สำหรับสิ่งที่ต้องเตรียม หรือ check ให้พร้อมก่อนนะครับ

  1. ต้องมีบอร์ด arduino หรือ freeduino จำนวน 2 บอร์ด
  2. โปรแกรม arduino IDE ต้องเป็นเวอร์ชั่น arduino-0018
  3. มีสายไฟ หรือ สาย Jumper สัก 6 เส้นกำัลังดี

วิธีการแก้ไข เราจำเป็นต้องเอา AVRDUDE ตัวใหม่ใส่เข้าไป เอาที่เป็น เวอร์ชั่น 5.4.0 ครับ ทางผมก้อเอามาจาก yuki-lab ถ้าทาง arduino ออกเวอร์ชั่นใหม่กว่า 0018 มา ปัญหานี้อาจจะแก้ไข แล้ว ก้อข้ามการแก้ไข Bug นี้ไปได้เลยครับ

จากนั้นแตกไฟล์แล้วนำไฟล์ต่างไปแทนที่ ใส่ไว้ใน ไดเรกทรอรี ของ IDE เดิมดังต่อไปนี้

  1. นำไฟล์ “avrdude.exe” ไปใส่แทนที่ไฟล์เดิมที่อยู่ใน “……\arduino-0018\arduino-0018\hardware\tools\avr\bin\..”
  2. นำไฟล์ “avrdude.conf” ไปใส่แทนที่ไฟล์เดิมที่อยู่ใน “……\arduino-0018\arduino-0018\hardware\tools\avr\etc\..”

แค่นี้ก้อเรียกได้ว่าจบสิ้นกระบวนการ แก้ BUG

ขั้นตอนการใช้งาน

วิธีการใช้ arduino เป็นบอร์ดเบิร์น bootlodar ใส่ไอซี AVR ทำง่ายดังขั้นตอนต่อไปนี้

[1]. Upload Skete ชื่อ ArduinoISP ที่มากับ arduino หาได้ใน เมนู Examples เข้าไปในบอร์ด Arduino ที่ต้องการเป็นเครื่องเบิร์น

[2]. เดินสายไฟจากบอร์ดเบิร์นมายังบอร์ดที่ต้องการเบิร์นใหม่ ดังแผนภาพข้างล่างนี้ครับ *จำง่ายสำหรับคนที่ใช้บอร์ด arduino เหมือนกัน ก้อต่อสาย D11,D12,D13 VCC และ GND ต่อเข้าด้วยกัน แต่ D10 ของบอร์ดเบิร์น ไปต่อ ขา Reset ของบอร์ดใหม่

[3] จากนั้นเลือกไอซีที่อยู่บนบอร์ด update อย่างเช่น มันถ้าจะเอาไปใช้กับบอร์ด Freeduino ที่เป็นไอซี Atmega328 ก้อให้เลือก Duemilanove w/o atmega 328


[4] จากนั้นเข้าที่เมนู เบิร์น Burn Bootloader เลือก? Arduino as AVRISP จากนั้นรอครับ เครื่องโปรแกรมจะเบิร์น Boot-loader เข้าไปในตัวไอซีตัวใหม่

  • สำหรับขั้นตอนนี้อาจจะกินเวลานานครับ การ burn ใช้ speed ต่ำมาก
  • สำหรับปัญหาที่พบในขั้นตอนนี้ โปรแกรมอาจจะบอกว่าหาเครื่องโปรแกรมไม่เจอ ก่อนโปรแกรมให้กด Reset ที่บอร์ดเบิร์น สักก่อน จึงเข้าเมนู แล้วกด Burn อีกรอบ

หลังจาก เบิร์นเสร็จ บอร์ด arduino บอร์ดใหม่ก้อพร้อมใช้งานไฟ LED13 จะกระพริบๆ และกด Reset ก้อจะกระพริบติดกัน แสดงกว่าเรา burn bootloader สำหรับแล้วครับ

สำหรับคนที่ชอบของแรงอ่านทางนี้ครับ

ผมว่าหลายคนคงบอกว่ามัน upload ช้ามากมีอะไรที่แรงกว่านี้ไหม เนื่องจาก ArduinoISP ตัวเดิมเขา set ความเร็วให้ใช้กับ 19200 มันค่อนข้างจะช้าครับ แต่ทางเจ้าของ คงจะเอาชัวส์ว่าทำงานได้ทุกเครื่อง หรือ ต้องการสร้างความแตกต่างกับเครื่องเบิร์นดีๆ ก้อไม่แน่ใจครับ

ภาพการ เดินสายไฟอีกรูป

สำหรับคนชอบความแรงนิ แนะให้ใช้ ArduinoISP อีกตัวที่ผ่านการแก้ไขมาแล้วครับ ใช้ความเร็ว 115200 ครับ ซึ่งโหลดจากลิงค์นี้เลยครับ >>>>? ArduinoISP_fast

สำหรับวิธีใช้งาน หลักก้อเหมือนขั้นตอนทั้งต้น

  • เพียงแค่ท่านต้องไปแก้ไขไฟล์ชื่อ programming.txt ซึ่งอยู่ใน “…\arduino-0018\arduino-0018\hardware\arduino”
  • เพื่อเพิ่มเครื่องเบิร์น Arduino as ISP อีกตัวที่รันความเร็ว 115200
  • หรือจะแก้ไขตัวเดิม ArduinoISP ให้ใช้ความเร็วที่ 115200 ด้วยครับ

ตัวอย่างการแก้ไขไฟล์ programming.txt เพิ่มเติมเข้าไป หรือแก้ไข ไฟล์เดิม

arduinoispfast.communication=serial
arduinoispfast.protocol=stk500v1
arduinoispfast.speed=115200

จบแล้วครับ 😀 หวังว่าบทความนี้จะเป็นประโยชน์ กับนักเล่น นักทดลอง arduino ทุกท่านนะครับ โชดดีครับ

About chang

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

  • parkpaya

    เจ๋งครับ

  • 10Logic.com

    เยี่ยมไปเลย

  • M9idea

     พี่ช้าง ETT Easy Stamp 168 (ซื้อมาเพราะเห็นแก่ความเล็กน่ารักของมาน หุหุหุหุ)
    ถ้าจะใช้เป็นตัว ISP แล้วBurn Arduino Bootloader ให้บอร์ดแบบ serial ที่ใช้ atmega8 ใช้วิธีนี้ได้เปล่าจ๊ะ

    • ได้ล่ะครับ แต่ Arduino as ISP มันช้านะครับ ใช้แก้ขัดหน้างาน เวลาหาเครื่องเบิร์นไม่เจอ ก้อพอไหวล่ะครับ
      แต่เอามาใช้เป็นเครื่องเบิร์นจริงจัง ไม่ทันกินแน่ครับ  😀

  • Banhanufo

    ATmega ในบอร์ดทั้งสองตัวยังไม่ได้ลงBootloaderใช่ไหมครับ หรือว่าตัวที่เป็น Arduino ISP ต้องลงBootloader มาก่อนแล้วหรือปล่าวครับ 

  • jkop

    แล้วตัว Atmega32 ใช้ software ตัวไหนครับ

  • jkop

    ผมลอง ATmega32 แล้วแต่ Eror ครับ