เมนู

วันศุกร์ที่ 18 กันยายน พ.ศ. 2558

ดีบัคโค๊ดใน MPLABX, Debug Code with MPLABX

           ในบทความที่แล้วเราได้ทำการเขียนโค้ดกระพริบ LED ง่ายๆแล้วใช้โปรแกรม ds30loaderGUI โปรแกรม .hex ไฟล์ลงไปในไมโครคอนโทรลเลอร์ผ่านทาง bootloader มาแล้ว คราวนี้เราจะมาใช้เครื่องมือที่เรียกว่า programmer/debugger มาทำการดีบัคโค้ดกันครับ            ตัว programmer/debugger ที่รองรับไมโครคอนโทรลเลอร์ของไมโครชิพจะมีอยู่ด้วยกันหลายตัว เริ่มต้นจากตัวเล็กที่สุดและราคาถูกที่สุดก็คือ PICkit3 ซึ่งรองรับการดีบัคแบบพื้นฐาน และเพียงพอกับการใช้งานดีบัคทั่วไป
        ถัดมาจะเป็น ICD3 ซึ่งมีความสามารถสูงกว่า PICkit3 เช่นรองรับ software breakpoint แบบ unlimited ทำให้สามารถดีบัคโค้ดที่ซับซ้อนได้ง่ายขึ้น อีกทั้งยังมีความเร็วในการโปรแกรมสูงกว่าอีกด้วย


        ตัวสุดท้ายคือ Real ICE ซึ่งก็รองรับการดีบัคทั้งหมดที่ PICkit3 และ ICD3 รองรับ แต่ความสามารถที่เหนือไปยิ่งกว่าคือ trace และ real time monitor ค่าในตัวแปรต่างๆได้แบบ real time ไม่ต้อง pause ก่อนเพื่อจะดูค่าของรีจิสเตอร์ หรือตัวแปร เหมือนอย่างที่ PICkit3 และ ICD3 ต้องทำ


หลังจากรู้จักกันแล้วว่าตัว programmer/debugger มีตัวไหนกันบ้างก็มาถึงการใช้งานเพื่อดีบัคโค้ดของเรากันแล้วครับ โดยเราจะให้โค้ดไฟกระพริบจากตัวอย่างบทความที่ผ่านมา แล้วเมื่อเรากดปุ่มดีบัค ตัว MPLABX จะโปรแกรมไฟล์ .elf/.coff ลงไปในตัวไมโครคอนโทรลเลอร์เพื่อทำหน้าที่ในการรวบรวมข้อมูลและสื่อสารกับ MPLABX ผ่านทางตัว programmer/debugger ที่เราเลือกใช้ ซึ่งในที่นี้คือ PICkit3  
                หลังจากที่เราเปิดโปรเจ็คของเราขึ้นมาแล้ว ให้ต่อ PICkit3 เข้ากับบอร์ด PIC Get Start 8 ดังรูป



จากนั้นกดปุ่มดีบัคดังแสดงในวิดีโอ MPLABX จะทำการคอมไพล์โปรเจ็คของเราอีกครั้ง แล้วจะเชื่อมต่อ กับ PICkit3 หากเป็นการเชื่อมต่อครั้งแรก อาจจะมีการอัพเดท firmware ของ PICkit3 ที่เหมาะสมสำหรับไมโครคอนโทรลเลอร์ของเรา การอัพเดทอาจใช้เวลาซัก 1 – 2 นาที อดทนรอแป็ปนึง จากนั้น MPLABX จะแจ้งว่า ไม่สามารถติดต่อกับไมโครคอนโทรลเลอร์ของเราได้ นั้นเพราะเรายังไม่ได้จ่ายไฟเลี้ยงให้กับตัวไมโครคอนโทรลเลอร์นั่นเอง  ในการทดลองครั้งนี้ผมจะใช้ PICkit3 จ่ายไฟให้กับตัวไมโครคอนโทรลเลอร์ ขั้นตอนก็ดูได้จากในวิดีโอนะครับ พอเราสามารถโปรแกรมไมโครคอนโทรลเลอร์ เราจะเห็นเมนูดีบัคแอ็คทีพขึ้นมา ซึ่งเราสามารถสั่ง RUN, Pause, Step by Step, etc. ซึ่งปุ่มคำสั่งต่างๆเหล่านี้จะใช้คู่กับการเซ็ท breakpoint ตรงตำแหน่งต่างๆที่เราต้องการให้โปรแกรมไปหยุด ร่วมกับหน้าต่าง watch ที่ใช้ดูค่าของตัวแปรต่างๆ รวมไปถึงรีจิสเตอร์ที่เราสนใจ



วันเสาร์ที่ 15 สิงหาคม พ.ศ. 2558

PIC Get Start 8 Board


      นี่คือบอร์ดทดลองที่ผมออกแบบไว้ครับ ใช้ไมโครคอนโทรลเลอร์ PIC16F1938 ซึ่งมี bootloader อยู่ภายใน สามารถโปรแกรมชิพผ่านทาง usb โดยอาศัย usb-to-serial ได้ครับ หรือถ้ามีตัวโปรแกรมเมอร์เช่น PICkit 3 ก็สามารถใช้งานได้ครับ

      ผมออกแบบให้สามารถใช้งานกับ shield ของ arduino ได้หลายๆตัวครับ เพราะเดี๋ยวนี้มี shield ให้เลือกเยอะแยะมากมายแถมยังราคาถูกกว่าทำเองซะอีกครับ ทำให้แอบอิจฉาคนที่เล่น arduino อยู่ ส่วนผมเป็นคนที่เล่น PIC อยู่ก็เลยออกแบบมาให้สามารถใช้งานกับ shield อื่นๆได้ โดยผมได้เห็นตัวอย่างมาจากบอร์ดที่ชื่อ chipino จากเว็บไซด์นี้ http://www.elproducts.com/chipino.html ซึ่งของเค้าใช้ PIC16F886 ซึ่งค่อนข้างเก่าและราคาสูง อีกทั้งขาใช้งานต่างๆยังไม่ค่อยสอดคล้องกับ arduino ทำให้ใช้กับ shield ต่างๆได้ลำบาก 

     ในตอนแรกมีความคิดที่จะใช้ PIC16F1454 มาทำเป็น usb-to-serial บนบอร์ด แต่ดูแล้วคงจะแพงและหาซื้อไม่ได้ในบ้านเรา ณ เวลานั้น ประกอบกับตัว usb-to-serial สำเร็จรูปที่หาซื้อได้ทั่วๆไปมี่ราคาถูกกว่าก็เลยออกแบบเพียงแค่มีพินเชื่อมต่อกับขา uart ออกมา ซึ่งก็สามารถใช้งานได้ดีทีเดียว

     ตัว firmware bootloader ผมใช้ของ ds30 loader free version จากเวปนี้ครับ http://picbootloader.com/ ผมได้ทดลองใช้ของเค้ามานานพอสมควรพบว่า โค้ดไซด์มีขนาดเล็กมาก  ใช้งานง่าย สะดวก เวลาเขียนโปรแกรมไม่ต้องแก้ไข linker script หรือเซ็ทค่า offset ต่างๆเลย เขียนตามปรกติก็สามารถ download ลงชิพได้เลย

    บอร์ดนี้ผมตั้งใจออกแบบมาเพื่อใช้สำหรับเรียนรู้ไมโครคอนโทรลเลอร์ของ PIC และสามารถนำไปใช้ร่วมกับ shield ของ arduino ได้ หวังว่าคงจะเป็นประโยชน์สำหรับหลายๆคนที่อย่างจะเรียนรู้การเขียนโปรแกรมกับไมโครคอนโทรลเลอร์นะครับ

                                                                  รูปที่ 1 Schematic


โหลด schematic เป็น pdf ได้จากที่นี่ครับ http://upload.freeupload2u.com/download.php?file=369PIC_Get_Start_8_rev03_01.PDF#sthash.7108SUJ4.dpuf