C Programming Tutorial

ความแตกต่างของ Arduino platform กับ microcontroller อื่นๆ

Arduino Duemilanove 2009b
บอร์ด Arduino Duemilanove 2009b : http://en.wikipedia.org/wiki/File:Arduino_Duemilanove_2009b.jpg
    ในมุมมองของผู้เล่นซึ่งเพิ่งผ่านไปไม่นาน ก็จะอธิบายแบบน้องใหม่เหมือนกัน เพราะเพิ่งเล่น microcontroller (MCU) มาไม่นาน เข้าใจสภาพตอนเป็นน้องใหม่ได้ดี เพราะไม่ค่อยรู้เรื่องเหมือนกัน ตอนเริ่มใหม่ศัพย์ต่างๆที่ผู้รู้พูดมา งงไปหมด??? ก่อนจะเข้าไปถึงว่า อะไรต่างกับอะไรอย่างไร เรามาเข้าใจความรู้พื้นฐานของการใช้ MCU กันก่อนดีกว่า เมื่อมีพื้นฐานที่แน่นแล้ว จะได้ไม่มั่วหรือเข้าใจผิด     เริ่มว่า การใช้ microcontroller ไหนก็ตาม เราก็ต้องมีบอร์ดที่เราจะใช้มัน ซึ่งบนบอร์ด จะมี MCU จะเป็นตัวใหนก็ตาม เช่น PIC, Atmel หรือ พวก MCS 51 ฯ 
    เมื่อมีบอร์ดแล้ว ก่อนที่เราจะใช้มัน เราก็ต้องเขียนโปรแกรมขึ้นมา บน PC โดยบน PC นี้ก็จะมีอุปกรณ์ ( โปรแกรม หรือที่เรียกว่า Integrate Development Environment == IDE ) ให้เราเขียน เช่นบน PIC ก็จะมีโปรแกรมที่ชื่อ MPLab ใน Atmel ก็จะมี Atmel Studio 6 (AS6) ให้เรามาใช้เพื่อพัฒนา สิ่งที่เราอยากจะให้ mcu มันทำงานให้เรา โดยเราจะเขียนโปรแกรมขึ้นมา จะด้วยภาษาอะไรก็ตาม เช่น ภาษา C, Pascal หรือ ภาษา Basic ฯ

    และ ไอ้เจ้า IDE นี้ แท้จริงแล้ว มันก็คือโปรแกรมที่เขาทำมาให้เราใช้ เพื่อความสดวก ในการพัฒนาโปรแกรม ตัวมันเองก็ถูกพัฒนามาด้วยการเขียนด้วยภาษาอะไรก็ได้ เช่น มันถูกพัฒนามาด้วย ภาษา C เช่น AS6 หรือ จะเป็นภาษา pascal ( Delphi )  หรือจะเป็น Java ( Arduino) ก็ได้ รูปร่างหน้าตามันขึ้นกับบริษัทที่เขาออกแบบมา มันไม่ได้แตกต่างไปเลย ว่ามันจะถูกพัฒนาด้วยอะไร ท้ายสุดมันก็คือตัวอำนวยความสะดวกให้เรา เพื่อให้เราได้มาซึ่ง hex file และไม่ต้องไปยึดมั่นถือมั่นว่า มันต้องเขียนด้วยภาษาอะไร ช่างหัวมัน เราไม่ต้องไปสนใจมันเลย เพราะเขาทำมาให้เราใช้ แบบที่ว่าเราบอกความแตกต่างไม่ได้ ( ในแง่ความสดวก หรือ ความเร็ว) ยกเว้นหน้าตาที่ออกมาให้เราใช้ 
ARDUINO IDE
ที่มารูป : http://en.wikipedia.org/wiki/File:Arduino_1.0_IDE,_Ubuntu_11.10.png
    เมื่อเราเขียนโปรแกรม( ซึ่งเป็นภาษาที่มนุษย์อ่านรู้เรื่อง) ขึ้นมาแล้ว เราก็ต้องเปลี่ยน ( Compile ) ให้เป็นภาษาเครื่อง เพื่อ MCU จะได้เอาไปทำงานตามที่เราต้องการ เมื่อ compile เสร็จแล้วก็จะได้โปรแกรมที่เป็น ภาษาเครื่องขึ้นมา ที่เราเรียก file ที่ได้มาว่า hex file เมื่อได้มาแล้ว เราก็ต้องเอา ภาษาเครื่อง ( hex file ) นี้ ไปบรรจุเข้าไปในหน่วยความจำของ MCU ที่อยู่บนตัวบอร์ดที่เราใช้ กรรมวิธีการเอาไปลงบน MCU อันนี้เขาเรียกว่า "burn" hex file ( คือเผามันเข้าไปใน mcu ) หรือ จะเรียกว่า "flash" hex file ( ก็คือการเอาภาษาเครื่องเข้าไปอยู่ในหน่วยความจำชนิด flash ) หรือจะเรียกว่า "program" hex file เข้าไปใน flash memory ( หมายเหตุ flash memory นี้คือหน่วยความจำที่เขาเรียกว่า nonvolatile แปลว่า เขียนเข้าไปแล้ว แม้จะปิดไฟ ข้อมูลก็จะไม่หายไปจากตัว mcu ฉนั้น เราถึงปิดเปิดเครื่อง มันก็จะยังทำหน้าที่เดิมที่เราเขียนเข้าไปให้มันทำงานให้เรา ) กรรมวิธีในการที่จะ "burn" หรือ "flash" หรือจะ "program" hex file นี้ เราก็ต้องอาศัยอุปกรณ์ hardware ที่เขาเรียกว่า programmer ซึ่งเป็นอุปกรณ์ต่างหาก ที่ผู้จะใช้ mcu ต้องจัดหามา ในวงการของ PIC อุปกรณ์ตัวนี้ก็มีอยู่หลายตัว มีเด่นๆสองสามตัว เช่น PICKit 2 และ PICKit3 เป็นต้น ในสาย Atmel ก็จะมี programmer อยู่หลายตัวมาก ทั้งที่ฟรีและไม่ฟรี ที่เด่นๆ และล่าสุด ก็เห็นจะมี AVRISP MK II และ AVR Dragon programmer นี้ ราคาของ programmer นี้จะไม่ถูกเลย ลองค้นหาสอบถามได้จาก google ก็จะเห็นราคาต่างๆ ตัว programmer นี้จะอยู่ตรงกลางระหว่าง PC ( ที่เราพัฒนาโปรแกรม) และ ตัวบอร์ดที่เราต้องการจะพัฒนาให้ทำงานตามที่เราต้องการ กล่าวคือ มันเป็นคนกลางในการจัดการบรรจุ hex file โดยไปเอามาจาก PC แล้วส่งไปยัง flash memory ของ MCU โดยจะมีสายต่อจาก 
PC(hex file)==>programmer==>MCU board 
PICKIT3 : Programmer ของค่ายไมโครชิพ สำหรับโปรแกรม Flash ลง PIC
เมื่อเราได้โปรแกรม และ compile ให้ได้เป็นภาษาเครื่องแล้ว เราก็ยังต้องอาศัย programmer โดยจะไปคว้า hex file ที่ได้จากโปรแกรม IDE ( เช่น MPLab หรือ AVR Studio/Atmel Studio ) เพื่อส่ง hex file นี้ ผ่าน programmer ไปยัง developement board ของเรา ดัง diagram ข้างบน แค่นี้ mcu มันก็จะทำงานให้เราตามที่เราต้องการ ( หากเราเขียน สั่งมันได้ถูกต้อง )นี่คือ หลักการทั่วไปของทั้ง PIC , Atmel or MCS 51 และอื่นๆ     มาถึง Arduino ต่างจาก PIC หรือตัวอื่นๆอย่างไร ก็จะเกร่นสักเล็กน้อยว่า หน่วยความจำที่เราจะบรรจุ hex file เข้าไปใน MCU นั้น มันมีอยู่สองแบบ คือ หน่วยคำจำที่โปรแกรมของเราเข้าไปอยู่ ซึ่งจะไปอยู่ส่วนล่างสุดของ หรือที่เรียกว่า program Section และอีกส่วนหนึ่งที่ปลายสุดโต่งบนสุดของ program memory นี้ ส่วนนี้มันจะทำหน้าที่พิเศษ ที่เขาเรียกว่า bootloader Section ในส่วนนี้ มันเป็นที่อยู่ของ โปรแกรมพิเศษที่เรียกว่า bootloader     ขอท้าวความกลับไปที่ programmer ที่ว่ามีหลายตัว ตัว programmer มันเองจะทำหน้าที่เอา hex file เข้าไปวางใน flash memory ของ mcu และที่น่าปวดหัว ก็คือ วิธีการเอา hex file ไปวางนี้ แต่ละ programmer มันก็มีวิธีการวางที่มีรายละเอียดและการส่งต่างกันไป ดังนั้น เพื่อให้ง่ายขึ้น เขาจึงพัฒนา bootloader program ขึ้นมา ซึ่งจะทำให้การบรรจุ hex file เข้า MCU ได้ง่ายขึ้น bootloader คืออะไร มันคือโปรแกรมซึ่งส่วนใหญ่ไม่ใหญ่โตมากนัก ที่ทำหน้าที่ทันทีที่เปิดเครื่อง http://www.cs.tau.ac.il/telux/lin-club_files/linux-boot/slide0002.htm http://www.engineersgarage.com/tutorials/bootloader-how-to-program-use-bootloader เมื่อ mcu ที่มีโปรแกรมชนิดที่เขาเรียกว่า bootloader แล้ว เราก็สามารถติดต่อกับ MCU โดยไม่ต้องอาศัย programmer เลย เราสามารถติดต่อจาก PC โดยใช้ผ่าน serial communication เข้าไปยัง MCU เลย     สรุปย่อๆได้ว่า พอเรามี bootloader บรรจุเข้าไปใน MCU ของเราแล้ว เราจะสามารถ "burn" หรือจะ "flash" หรือจะ "program" hex file จาก PC ผ่านไปยัง MCU ได้เลย โดยไม่ต้องอาศัย programmer เลย ใช่แค่ serial communication เท่านั้น นี่คือ ลักษณะหนึ่งของบอร์ด arduino ซึ่งใช้ chip ของ Atmel กล่าวคือ ตัว MCU จะมีโปรแกรม bootloader ใส่เข้ามาให้เรียบร้อยแล้ว ( ทำให้เราประหยัดค่า programmer) 
AVR Boot Loader
ที่มารูป : http://www.scienceprog.com/usb-bootloaders-for-avr-microcontrollers/
    อีกสิ่งหนึ่งที่เป็นจุดดึงดูดให้คนหันมาใช้ arduino มากก็คือ เขาให้ library เข้ามาใช้มากมาย ทำให้สามารถพัฒนาสิ่งที่เราอยากจะทำ จะใช้ ได้ง่าย หากดูจากสิ่งที่ผู้คนพัฒนาบน arduino นั้น จะเห็นว่ามีคนคิดประดิษฐ์ทำส่งของต่างๆแยะมาก คิดว่าขีดจำกัดที่พวกเราชอบพูดกันเหลือเกิน ก็คือการที่เราขาดองค์ความรู้ของตัวเราเรื่องที่เราต้องการจะทำมากกว่า และไม่ต้องกลัวว่า arduino จะรองรับไม่ได้ ควรจะห่วงว่า ตนเองมีความรู้หรือศาสตร์ในเรื่องนั้นๆ พอที่จะพัฒนาเรื่องที่เราอยากทำได้หรือเปล่ามากกว่า มีตัวอย่างมากมายที่เขาใช้ความรู้หรือศาสตร์ต่างๆมาพัฒนาบน arduino ซึ่งองค์ความรู้ของศาสตร์นั้นๆต่างหาก ที่เราต้องศึกษา เพราะเห็นในนี้ เอะอะก็บอกว่า mcu 8 bit จะรองรับไม่ได้ ( ก็คงมีบ้าง แต่น่าจะไม่มากนัก )     ฉนั้นในระดับเราๆ หรืออย่างในระดับใน e2day นี้ อย่าห่วงว่า arduino หรือ PIC 8 bit จะรองรับไม่ได้ ในความเห็นผม พวกที่บ่นนั้นเพราะพื้นความรู้หรือศาสตร์ ที่จะเอามาพัฒนาประยุกต์ใช้ของเขาเหล่านั้น ไม่พอมากกว่า ดูได้จากผลงานที่ออกมาแสดงใน arduino มีมากมายมหาศาล และศาสตร์ที่เป็นพื้นฐานที่เขาเอามาพัฒนาของให้เราใช้หรือเล่นนั้นๆ ไม่ใช่เบาๆเลย ยกต้วอย่างเล่นๆ ครับลองไปดูโครงการอันนี้ซึ่งไม่ใช่เล่นเลย และเขาใช้ arduino มาพัฒนา และไม่เพียงแค่นั้น แถมเขาเปิดให้เราหมดเลย http://www.instructables.com/id/Girino-Fast-Arduino-Oscilloscope/step7/Oscilloscope-Triggering/ มันมีทางเลือกให้ ทั้ง PIC & Atmelและต้วอื่นๆ แต่ในความเห็นผม arduino เป็นการเริ่มที่ง่ายและสะดวก โดยเฉพาะน้องใหม่ที่มันจะทำให้ผู้เริ่ม ได้ลุกขึ้นและเดินได้เร็วกว่าวิธีอื่น เมื่อคล่องแล้ว จะกลับมาดูว่าการลุกนั่ง เดินหรือวิ่งนั้น มันมีวิธีการกรรมวิธีหรือที่มาทีไปอย่างไรภายหล้ง ก็ย่อมได้ เห็นรูป pic เลียนแบบ Arduino แสดงว่า มันคงดีพอสมควร ทำให้นึกถึงประโยคที่เขาว่า
Imitation is the sincerest form of flattery
http://www.phrases.org.uk/meanings/imitation-is-the-sincerest-form-of-flattery.html แปลเป็นไทยน่าจะได้ว่า "การเลียนลอกแบบเป็นการแสดงความซูฮกกันแบบสุดๆเลย" ( ถึงได้เลียนแบบไง )     สรุปว่า Arduino คือ การเอา Atmel chip คือต้ว Atmega 168/328 มาบรรจุ bootloader ซึ่งทำให้การ burn หรือ flash หรือจะ program ภาษาเครื่อง (hex file ) ง่ายขึ้น ยิ่งไปกว่านั้น ยังมีสิ่งอำนวยความสดวก ในเรื่อง library ให้ใช้มากมาย มีคนทำและเอามาเปิดให้เราได้ศึกษา ลอก ก๊อป หรือให้เอาไปใช้อย่างกว้างขวาง
AVR + Boot Loader = Arduino
หวังว่า คงพอจะทำให้เข้าใจดีขึ้นและมีประโยชน์บ้าง
เครดิต Samira

รายการหน้าเว็บย่อย

Comments