Home work
งานที่ 12
PIC16F886
ต่อวงจรไมโครคอนโทรเลอร์ และติดตั้ง Firmware
ไมโครคอนโทรเลอร์เป็น IC ที่มีองค์ประกอบของคอมพิวเตอร์ที่ค่อนข้างครบถ้วนสมบูรณ์อยู่ภายใน (CPU, RAM, ROM, ฯลฯ) และการจะทำให้ไมโครคอนโทรเลอร์ เริ่มทำงานนั้นก็ไม่ใช่เรื่องยาก อุปกรณ์อิเล็กทรอนิกส์ที่ต้องเสริมเข้าไปมีเพียงไม่กี่ชิ้นตามที่จะได้เห็นในการทดลองต่อไปนี้
ขอให้นักศึกษาต่อวงจรไมโครคอนโทรเลอร์ตามแบบต่อไปนี้
ขั้นตอนการต่อ
1.ขอให้ตรวจสอบว่ากลุ่มตนมีอุปกรณ์ครบตามรายการที่รวบรวมไว้ในหัวข้อ “อุปกรณ์ที่ใช้” ข้างต้น
2.อ่านหัวข้อ “คำแนะนำการต่อวงจร” ล่วงหน้าให้ดี
3.ทำการต่อวงจร โดยภาพต่อไปนี้แสดงตัวอย่างของวงจรที่่ต่อเสร็จแล้ว
การต่อวงจรข้างต้นใช้สายไฟมากกว่าที่จำเป็นเพื่อให้เห็นภาพได้ชัดภายใต้ข้อจำกัดของภาพสองมิติ การต่อวงจรจริงไม่จำเป็นต้องตามแบบข้างต้น เช่น ขา GND ของ LED สามารถปักลงในแถบ GND ด้านบนของโปรโตบอร์ดได้เลย เป็นต้น
4.เมื่อต่อวงจรเสร็จแล้วลองเสียบสาย USB แล้วดูว่าไฟ LED 3 ซึ่งบ่งบอกว่ามีไฟเข้านั้นติดหรือไม่ หากไม่ติดแสดงว่าน่าจะมีการลัดวงจรเกิดขึ้น หรือบอร์ดยังไม่ได้รับไฟ
โดยวิธีการอัดโปรแกรมให้ดูจากหน้า “วิธีเขียนโปรแกรมลง PIC โดยใช้ PIC Burner“
6.ทดสอบการทำงานของระบบ นักศึกษาควรเห็นไฟ LED ดวงหนึ่งบนวงจรกระพริบทุก 1 วินาที
7.ต่อวงจรเพื่อทดลองใช้ Bootloader ในการเขียน firmware ลงใน PIC แทนการใช้ PIC Burnerรายละเอียดของ Bootloader และวิธีการติดตั้งให้ศึกษาตามที่อธิบายไว้ในหัวข้อ “แนะนำหลักการ Bootloader และวิธีการติดตั้ง“การที่จะใช้ Bootloader ได้นั้นจะต้องเพิ่มวงจรเข้าไปสองส่วนคือ (1) ส่วนติดต่อสื่อสารกับคอมพิวเตอร์ ซึ่งทำโดยเชื่อมสัญญาณ Rx, Tx ของ USB to Serial เข้ากับ PIC และ (2) เพิ่มวงจรปุ่มกดเข้าไป เพราะ Bootloader จะถูกกระตุ้นให้ทำงานเมื่อกดปุ่มSchematic ของวงจร
8.ทดลองโหลด Firmware ลง PIC ผ่าน Bootloaderต่อไปนี้เป็นขั้นตอนคร่าวๆ หากต้องการรายละเอียดให้ศึกษาที่ “แนะนำหลักการ Bootloader และวิธีการติดตั้ง
8.1 เปิดโปรแกรม firmware downloader
8.2 จ่ายไฟให้กับ PIC พร้อมกับกดปุ่ม SW1 ค้างไว้ จะเห็นไฟ LED ดวงหนึ่งสว่างขึ้น และติดค้าง
8.3 ในโปรแกรม firmware downloader ให้โหลดโปรแกรม hello world.hex ที่เคยโหลดไว้
8.4 เลือกเลข serial port ของตัว usb to serial (ต้องไปดูใน device manager) แล้วกดปุ่ม download
8.5 หากสำเร็จ ให้เปิดปิดบอร์ดใหม่ และเปิด serial port ขึ้นมา (คลิกที่กล่อง Enable Terminal ในโปรแกรม Firmware Downloader) ซึ่ง นศ. ควรจะเห็นไฟ LED กระพริบ และมีข้อความ Hello World พิมพ์ออกมาบนหน้าจอคอมพิวเตอร์
8.1 เปิดโปรแกรม firmware downloader
8.2 จ่ายไฟให้กับ PIC พร้อมกับกดปุ่ม SW1 ค้างไว้ จะเห็นไฟ LED ดวงหนึ่งสว่างขึ้น และติดค้าง
8.3 ในโปรแกรม firmware downloader ให้โหลดโปรแกรม hello world.hex ที่เคยโหลดไว้
8.4 เลือกเลข serial port ของตัว usb to serial (ต้องไปดูใน device manager) แล้วกดปุ่ม download
8.5 หากสำเร็จ ให้เปิดปิดบอร์ดใหม่ และเปิด serial port ขึ้นมา (คลิกที่กล่อง Enable Terminal ในโปรแกรม Firmware Downloader) ซึ่ง นศ. ควรจะเห็นไฟ LED กระพริบ และมีข้อความ Hello World พิมพ์ออกมาบนหน้าจอคอมพิวเตอร์
เขียนโปรแกรมควบคุม I/O พื้นฐาน
ควบคุม User LED ให้กระพริบ ทุก 1 วินาที และส่งคำว่า hello world มายังคอมพิวเตอร์
// ใช้ระบุหมายเลข PIC ที่ต้องการใช้ #include <16F886.h> // กำหนดคุณสมบัติและความสามารถต่างของของ PIC ที่ต้องการเปิดหรือปิดการใช้งาน #device ADC=10 *=16 #FUSES NOWDT //No Watch Dog Timer #FUSES PUT //Power Up Timer #FUSES NOMCLR //Master Clear pin not enabled #FUSES NOPROTECT //Code not protected from reading #FUSES NOCPD //No EE protection #FUSES BROWNOUT //Brownout reset #FUSES IESO //Internal External Switch Over mode enabled #FUSES FCMEN //Fail-safe clock monitor enabled #FUSES NOLVP //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O #FUSES NODEBUG //No Debug mode for ICD #FUSES NOWRT //Program memory not write protected #FUSES BORV40 //Brownout reset at 4.0V #FUSES RESERVED //Used to set the reserved FUSE bits #FUSES INTRC_IO // กำหนดความเร็วการทำงานของ PIC โดย PIC แต่ละรุ่นจะมีความเร็วสูงสุดไม่เท่ากัน // เช่น PIC 16F886 ที่ใช้นี้หากไม่มีตัวกำหนดสัญญาณนาฬิกาภายนอกก็จะทำงานได้ // เร็วที่สุด 8 MHz #use delay(clock=8M) // เปิดใช้ port RS232 ซึ่งใช้ในการรับส่งค่าระหว่าง PIC กับคอมพิวเตอร์ #use rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7,bits=8) // ฟังก์ชันหลักของโปรแกรม void main() { int i=0; while(1) { printf("hello world - %u\r\n", i++); // พิมพ์ค่าออกมาทาง rs232 ไปยังคอมพิวเตอร์ output_toggle(PIN_B6); // สลับสถานะติดดับของขาที่ชื่อ B6 delay_ms(1000); // หน่วงเวลา 1000 ms (1 วินาที) } }
ไม่มีความคิดเห็น:
แสดงความคิดเห็น