วันอาทิตย์ที่ 11 ธันวาคม พ.ศ. 2554

Arduino จิ๋ว !! ทำเล่นเองได้

DuinoThumb : Arduino จิ๋ว !! ทำเล่นเองได้ ง่าย นิ๊ดส์ เดียว~

(update 30/05/2009)



หลังจากที่ออกแบบ PCB อเนกประสงค์ ที่เมื่อประกอบแล้ว สามารถนำ AVR ไปใช้ในโครงงานได้ ถึง 3 ประเภท เช่น
1. โครงงานที่เกี่ยวกับ AVR โดยตรง คือเอา AVR ไปพัฒนาเหมือนปกติทั่วไป
2. โครงงานที่จำลอง AVR เป็นอุปกรณ์ USB Device (AVR-USB) เช่น USB Keyboard, USB Mouse, USB to Serial Converter, USB Sensor ฯลฯ
3. โครงงานที่ใช้ AVR เป็น Arduino ซึ่งผมตั้งชื่อให้มันว่า "DuinoThumb" มาจาก (Ar)Duino + Thumb (หัวแม่มือ) นั่นเอง
วันนี้ผมจะพูดถึงเรื่องการทำ DuinoThumb เพื่อพัฒนากับโปรแกรม ในแบบฉบับ Arduino ครับ (^_^) 
ซึ่งหลังจากนี้ ผมจะเสนอวิธี และจุดต่อ Idea มากมายที่นำ DuinoThumb ไปใช้ ก็อยากจะให้คอยติดตามรับชมรับฟังนะครับ

DuinoThumb = Arduino Clone 
    DuinoThumb จะแตกต่างจาก Arduino ธรรมดา ตรงที่ "BootLoader" ครับ แรกเริ่มเดิมทีนั้น Arduino จะรับข้อมูลจาก Serial port เพื่อเอาโปรแกรมที่เขียนขึ้น ไปเขียนลงบริเวณ flash ของตัวมันเอง การกระทำเช่นนั้นจะต้องใช้ Serial Port เป็นหลัก แต่กาลเวลาต่อมาก็มีคนรวมเอา IC FTDI ทำการแปลง USB เป็น serial แล้วติดในตัว Arduino เลย ทำให้ไม่ต้องคอยหา port Serial อีกต่อไป (เพราะหลังๆ ยิ่งหาได้ยากมากขึ้น โดยเฉพาะ notebook)

    แต่การทำเช่นนั้นจะต้องมี IC FTDI ซึ่งมีราคาแพง (แพงกว่าตัว AVR เสียอีก) จึงมีคนหัวใส ที่ดัดแปลงโครงงานเครื่องโปรแกรม AVR (ที่ชื่อ USBasp) โดยเอาเฉพาะส่วน protocal USB มาเขียนใหม่ เป็น BootLoader อีกตัวหนึ่ง เพื่อใช้แทน Arduino BootlLader เดิมๆ ผลที่ได้ก็คือ ทำให้ AVR สามารถจำลองตัวเองเป็น USB Device ได้ ยิ่ง ไปกว่านั้น มันยังสามารถรับข้อมูลจาก USB เพื่อนำข้อมูลไปเขียน ณ บริเวณ พื้นที่ flash ซึ่งเหมือนกัน Arduino เดิมๆ ทุกประการ โดยเราจะเรียก BootLoader ตัวนี้ว่า USBaspLoader

สิ่ง ที่เกิดขึ้นก็คือ ตัว AVR เองนั้น เมื่อเสียบเข้ากับ PC ทาง port USB แล้วก็สามารถรับข้อมูลจาก PC ได้ทันที โดยไม่ต้องใช้ Chip FTDI แปลง USB เป็น Serial อีกต่อไป ทำให้ประหยัดทั้งเงินและค่า PCB ไปได้มาก และด้วยเหตุที่มันเป็นการดัดแปลงจากเครื่องโปรแกรมที่ชื่อ USBasp ผลที่ได้คือมันจึงสามารถติดต่อกับ Arduino เพื่อรับข้อมูลมาเขียนได้ ด้วย ข้อดีที่ตามมาคือ อุปกรณ์น้อยลง บอร์ดก็เล็กลง สามารถประดิษฐ์ หรือเพิ่มโอกาสในการไปรวมเพื่อทำผลิตภัณฑ์ได้หลากหลายมากขึ้น 

สำหรับคำว่าบอร์ดขนาดเล็กนั้น ก็จะมีขนาดประมาณ หัวแม่มือ นี่จึงเป็นที่มาของชื่อ "DuinoThumb"

และ เพราะว่าไม่ต้องหาสาย power เพราะใช้ไฟจาก USB , สาย serial RS232 ก็ไม่ต้องใช้ เพราะสามารถรับข้อมูลผ่าน USB ได้ สรุปคือเพียงเสียบ DuinoThumb เข้ากับช่อง USB ก็ช่วยลดความวุ่นวายในการพัฒนาก็ลงไปได้เยอะมากเลยทีเดียว


เริ่มประกอบบอร์ด
หัวใจหลักของงานนี้คือ มีบอร์ด PCB อเนกประสงค์ และ AVR เบอร์ ATmega8/168 แบบ SMD

(หน้าตา บอร์ดอเนกประสงค์ พระเอกของเราในงานนี้)

หลังจากนั้นก็เริ่มลงอุปกรณ์ จากเล็กๆ แบนๆ เตี้ยๆ ไปหาใหญ่ๆ สูงๆ ตามลำดับทั้งหน้าและหลัง รายละเอียดให้ดูจากหน้า PCB อเนกประสงค์ นะครับ ซึ่งเมื่อเสร็จแล้วจะได้บอร์ดที่มีรูปร่างลักษณะดังนี้

(หน้าตา บอร์ด DuinoThumb ที่ประกอบเสร็จแล้ว)
จาก นั้นเราต้องหาเครื่องโปรแกรม AVR และโปรแกรมที่ใช้ Burn (ซึ่งในที่นี้ ใช้โปรแกรม AvrOspII เป็นหลัก) แต่คุณจะใช้เครื่องอื่นๆ และโปรแกรมอื่นๆ ก็ตามสะดวก เพราะไม่ใช่ประเด็น หรือปัญหาครับ

การ ที่ AVR ธรรมดาจากโรงงาน จะกลายมาเป็น DuinoThumb ที่เก่งกาจได้นั้น เราต้อง Burn BootLoader ลงไปที่ตัวมันก่อน ซึ่ง BootLoader นั้นเราสามารถ Download มาศึกษาได้จาก http://www.obdev.at/products/vusb/usbasploader.html project นี้เป็น opensource แต่เพื่อความเป็น มาตราฐานเราใช้วิธี download มาแล้วเลือกเบอร์ที่ตรงกับเรา ในที่นี้ผมใช้ ATmega168 และ X'Tal 12Mhz เหตุที่ใช้ 12Mhz ไม่ใช้ 16Mhz เพราะโครงงานส่วนใหญ่ของ AVR-USB ที่ใช้ library ของ Obdev เดิมๆ นั้น ส่วนมากจะเป็น 12 Mhz ครับ ถ้าเราจะเปลี่ยนก็ไม่มีปัญหา แต่ต้องแก้ code ด้วย (แต่ผมใช้ 12Mhz เลยไม่มีปัญหาใดๆ ทั้งนี้ขึ้นอยู่กับแต่ละ project ด้วยนะครับ)

Burn Burn Burn และ Burn
ใน การ Burn นั้นก็ไม่มีอะไรมาก เริ่มจากเอาสาย ISP เสียบไปที่บอร์ด เปิดโปรแกรมที่ใช้ในการเบิร์น เลือก ไฟล์ .hex ที่ตรงกับเบอร์ AVR ของเรา แล้วกด burn แล้วรอ ก็เป็นอันเสร็จ การกระทำนี้ขึ้นอยู่กับแต่ละโปรแกรม
ด้วยนะครับว่าใช้โปรแกรมอะไร ซึ่งแต่ละโปรแกรมจะไม่เหมือนกัน แต่ในที่นี้ใช้โปรแกรม Avr-Osp II ครับ

ภาพหน้าจอการ burn BootLoader


1. กดปุ่ม Auto Detect เพื่อค้นหาเบอร์ MCU ที่ใช้แบบอัตโนมือ เอ๊ย อัตโนมัติ
2. กดปุ่ม Browse เพื่อค้นหา Firmware ที่ต้องการ (เลือกให้ตรงกับเบอร์ และ Xtal ของตัวเอง)
3. กดปุ่ม Program เพื่อ Burn แล้วรอสักครู่

เมื่อ burn เป็นที่เรียบร้อยแล้วต่อไปคือต้องตั้งค่า FuseBit ซึ่งต้องระวังให้มาก เพราะถ้าผิดพลาดบางที MCU จากเน่าได้
การตั้งค่าจาก Avr-Osp II นั้นง่ายมากเพียงกรอกข้อมูลแล้วกด Program ก็เสร็จทันที

การตั้งค่า FuseBit

1. เลือก Tab FustBit
2. กรอกข้อมูลที่จำเป็นตามเบอร์ MCU ในที่นี้เลือกใช้ ATmega168 จึงกรอกแบบนี้
3. กดปุ่ม Program แล้วรอจนเสร็จ

** สำหรับ AVR ATmega8 ใช้ค่า High Bit = C0, Low Bit = 9F
** สำหรับ AVR ATmega88/168 ใช้ค่า Ext = 00, High Bit = D6, Low Bit = DF


เพียงเท่านี้คุณก็สามารถได้ DuinoThumb มาใช้แล้ว !! จากนั้นก็เริ่มทดสอบกันเลย
แต่ เมื่อคุณ Burn เสร็จ อุปกรณ์ตัวนี้จะยังไม่สามารถใช้งานได้ทันที ถ้าคุณยังดันทุรังเสียบไป ก็มีแต่จะเกิด Error แบบค้นพบ Device แต่ไม่รู้จัก วันยันค่ำ
เนื่อง จาก firmware นั้นเขียนมาว่า การที่จะใช้โปรแกรม BootLoader ต้อง Jump ขา D7 ลง GND ก่อน แล้ว reset  จึงจะทำให้ PC ค้นหาอุปกรณ์ได้ ดังนั้นเราจึงต้อง Jump ขา สาย D7 ไปลง GND ให้ได้ ตามรูปนี้



จากนั้นก็กด reset ที่ตัวบอร์ด จะทำให้เครื่องค้นพบอุปกรณ์ที่ชื่อ USBasp แต่ไม่มี Driver ให้คุณทำการบอกที่อยู่ของ Driver แล้วติดตั้งมันซะก็เสร็จสิ้น
แก้ไข Arduino IDE
ที่ ผ่านมาข้างบนคือการประกอบ และการลง driver ครับ แต่ ........ แต่มันยังไม่จบแค่นั้น เพราะ Arduino เดิมๆ  มันไม่รองรับของอะไรแบบนี้ เราจึงต้องจัดการแก้ไขให้ Arduino รู้จัก DuinoThumb ก่อนครับ ด้วยการ
1. เปิดไฟล์ x:\_Path_\arduino-0015\hardware\boards.txt
2. เพิ่มบรรทัดพวกนี้เข้าไป แล้ว save ครับ
##############################################################

duinoThumb8.name=DuinoThumb8 12Mhz

duinoThumb8.upload.protocol=usbasp
duinoThumb8.upload.maximum_size=7168
duinoThumb8.upload.speed=19200

duinoThumb8.build.mcu=atmega8
duinoThumb8.build.f_cpu=12000000L
duinoThumb8.build.core=arduino

duinoThumb8.upload.disable_flushing=true

##############################################################

duinoThumb168.name=DuinoThumb168 12Mhz

duinoThumb168.upload.protocol=usbasp
duinoThumb168.upload.maximum_size=14336
duinoThumb168.upload.speed=19200

duinoThumb168.build.mcu=atmega168
duinoThumb168.build.f_cpu=12000000L
duinoThumb168.build.core=arduino

duinoThumb168.upload.disable_flushing=true

##############################################################

ทดสอบด้วยการพัฒนากับของจริง !!!
เมื่อ เราแก้ไขไฟล์ Board.txt แล้ว ก็เปิด Arduino IDE ขึ้นมาเลย ระหว่างตรวจดูว่า ขา D7 ของ DuinoThumb ได้ต่อลง GND แล้ว ให้กด Reset ที่บอร์ดเลยครับ เมื่อ Arduino IDE โหลดเสร็จแล้ว ก่อนอื่นเราต้องเลือก Board ที่เราพัฒนาให้ตรงกับบอร์ด DuinoThumb ก่อน (ดูตามรูป)

เลือกบอร์ดให้ตรงกับ DuinoThumb


- จากนั้นโหลดโปรแกรมที่ใช้ทดสอบ DuinoThumb
- compile  แล้วก็ upload มาที่ DuinoThumb
- เมื่อเสร็จแล้วจะเห็นไฟกระพริบที่บอร์ด DuinoThumb ครับ (^_^)

รายละเอียดเรื่องการเขียนโปรแกรม Arduino คงต้องศึกษาเพิ่มจากหนังสือ Arduino หรือไปที่ http://www.Arduino.cc

***สำหรับโปรแกรม, เอกสาร และไฟล์ที่จำเป็นสำหรับโครงงานนี้ สามารถดาวน์โหลดเพื่อไปศึกษาหรือทำเองได้จากหัวข้อด้านล่างนี้ครับ

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

ไม่มีความคิดเห็น: