DIY AVR USB2Serial Converter : ทำเครื่องแปลง USB เป็น RS232 ใช้เอง

(30/05/2009)

บทความเก่าๆ ผมกล่าวถึงเรื่องการนำ DuinoThumb ตัวเก่งของเราไปใช้ในการพัฒนาโปรแกรมด้วย Arduino ไปบ้างแล้ว แต่บทความนี้ ผมจะใช้ DuinoThumb ตัวเดิมๆ นี่แหละ เพื่อแปลงร่างเป็น AVR-USB to Serial Converter !! ถ้าจะซื้อ USB to serial เพื่อใช้งานความเร็วต่ำๆ หรือใช้งาน TTL ธรรมดา หรือแนวฉุกเฉิน โครงงานนี้ ก็ทำให้ประหยัดไปได้หลายบาท และลดการเสียเวลาไปได้มากเลยทีเดียว อิอิ

ในงานนี้ พระเอกของเราก็คือบอร์ด DuinoThumb ตัวเก่ง ที่สามารถโชว์ฟอร์มแปลงร่างกันได้หลากหลายโครงงานมาแล้ว เบอร์ที่เลือกใช้ผมใช้ เบอร์เล็กสุด คือ ATmega8 และสำหรับ USB Soft library ก็เป็นของ obdev เช่นเคย โครงงานนี้เดิมถูกพัฒนาขึ้นโดย Osamu  Tamura แต่ผมต้องแก้ไข code นิดหน่อย ตรงส่วน config usb โดยปรับเปลี่ยนขาให้ D+ , D- ให้ตรงกับบอร์ด DuinoThumb เมื่อ compile ก็เป็นอันเสร็จเรียบร้อยโรงเรียนเป็นหนึ่ง ก็เสียบใช้งานได้ทันที
รายละเอียด แบบเต็มๆ รวมถึง performace ไปดูที่เจ้าของเวปเลยดีกว่า เพราะว่าบางทีมี update ใหม่ๆ ด้วย งานนี้เจ้าของเค้า opensource ครับ driver ก็ฟรี อิอิ http://www.recursion.jp/avrcdc/

[ขั้นตอนการเปลี่ยน DuinoThumb มาเป็น AVR-USB to Serial Converter]
การทำตรงนี้ ไม่ได้เป็นการใช้ DuinoThumb แบบการพัฒนา Arduino แต่เป็นลักษณะ "ยืม" บอร์ด DuinoThumb มาลง Firmware ที่เป็น USB2Serial (CDC) ดังนั้นคุณต้องเตรียมเครื่อง Burn แบบ ISP ให้เรียบร้อย แล้วยังต้องเสียบสาย ISP ไปที่บอร์ดของ DuinoThumb ให้เรียบร้อยด้วย
สำหรับโปรแกรมที่ใช้ burn มีมากมายหลากหลายเช่น AVRDude , PronyProg หรือฯลฯ จะใช้อะไรก็ได้ ค่าที่ได้คงไม่แตกต่างกัน แต่ส่วนตัวผม ผมเลือกใช้ Avr-Osp II เนื่องจากมีอยู่ในเครื่องแบบพร้อมใช้พอดี ไม่ต้องเสียเวลาหา (ณ เวลาที่เขียนต้นฉบับนี้ (- -'))

- ขั้นแรก หลังจากเสียบสาย ISP ไปที่บอร์ดแล้ว ก็เปิดโปรแกรม setup ค่าเบื้องต้นที่จำเป็น ให้เรียบร้อย
และสำหรับขั้นแรกนี้ให้เลือกไฟล์ firmware ให้ตรงกับรุ่นของตัวเอง ในที่นี้ผมใช้ DuinoThumb8 จากนั้นก็ Burn Firmware (Program) มันไปเลยครับ



- ขั้นที่ 2 setup fusebit

หลังจากที่ burn firmware จนเสร็จแล้วต่อมาก็คือต้องตั้งค่า fuse bit ให้ตรงกับเบอร์ AVR ที่ใช้ จากนั้นก็ set มันเลย !!!

** DuinoThumb 8 ใช้ High : 9F, Low : FF 
** DuinoThumb 168 ใช้ Ext: FF, High : CE, Low : FF 



- ขั้นสุดท้าย ติดตั้ง driver
    ทันทีที่ program Fuse Bit เสร็จแล้ว มันจะแจ้งว่าเจออุปกรณ์ใหม่ (หรืออาจจะแจ้งตั้งแต่ burn firmware เสร็จด้วยซ้ำไป) มันจะถามหา driver ก็ให้โหลด driver ไปตามที่ OS ที่ใช้ครับ โดยกด Continue Anyway ไปเลย !





จากนั้นลองถอดแล้วเสียบใหม่ ก็สามารถใช้งาน AVR-USB to Serial Converter แบบฉบับ DuinoThumb บอร์ดอเนกประสงค์ (ตัวพ่อ) ได้แล้วครับ  อิอิ (^_^)

[ทดลองใช้งานกับ DuinoThumb อีกตัว เพื่อทดสอบการพัฒนากับ Arduino]
หลังจากที่เรามี USB2Serial converter แล้ว สิ่งที่ทำต่อไปคือต้องทดสอบครับ !! งานนี้ผมไม่รอช้า รีบคว้า DuinoThumb อีกตัวมาทันที 
เนื่องจาก DuinoThumb นั้น ใช้ USB port เป็นตัวรับส่งข้อมูลในระหว่างการพัฒนา และปล่อยขาRX,TX ให้เป็นอิสระ ถ้าหากว่าเราต้องการตรวจข้อมูล หรือ debug เราจะต้อง หา USB2Serial มาก่อน แล้วต้องหา IC Max232 มาใช้อีก เพื่อแปลงสัญญาณ RS232 มาเป็นระดับ TTL เพื่อใช้กับ DuinoThumb ซึ่งจะวุ่นวายมาก แต่งานนี้เนื่องจาก เราใช้ DuinoThumb ทอีกตัวทำเป็น USB2Serial ซึ่งเป็นการทำงานในระดับ TTL เหมือนกัน จึงสามารถทำงานได้ทันทีไม่ต้องหาอุปกรณ์มาต่อเพิ่มเลยครับ (ทำงานกับ MCU เหมือนกันไม่ต้อง IC MAX232 แต่ถ้าจะเอาไปใช้งานอื่น ก็ควรต่อ IC MAX232 เพื่อปรับแรงดัน กับตัว USB2Serial ด้วยนะครับ)
ตัวนึงใช้เป็น USB2Serial converter อีกตัวเป็นบอร์ดพัฒนา คู่หู Duo 

ผลที่ได้หลังจากการรันโปรแกรมครับผม !!

ผมใช้ขา RX ไขว้กับ TX ระหว่าง บอร์ดทั้ง 2 ตัว แล้วรัน Arduino ทันที !! ผลที่ได้ค่อนข้างเป็นที่หน้าพอใจ กับผลงาน AVR-USB to Serial Converter ฉบับฉุกเฉิน งานนี้สำเร็จได้ด้วยดี รวมระยะเวลาทั้งสิ้นไม่ถึง 10นาที !!! ที่สำคัญใช้อุปกรณ์น้อย ไม่ต้องหาอุปกรณ์เสริม สามารถติดตัวไปพัฒนาได้ทุกที่ทุกเวลาเลยครับ สำหรับบอร์ด DuinoThumb ที่เอาไปใช้งาน USB to Serial converter เมื่อ พัฒนางานหลักๆเสร็จแล้ว ก็ไม่ต้องเอาไปดอง เพราะเราสามารถ นำไป burn ใหม่ เพื่อใช้กับงานอื่นได้อีกด้วย งานนี้คุ้มค่าจริงๆ เหมาะาสมกับภาวะเศรษฐกิจตอนนี้ดีครับ (^_^)



สรุป เปลี่ยน firmware burn ใหม่ ใช้ได้ทันที (ง่ายมั๊ยจ๊ะ) !!

จุดสำคัญ มันสามารถใช้งานได้ดีที่ความเร็ว 1200 - 19200 bps ได้เป็นอย่างดี ถ้ามากกว่านี้อาจจะมีปัญหา ให้ดูใน performance จากผู้จัดทำครับ จะได้ไม่ต้องเสียเวลา อีกเรื่องหนึ่งที่น่าสนใจคือ ผมทดลองใช้ผ่าน USB -HUB ปรากฏว่ามันเห็นอุปกรณ์ แต่ใช้งานไม่ได้ครับ แต่ถ้าใช้งานผ่าน Port USB ตรงๆ ไม่มีปัญหาเลย ตรงนี้คงต้องเสียเวลา ค้นหาสาเหตุ สักพักว่าเกิดจากอะไร กระแสไฟฟ้าไม่พอหรือไม่ (เพราะตอนนั้นมีหลายอุปกรณ์มากเสียบที่ USB-HUB) แต่เนื่องจากเวลาไม่อำนวย ถ้ามีความคืบหน้าจะมาเล่าให้ฟังต่อไปนะครับ

อ้อ...อย่าลืมว่างานนี้ทำในระดับ TTL ถ้าต้องการต่อกับ PC ต้องใช้ IC MAX232 ด้วยนะครับ แต่ถ้างาน Arduino ธรรมดา มันเป็นสัญญาณระดับ TTL อยู่แล้ว ก็ไม่ต้องต่ออะไรเพิ่มเลย เสียบ RX,TX ก็ใช้งานได้ทันที ไม่ต้องต่อGND ด้วย เพราะไฟจากUSB ที่เดียวกันอยู่แล้วครับ (^_^)

ขอบคุณครับ
เป็นหนึ่ง
หน้าเว็บย่อย (1): CDC-files-download
Comments