Hello world I am AVR part III

Hello world I am AVR part III

    ดำเนินมาจนถึงตอนสุดท้าย ของการเริ่มต้นทักทายชาวโลกแล้วครับ หากใครยังไม่ได้อ่าน ตอนที่ 1 และ ตอนที่ 2  ขอให้กลับไปอ่านก่อนนะครับ มาถึงตอนนี้ เราจะมาว่ากันด้วยเรื่องการบรรจุ hex file ที่ได้จากกระบวนการ Compile เพื่อให้ไมโครคอนโทรลเลอร์ หรือคอมพิวเตอร์จิ๋วของเราทำงานต่อไป 

    ในส่วนของไมโครคอนโทรลเลอร์ของค่าย AVR จะมีส่วนแตกต่างจากไมโครคอนโทรลเลอร์ค่ายอื่นๆ ในเรื่องของ Fuse bit (อ่านเพิ่มเติม ที่นี่) ซึ่งในขั้นตอนการทำ Fuse bit นั้นเราจะทำเฉพาะครั้งแรกครั้งเดียว หรือเมื่อมีการเปลี่ยนแปลงแหล่งกำเนิดสัญญาณนาฬิกา และจะต้องเช็คจากคู่มือของโปรแกรมที่มาพร้อมกับเครื่องโปรแกรมนั้นๆ ด้วย ว่ามีการกำหนดค่าเป็นอย่างไร บางครั้งค่า default ที่มากับโปรแกรมเหล่านั้น อาจทำให้การโปรแกรมมีปัญหาได้ ทางที่ดี ศึกษาจากคู่มือของโปรแกรมนั้นๆ ดีที่สุด 

    ในส่วนของการโปรแกรม บางครั้งเรามักได้ยินบางท่านเรียกว่า การเบิร์น นั้น มีเรื่องที่ต้องทราบก็คือ ที่ตัวไอซีไมโครคอนโทรลเลอร์จะมีขา ที่ไว้สำหรับทำการอัด hex file เข้าผ่านทางนั้น ซึ่งเมื่อย้อนกลับไปดูที่ Figuer 1.1  Pinout Atmega48/88/168 ในคู่มือ

    จะเห็นว่า ขาที่เขียนว่า MOSI , MISO , SCK นั่นแหละทำหน้าที่ในการอัดข้อมูลลงที่ไมโครคอนโทรลเลอร์ หน้าที่ของเราก็คือ ทำให้ connector ที่อยู่ที่เครื่องโปรแกรมตรงกับขาเหล่านี้ ส่วนตำแหน่งของ connector ของเครื่องโปรแกรม เราสามารถเช็คได้จากคู่มือของมัน ซึ่งถ้าหากเป็นบอร์ดสำเร็จรูปแล้ว ผู้ผลิตมักจะทำช่องสำหรับโปรแกรมไว้เสมอ หน้าที่เราก็แค่เช็คให้ตรงกันระหว่างเครื่องโปรแกรม และบอร์ด AVR  แต่ถ้าเป็นบอร์ดที่ทำขึ้นมาเองก็ต้องจัดหาช่องทางสำหรับโปรแกรมไว้ด้วย เพราะเราจำเป็นต้องใช้ขาเหล่านี้บ่อยๆ  

ลองศึกษาจากเอกสารของเครื่องโปรแกรม ET-AVR ISP mkII ของค่าย ETT เำพื่อความเข้าใจเพิ่มเติมครับ 

    เมื่อต่ออุปกรณ์ จ่ายไฟให้กับอร์ดทดลองของเรา เรียบร้อยแล้ว ขั้นตอนต่อไป ก็แค่เลือกใช้โปรแกรมสำหรับเบิร์น ที่รองรับเครื่องโปรแกรมของเรา บางครั้ง IDE  ที่เราพัฒนาอยู่อาจจะรองรับขั้นตอนนี้เลย หรือบางครั้ง เราจำเป็นต้องใช้โปรแกรมเฉพาะของมัน ซึ่งนั่นก็แล้วแต่ว่า เรามีเครื่องโปรแกรมแบบไหน สำหรับผมเคยลองใช้ PROGISP(v1.7.2) กับเครื่องโปรแกรม USB ของจีน 

 

และ ET-AVR ISP mkII กับโปรแกรม STK500 ที่ติดมาพร้อมกับ Atmel Studio 6 

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

    หน้าที่ของเราคือเอาไฟล์ที่ได้จากการ Compile แล้ว ซึ่งจะเป็นไฟล์นามสกุล .hex จากตัวอย่างที่ผมได้แสดงไปในคลิปวีดีโอใน ตอนที่ 2 นั้น ไฟล์ .hex จะอยู่ที่ E:\Helloworld\Helloworld\Debug\Helloworld.hex ซึ่งชื่อไฟล์จะเหมือนกับชื่อโปรเจคเรา จากนั้น ก็เอาเข้าโปรแกรมสำหรับเบิร์นเลยครับ  ในที่นีผมจะสาธิตกับโปรแกรม STK500 ที่ติดมากับ Atmel Studio ทำหน้าที่เป็นโปรแกรม hex file ลง Flash memory 

และใช้ ET-AVR ISP mkII เป็นเครื่องโปรแกรม 

    เนื่องจาก firmware ที่อยู่ที่เครื่องโปรแกรม ET-AVR ISP mkII ของผมยังเป็นรุ่นเก่า ดังนั้นโปรแกรม Atmel Studio 6 จึงยังมองไม่เห็นเครื่องโปรแกรม (คงต้องรออัพเกรดก่อน) แต่ ผมลองแล้วว่า ผมสามารถสั่งผ่าน command line STK500.exe ได้ ดังนั้น เราจะมาทำกันแบบ command line กันก็ได้ แต่ เราจะเอา command line นี่แหละ มาผูกเข้ากับโปรแกรม Atmel Studio เริ่มจาก ไปที่ เมนู Tools --> External tools..  จะปรากฏหน้าต่้่าง External Tools ให้เราทำการเพิ่ม External tools ตามภาพ 

Title : Atmega48-Flash 

Command : C:\Program Files (x86)\Atmel\AVR Tools\STK500\Stk500.exe

Arguments: -cUSB -dATmega48 -e -if$(ItemDir)Release\$(ItemFileName).hex -pf -vf

Use Output window : checked 

    ความหมายก็คือ ผมทำการเรียก stk500.exe ที่อยู่ใน C:\Program Files (x86)\Atmel\AVR Tools\STK500\ (ถ้าเราติดตั้งไว้ที่นี่) จากนั้น ผมทำการส่ง arguments ต่อท้าย -cUSB -dATmega48 -e -if$(ItemDir)Release\$(ItemFileName).hex -pf -vf เพื่อบอกว่า ผม connect เจ้าเครื่องโปรแกรม  ET-AVR ISP mkII  ด้วย port USB แล้วต่อเข้ากับ ไมโครคอนโทรลเลอร์ ATmega48 ให้ทำการลบ flash memory ก่อน (-e parameter) จากนั้นให้ทำการโปรแกรมลงไปที่ flash (-pf) ด้วย hex file ที่ได้จากการ compile ที่อยู่ในโฟวเดอร์ Release ( โปรแกรม Atmel Studio จะสร้างให้เราเอง หากเรา build project ด้วยโหมด Release) แล้วก็ให้ verify ข้อมูลที่เขียนลงไปด้วย (-vf) ทำการบันทึก parameter ทั้งหมดด้วยการกดปุ่ม OK 

    จากนั้นเมื่อเรา Build project เรียบร้อยแล้ว (อยู่ในโหมด Release ) เราก็ทำการเบิร์นต่อเลย ด้วยการไปที่เมนู Tools คลิกเลือก เมนู Atmega48-Flash ที่เราได้สร้างไว้แล้ว (จะปรากฏขึ้นมา) ในขั้นตอนนี้ เครื่องโปรแกรม ET-AVR ISP mkII  ได้ต่ออยู่กับบอร์ดที่ผมทำขึ้นเอง โดยทำการ wiring สายสัญญาณจาก MOSI,MISO,SCK,RES,GND,VCC เข้าเรียบร้อยแล้ว เมื่อโปรแกรมเสร็จ  สังเกตหลอด LED ที่ต่อตัวต้านทานอนุกรมอยู่ที่ต่ออยู่กับขา 24 (PC1) ของ ATmega48 กระพริบติดดับเป็นจังหวะ 

ขอแสดงความยินดีด้วยครับ คุณได้ส่งสัญญาณทักทายชาวโลก ได้เรียบร้อยแล้ว ^_^