Arduino-Hacking

ไอยาราฟันส์ เผยต้นแบบ bootloader เวอร์่ชั่น USB สำหรับ arduino

By April 11, 2009 January 30th, 2011 19 Comments

ยุคนี้เป็นคอมพิวเตอร์รุ่นที่สาม หรือ รุ่นที่สี่ ไม่แน่ใจ ตอนนี้เราสามารถพกพาคอมพิวเตอร์ความเร็วสูงไปไหนก้อได้ ยุคต่อไป เราคงใส่กระเป๋าตังได้แล้ว ด้วยกระแส ยุคที่เครื่อง?โน๊ตบุ๊ต ครองเมือง ทุกอย่างเล็กลง เพื่อให้เหมาะกับการพกพา?เลยทำให้ตัด?พอร์ตที่ไม่ได้ใช้งานออกไปเรื่อย?พอร์ตสือสาร?อย่าง?serial กับ pararell เลยโดนตัดไป แรกๆ เนื่องจากการเข้ามาของ USBถ้าตอนนี้ ใครมีต้องรีบเก็บไว้เลยนะครับ Retro ดี เผื่อจะได้แต่งบ้านได้ 😀

ตอนนี้เวลาจะ upload ไฟล์ หรือ การเบิร์นโปรแกรม ด้วยไมโครฯ อาจจะยุ่งยากขึ้นไปอีก

การเขียนโปรแกรม พัฒนาโปรแกรมบนบอร์ดไมโครคอนโทรลเลอร์มักจะใช้ พอร์ทสื่อสาร อย่าง serial port? เนื่องจากความง่าย เข้าถึงคอมพิวเตอร์ได้เลย อย่าง arduino จะ upload โปรแกรม จะผ่าน port serial หรือจะให้ดูดี จะใส่ไอชี usb 2 serial ไว้บนบอร์ด แต่จริงก้อยังเป็น serial ไม่ได้เป็น usb จริงๆครับ? ก้อเลยเป็นที่มาของโครงการใหม่ เพื่อให้ arduino สามารถ upload โปรแกรมผ่าน usb ได้

รูปบอร์ด arduinoS3v3 แบบ upgrade แล้ว

ประโยชน์ที่คิดว่าน่าจะได้รับ

การใช้ usb จะได้ประโยชน์หลายทาง อย่างแรกๆ เราจะได้ไฟเลี้ยง 5? โวลต์นำไปใช้งานต่อได้เลย ไม่ซื้อ adaptor (จะงกกันไปถึงไหน) และอีกอย่าง ลดความยุ่งยาก เรื่อง ?serial to usb มาใช้กับเครื่องคอมเราอีก ก้อออกแนวงก อยู่ดี และ ก้อความเร็วในการสือสารข้อมูล ความเร็วสูงมาก ไมโครฯ ได้ต่อ ยูเอสบี จะเข้าขั้นเทพแน่นอน

แล้วเราจะใช้?usb บนไมโครฯ ได้อย่างไงล่ะ?ดูเหมือนอะไรก้อดูดี แต่มีข่าวร้ายครับ AVR?Mega รุ่นที่มีขาย ตัว hardware หรือ ตัว chip ไม่ได้ มีโมดุล USB มาด้วย อยากได้ต้องสั่งเข้ามา แต่ว่ายังมีทางนะครับ เมื่อ hardware ไม่?support?ก้อเขียน software มาใช้งาน USB ขึ้นมาเองเลย ซึ่งเป็นอีกโปเจค open source อีกโด่งดัง ชื่อว่า LIB-AvrUSB

LIB-AvrUSB เป็น Software-USB? ที่มีคนสนใจนำประยุกต์ใช้หลากหลาย ก้อทำให้ชิปตัวล่ะ 50 บาท ใช้งาน usb ได้ ใครจะไม่สนล่ะ ตัว software – usb อาจจะไม่ได้รวดเร็วเหมือน usb จริง ความเร็วที่มันทำได้แค่ 1.0 MHz เทียบกับความเร็วของพอร์ต USB v1.0 ตัวเก่า ยังได้ 12.0? MHz

โดยเครื่องโปรแกรมแบบยูเอสบีแบบราคาถูกๆ?ที่ใช้โปรแกรม Lib-AVRUSB คือ??USBasp ใครอยากได้เครื่องโปรแกรมถูกๆ ลองเข้าไปดู ส่วน?bootloader ก้อพัฒนามาจาก Usbasp ดังนั้น เหมือนเข้าโหมด loader ก้อจะใช้งานเหมือนเครื่องโปรแกรม usbasp เลย ดังตัวอย่างในโปรเจค ?metaboard

รูปจาก?http://metalab.at/wiki/Metaboard

เริ่มลุยกันเลยดีกว่า

มาดูส่วนของ software ของเครื่องโปรแกรม Usbasp กันก่อนครับ จะเป็นเครื่องโปรแกรม หรือ ตัว bootloader ส่วนนี้จะเหมือนกัน ซึ่งประกอบไปด้วย

– ?ส่วนไดร์เวอร์ ยูเอสบีคอมพิวเตอร์ ชื่อ??LibUSB

– ?ส่วน firmware บนบอร์ด?USBasp-Loader หรือ?http://metalab.at/wiki/Metaboard

มาในการทดลองนี้ จะลองอะไรง่ายๆ ก่อนทำบอร์ดทดลองง่าย เพื่อจะลอง?bootloader แบบใหม่?เพื่อเอามาใช้กับ arduino

ขั้นตอนการเตรียมอุปกรณ์

เตรียมส่วน hardware บอร์ด ผมทำบอร์ดเพิ่มเติม มาใช้กับบอร์ด arduino ชุดเดิม โดยดูจากวงจรข้างบน จะมีส่วนของ USB เพิ่ม

ส่วนบอร์ดที่ใส่เพิ่มไป ก้อ usb shield แบบบ้านๆ ครับ ตัวบอร์ดได้มาจาก ett ครับ คงจะหามาทำกันไม่ยาก ดูจากด้านบน ชัดๆ อุปกรณ์จริงๆไม่มีอะไรมากครับ zener กับ R รวมกันไม่ถึง 20 บาท

ผมหา R 68ohm ไม่มี เลยเอา R 75 ohm คงเอาไว้ limit กระแส ควรจะมีไว้ครับ และ ziner didode 3.6v ไม่มี เอา 3.3v ใส่แทน ก้อยังทำงานได้

ส่วนด้านล่าง ใช้เทคโนโลยี R แปะๆ

มาส่วนของ firmware bootloader บ้างนะครับ?เข้าไปที่นี้ครับ http://www.obdev.at/products/avrusb/usbasploader.html จะมี source ของ bootloader ซึ่งทางผม ก้อเอามาใช้งานเลย

ส่วนของโปรแกรม Arduino IDE

โดย arduino นี้ผมลองกับ mega8 นะครับ จึงไฟล์ mega8_16mhz.hex ไปใส่ไว้ที่ /bootloader/usbasp/

จากนั้นมา modify arduino ต่อครับ เอา quote นี้ใส่ไปใน board.txt

ArduinoSoftUSB.name=ArduinoSoftUSB
ArduinoSoftUSB.upload.protocol=usbasp
ArduinoSoftUSB.upload.maximum_size=7168
ArduinoSoftUSB.upload.speed=19200
ArduinoSoftUSB.bootloader.low_fuses=0x9f
ArduinoSoftUSB.bootloader.high_fuses=0xc0
ArduinoSoftUSB.bootloader.path=usbasp
ArduinoSoftUSB.bootloader.file=mega8_16mhz.hex
ArduinoSoftUSB.bootloader.unlock_bits=0x3F
ArduinoSoftUSB.bootloader.lock_bits=0x2F
ArduinoSoftUSB.build.mcu=atmega8
ArduinoSoftUSB.build.f_cpu=16000000L
ArduinoSoftUSB.build.core=arduino

จากนั้น เข้าโปรแกรม เสียบสาย ISP update bootloader ตัวใหม่ ตอนนี้ arduino ท่านจะใช้ burn ผ่าน usb ได้แล้ว

วิธีการใช้งานนะครับ

จะเข้าโหมด bootloader ต้อง jump PB7 หรือ arduino pin7 ลง gnd แล้วกด reset ถ้าลง driver แล้ว จะปรากฏ อุปกรณ์ usbasp ใน device manager เลยครับ จากนั้น ท่านก้อสามารถใช้ avrdude burn โปรแกรมเข้าไปใหม่ได้ หรือใช้ arduino ก้อ upload sketch ได้เลยครับ เมื่อเสร็จ จะออกจาก bootloader เข้าสู่การทำงานปกติต่อไปครับ

การทดสอบผมว่ามัน upload เร็วดีกว่า bootloader ที่เป็น Serial เยอะมากครับในการทดสอบกับ arduino usb จะเจอปัญหา เล็กน้อย ในตอน upload sketch ถ้าต่อสาย serial อยู่ เนื่องจากบอร์ด arduino สามารถ auto-reset จาก serial ได้ ตอน upload มันจะเข้าไป reset ผ่านสาย serial ด้วย ถ้าท่านต่อสาย serial ด้วย ให้ disable โหมดนี้ออกด้วยครับ เดี่ยวมันจะตีกัน

ขอให้สนุกครับ

เสริมอีกนิดหน่อย

ตอนนี้ ถ้าใครอยากจะเอา arduino ไปลองกับ usb ?ตอนนี้มี port ตัว AvrUSB ไปใช้กับ arduino แล้ว

ต่อไป เราจะได้ใช้ USB กันง่ายๆ ถ้าใครว่างๆ ลองเอาไปทำดูครับ เดี่ยวผมจัดการงานเสร็จจะทดลองดูตามโน่นบ้าง

รูปจากเวป?http://code.rancidbacon.com/ProjectLogArduinoUSB

Project Log : Arduino USB

http://code.rancidbacon.com/ProjectLogArduinoUSB

http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1204833437

19 Comments

  • SX-TOP says:

    ทำขายเลยครับ

  • kom_AsArI says:

    อ่ะ ลองทำดูแล้ว ลง bootloader ผ่าน avrstudio โดยเซ็ต fusebit high=c0 และ low=9f ส่วน lockbit=cf เสร็จแล้ว

    แล้วก็ลงไดรเวอร์ LIB_USB แล้ว กดรีเซ็ตดู แล้วเปิดไปดูที่ device manager มันไม่มี usbasp ครับ เจอแต่ unknow device โผล่มาอันนึง แก้ยังไงครับ

  • chang says:

    @kom_AsArI

    เวลาเข้า boot loader ครับ ต้องเอา PD7 ต่อลง ground ด้วยครับ 😀

  • kom_AsArI says:

    เอาจิ้มลงกราวแล้วครับ มันเด้งขึ้นมาที่มุม not recognized (ไม่รู้ว่าพิมพ์ถูกมั้ย) เหมือนจอยเกมพังเลย 555

    ไม่รู้ว่าบอร์ดผมไม่ค่อยดีรึเปล่า มันเก่าแล้ว คงต้องไปลักบอร์ดที่รูใหม่ๆมาลองมั่ง

  • chang says:

    ลองสลับ D- D+ อีกอย่าง

    แล้วต่อ PD7 เข้า ground แล้วกด reset ด้วยนะครับ

  • kom_AsArI says:

    แง

    ไม่ได้ซะที ลองต่อตามวงจรด้านบน โดยใช้ไฟจาก usb ไม่ได้ต่อจากข้างนอก ก็ไม่ได้

    ลองเอาบอร์ดเก่า มาลองต่อ usb เพิ่มก็ผลเหมือนเดิม

    ส่วนของ bootloader ตอนโปรแกรมก็ผ่านแล้วนิ

    วัยรุ่นงง 555

    ปล ใช้ mega8L ครับ ไม่รู้ว่าจะมีผลรึเปล่า

    not recognized!!!

  • geeghazard says:

    ถ้าผมเข้าใจไม่ผิด ผมก็เจอปัญหาคล้ายๆกับคุณ kom_AsArI ครับ
    น่าจะเกิดจากการที่ไม่มี Driver ครับ
    ต้องสร้าง Driver *.inf ขึ้นมาเองครับ โดยใช้โปรแกรม LIB_USB สร้างไฟล์ .inf ขึ้นมาครับ
    – หลังจากแตกไฟล์ libusb-win32-device-bin-x.x.x.x.tar.gz
    – ให้คลิก …\bin\inf-wizard.exe
    – เลือก USBasp แล้วก็ next ครับ
    – แล้วโปรแกรมก็จะสร้าง ไฟล์.inf ให้ครับ
    – ใช้ ไฟล์.inf ตัวนี้ กับไฟล์ libusb0.sys ในการติดตั้ง Driver ครับ

    ขอใช้โชคดีครับ ^_^

  • geeghazard says:

    อ้อ… อย่าลืมเข้าไปใน Device Manager ไปลบDriverที่ลงผิดด้วยนะครับ

  • geeghazard says:

    geeghazard :
    อ้อ? อย่าลืมเข้าไปใน Device Manager ไปลบDriverที่ลงผิดด้วยนะครับ

    อีกนิดนึงครับ ระวังเรื่องอย่าลืมต่อ G จาก usbเข้าบอร์ดด้วยนะครับ

  • chang says:

    ช่วงนี้ ป่วยครับ มาตอบไม่ไหว เป็นกำลังใจท่าน kom_asari ทำสำเร็จไวๆ

  • kom_AsArI says:

    geeghazard :
    ถ้าผมเข้าใจไม่ผิด ผมก็เจอปัญหาคล้ายๆกับคุณ kom_AsArI ครับ
    น่าจะเกิดจากการที่ไม่มี Driver ครับ
    ต้องสร้าง Driver *.inf ขึ้นมาเองครับ โดยใช้โปรแกรม LIB_USB สร้างไฟล์ .inf ขึ้นมาครับ
    – หลังจากแตกไฟล์ libusb-win32-device-bin-x.x.x.x.tar.gz
    – ให้คลิก ?\bin\inf-wizard.exe
    – เลือก USBasp แล้วก็ next ครับ
    – แล้วโปรแกรมก็จะสร้าง ไฟล์.inf ให้ครับ
    – ใช้ ไฟล์.inf ตัวนี้ กับไฟล์ libusb0.sys ในการติดตั้ง Driver ครับ
    ขอใช้โชคดีครับ ^_^

    ลองทำตามดูแล้วครับ ตอนที่รัน inf-wizard มันไม่มีให้เลือก usbasp ครับ มีแค่เมาส์กับ unknow device

    ลองเลือก unknow device ดู สร้างไฟ์ inf มาควรตั้งชื่อเป็นอะไรครับ ผมลองตั้งเป็น libusb

    แล้วก็ลงไดรเวอร์โดยการ update และชี้ให้คอมมาหาไดร์เวอร์ที่โฟลเดอร์ดังกล่าว

    ผมก็คือ ยังไม่ได้เหมือนเดิม

    not recognized !!!

  • chang says:

    ลองดูตามนี้ก่อนครับ แก้ที่ล่ะปัญหา

    1. ผมว่าอย่างแรก เสียบแล้วมันต้องเจอก่อนว่า เป็น usbasp
    2. ติดตั้ง driver บน windows ครับ แต่ในกรณีที่ทำผิคพลาดไปแล้ว ควร uninstall ออกไปครับ

    เดี่ยววันหลังผมจะลองลงใหม่บ้าง จะมา review ให้ชมกัน

  • kom_AsArI says:

    คือว่า ตอนนี้ไม่ว่าจะเสียบยังไงก็ขึ้น not recognized

    ดูใน hardware device ก็ขึ้นเป็น unknow device ตลอด

    ไม่รู้ว่ามีอุปกรณ์ตัวไหนเสียรึเปล่า หรือว่าสาย usb ไม่ดีก็ไม่แน่ใจ สายที่ใช้แกะเอามาจากจอยเกมที่พังแล้ว

    เดี๋ยวลองซื้อของมาต่อใหม่ดูอีกทีครับ

  • moonoi ^^ says:

    ผมใช้ mega32 16MHz boot=7800 พอคอมไพล์ออกมาแล้วขนาดมันได้ 2090 อ่ะ แต่ก็ลองเบิร์นดู
    พอเสียบ USB แล้วก็ขึ้นเหมือนคุณ kom_AsArI เลยครับ พอลองวัดแรงดันตกคร่อม zener ได้แค่ 2.3v
    เอง ผมว่าน่าจะเป็นที่ตรงนี้นะครับ หรือว่าผมทำผิด ???

    ส่วนของคุณ kom_AsArI ใช้ mega8L ถ้าดูตามสเป็คแล้วใช้คริสตัลได้แค่ 8MHz ไม่ใช่เหรอครับ

  • chang says:

    @moonoi ^^

    เดี่ยวแป็บหนึ่งนะครับ เล่นตามไม่ทันล่ะ
    ช่วงนี้ ผมก้อดำๆ ไถๆ อยู่ครับ

  • moonoi ^^ says:

    ของผมไม่ได้เปลี่ยน fuse bit ครับ มาทราบตอนใช้ Winavr แต่ตอนนี้ผมเบิร์น bootloader ของ Arduino อยู่อ่ะครับ เลยไม่ได้ลองเล่น USB เลย

  • chang says:

    ตอนนี้ลอง avrdude gui ของเจ้านี้อยู่ใช้งานได้ดีครับ
    http://yuki-lab.jp/hw/avrdude-GUI/index.html

  • เม้ง นักประดิษฐ์ says:

    ขอบคุณมากครับ เดี๋ยวลองทำดู

Leave a Reply