Topic 1: การต่อวงจร Microcontroller และการเขียนโปรแกรมควบคุมเบื้องต้น


  • ในปฏิบัติการแรกนี้นักศึกษาจะได้ทดลองต่อวงจรไมโครคอนโทรเลอร์อย่างง่ายโดยใช้ชิพไมโครคอนโทรเลอร์ตระกูล PIC หมายเลข 16F886 เป็นกรณีศึกษา จุดประสงค์คือให้นักศึกษาเข้าใจองค์ประกอบพื้นฐานของวงจรสมองกลฝังตัว
  • นอกจากการต่อวงจรแล้วนักศึกษาจะได้ทดลองเขียนโปรแกรมภาษา C ในการควบคุมการทำงานของวงจรในเบื้องต้นด้วย
  • ขั้นตอนการติดตั้งโปรแกรมที่จำเป็น
  • Lab1 Summary

LAB 1.1: ต่อวงจรไมโครคอนโทรเลอร์ และทดสอบการทำงาน

ขอให้นักศึกษาต่อวงจรไมโครคอนโทรเลอร์ตามแบบต่อไปนี้

Schematic PIC16F886

ขั้นตอนการต่อ

  1. ขอให้ตรวจสอบว่ากลุ่มตนมีอุปกรณ์ครบตามรายการที่รวบรวมไว้ในหัวข้อ “อุปกรณ์ที่ใช้” ด้านล่าง
  2. อ่านหัวข้อ “คำแนะนำการต่อวงจร” ให้ดี
  3. เมื่อต่อวงจรเสร็จแล้วลองเสียบสาย USB แล้วดูว่าไฟ LED D3 ซึ่งบ่งบอกว่ามีไฟเข้านั้นติดหรือไม่ หากไม่ติดแสดงว่าน่าจะมีการลัดวงจรเกิดขึ้น หรือบอร์ดยังไม่ได้รับไฟ
  4. ให้นำ PIC ของกลุ่มตนไปอัดโปรแกรมทดสอบชื่อ
    hello world.hex
    โดยวิธีการอัดโปรแกรมให้ดูจากหน้า “วิธีเขียนโปรแกรมลง PIC โดยใช้ PIC Burner
  5. ทดสอบการทำงานของระบบ ให้สังเกตุการทำงานของโปรแกรมที่อัดลงไปในข้อ 4 นักศึกษาควรเห็นไฟ LED ดวงหนึ่งบนวงจรกระพริบทุก 1 วินาที
  6. เปิดโปรแกรม firmware downloader และเปิด port serial ของตัว USB2Serial ขึ้นมา หากสำเร็จควรเห็นข้อความ “Hello world” ปรากฏขึ้นมาดังภาพ การจะเปิดพอร์ทได้นั้นต้องทราบหมายเลข COM พอร์ทก่อน ซึ่งแต่ละเครื่องจะมีหมายเลขนี้ต่างกันออกไป ให้เข้าไปดูได้ที่ Device Manager ของ Windows ภายใต้หัวข้อ Port
  7. มาถึงขั้นนี้แสดงว่าวงจรของนักศึกษาใช้งานได้แล้ว ขั้นตอนสุดท้ายคือการทำความเข้าใจเกี่ยวกับ Bootloader ซึ่งเป็นวิธีที่จำทำให้นักศึกษาสามารถอัดโปรแกรมลง PIC ได้โดยไม่ต้องใช้เครื่อง Burner ซึ่งจะสะดวกในการทำงานกว่ามาก รายละเอียดของ Bootloader และวิธีการติดตั้งให้ศึกษาตามที่อธิบายไว้ในหัวข้อ “แนะนำหลักการ Bootloader และวิธีการติดตั้ง

อุปกรณ์ที่ใช้

  1. โปรโตบอร์ด – ใช้ต่อวงจร
  2. USB2Serial converter – ใช้เชื่อมต่อวงจรเข้ากับคอมพิวเตอร์ เพื่อการสื่อสาร และใช้เป็นแหล่งพลังงานสำหรับวงจร (ไฟที่ได้จาก USB นี้ไม่ควรนำไปขับมอร์เตอร์หรืออุปกรณ์อื่นที่กินไฟเกิน 500 mA)
  3. สาย USB
  4. อุปกรณ์อิเล็กทรอนิกส์ในวงจร
    1. PIC16F886 – ไมโครคอนโทรเลอร์ ทำหน้าที่เป็นสมองกลของวงจร
    2. SW1 – ปุ่มกด
    3. D1, D2 – ไฟ LED ใช้แสดงสถานะต่างๆ
    4. D3 – ไฟ LED ใช้แสดงสถานะว่ามีไฟเข้าวงจรหรือไม่
    5. R1,R2,R6 – ตัวต้านทาน 1 K Ohm ใช้จำกัดกระแสที่ไหลผ่าน LED
    6. R3 – ตัวต้านทาน 3.3 K Ohm ใช้ดึงสถานะของขา RB7 บน PIC ให้เป็น High ในขณะที่ไม่ได้กดปุ่ม
    7. R4,R5 – ตัวต้านทาน 3.3 K Ohm ใช้ดึงสถานะของขา SDA, SCL บน PIC ให้เป็น High ในขณะที่ไม่มีการส่งข้อมูล I2C
    8. C1 – ตัวเก็บประจุ 0.1 uF ใช้กำจัดสัญญาณรบกวนในระบบไฟก่อนเข้า PIC
    9. C2 – ตัวเก็บประจุ 100 uF ใช้ทำให้ไฟในวงจรนิ่ง

คำแนะนำการต่อวงจร

ขอให้ต่อวงจรอย่างระมัดระวัง นักศึกษาจำนวนมากเสียเวลาในการแก้ไขวงจรเพราะต่อไม่ตรงตามแบบตั้งแต่แรก ต่อไปนี้เป็นข้อแนะนำที่อาจช่วยให้ทำงานได้ดีขึ้น

  • ใช้สายไฟให้น้อยที่สุด – อุปกรณ์บางอย่างที่ปักลงไปที่ขา PIC ได้โดยตรงโดยไม่ต้องใช้สายได้แก่ C1 ส่วนประกอบอื่นๆ ก็มักมีขาอุปกรณ์อย่างน้อย 1 ด้านที่ต่อเข้ากับขา PIC ได้โดยตรง
  • เลือกความยาวสายให้เหมาะสม – การใช้สายยาวเกินไปมักทำให้บอร์ดยุ่งเหยิง สายหลุดง่าย จัดเก็บลำบาก

breadboard-wiring-examples

  • อุปกรณ์บางชนิดมีขั้ว ต้องต่อให้ถูกด้าน – เช่น LED, C2 (100 uF), PIC, SW1 วิธีดูขั้วของอุปกรณ์โดยทั่วไปขาที่ยาวกว่าจะเป็นขาบวก ถ้าดูจากความยาวขาไม่ได้ก็ต้องอ้างอิงคู่มือ
  • ขา PIC จะเริ่มนับจากด้านบนซ้าย วนไปด้านล่างแล้วย้อนกลับขึ้นมาดังแสดงให้ภาพ PIC ด้านที่มีรอยบากตรงกลางคือด้านบน (ขอให้เทียบกับขาใน Schematic ให้ดี เพราะใน Schematic การนับขามักต่างกันไป)
    16f886 PIN overview
  • ปุ่มกด SW1 นั้นมี 4 ขา ซึ่งมีการเชื่อมต่อภายในดังนี้
    tact switch connection
  • กลุ่มใดที่ได้รับ protoboard รุ่น Wish 104  สายสัญญาณไฟและ Ground บน proto board ที่วิ่งอยู่บนล่างจะแยกเป็นฝั่งซ้ายและขวา (สังเกตุดูมีตัวอักษร W ขั้นกลาง) ถ้าจะใช้งานทั้งสองฝั่งต้องมีสายเชื่อมเสมอ (ข้อนี้พลาดกันบ่อย)
  • การต่อสายสัญญาณสื่อสาร UART นั้น เนื่องจากเป็นการต่อแบบ point-to-piont ดังนั้นขา Tx บนฝั่ง PIC จะต้องต่อเข้ากับขา Rx บนฝั่ง USB2Serial เพื่อให้ข้อมูลที่ออกจาก PIC ไปเข้าที่ฝั่งรับของวงจร USB2Serial ขา Rx บน PIC ก็ต้องไปเข้าขา Tx ของ USB2Serial ด้วยเหตุผลเดียวกัน

LAB 1.2 เขียนโปรแกรมควบคุม I/O พื้นฐาน

ให้นักศึกษาเขียนโปรแกรม PIC-C เพื่อควบคุมการทำงานของ GoGo Board ดังต่อไปนี้

  1. ควบคุม User LED  ให้กระพริบ ทุก 1 วินาที และส่งคำว่า hello world มายังคอมพิวเตอร์
  2. ให้เปลี่ยนพฤติกรรมจากข้อ 1 เพื่อให้ควบคุม User LED ให้ติดเฉพาะเวลาที่ผู้ใช้กดปุ่ม Run ค้างไว้ (กดติด ปล่อยดับ)ใช้คำสั่งinput(PIN_NAME);
    ในการอ่านค่าสถานะของขาไมโครคอนโทรเลอร์ที่ต้องการ  นอกจากนั้นoutput_high(PIN_NAME); และ
    output_low(PIN_NAME);
    จะกำหนดสถานะของขาให้เป็น high ให้ Low ตามลำดับ
  3. ต่อไปให้เขียนโปรแกรมนับจำนวนครั้งที่กดปุ่ม และพิมพ์ค่าออกมา –
    ข้อนี้ให้ระวังการนับและพิมพ์ค่ารัวเมื่อกดปุ่มค้าง  การแก้ไขปัญหานี้จะต้องเขียนโปรแกรมเพื่อให้นับค่าแค่ครั้งเดียวต่อการกดหนึ่งครั้ง เช่น หลังจากที่พบว่ามีการกดปุ่ม ก็เขียนโปรแกรมให้รอจนกว่าจะปล่อยปุ่มถึงจะทำงานต่อ เป็นต้น

คำแนะนำ

– โหลดตัวอย่างโปรแกรม helloworld.c

แนะนำการใช้ PIC-C