https://sites.google.com/site/123microcontroller/Basic-Microcontroller-Programming/home

การตั้งค่า Oscillator Configuration Bits เพื่อสร้างสัญญาณนาฬิการะบบ 64MHz ใน PIC18F46K22

    จะขอเกริ่นนำเรื่อง Configuration bit หรือ Fuse ซะหน่อย จริงๆ ในตอนที่แล้วเรื่อง MPLAB® XC8 Getting Started Guide เราก็ได้ทำให้ดูแล้วว่าการตั้งค่า Configuration bits ทำอย่างไร อธิบายง่ายๆได้ดังนี้ 

Configuration bit เป็น bit ที่เอาไว้เซตให้ไมโครคอนโทรลเลอร์ มีพื้นฐานการทำงานแบบไหน ไม่ว่าจะเป็น โหมดของแหล่งกำเนิดสัญญาณนาฬิกาของระบบ, การทำงานของ watchdog timer, โหมด Programming และ การป้องกันการก๊อปปี้โค๊ด การตั้งค่า Configuration bit หรือ Fuse ผิด อาจจะทำให้ระบบทำงานผิดพลาด หรือ ทำงานไม่ได้เลย ก็ได้

ใน XC8 Compiler เราสามารถกำหนดค่า bit ของ configuration ได้ด้วยการใช้ pre-processing ที่ชื่อ #pragma ซึ่งมีรูปแบบดังนี้

#pragma config setting= state|value
#pragma config register= value

โดยที่ setting คือ คำที่กำหนดเป็นตัวแทนของ configuration bit เช่น WDT มาจาก Watchdog 
        state เป็นตัวอัษรที่ใช้กำหนดสถานะที่ต้องการ เช่น ON หรือ OFF 
        value คือค่าที่เป็นตัวเลข

ตัวอย่าง

#pragma config WDT = ON // เปิดการใช้งาน Watchdog timer
#pragma config WDTPS = 0x1A // ระบุค่า timer postscale value

เราสามารถเขียนให้สามารถเขียนให้เหลือสั้นๆ ได้ ด้วยการใช้ comma คั่น 

#pragma config WDT=ON, WDTPS = 0x1A
    ในตอนนี้เราจะมาทำความเข้าใจกับการตั้งค่า Configuration bits ใน MPLABX กับ PIC18F46K22 โดยเราจะมุ่งเน้นไปที่การกำหนด Configuration bits ที่เกี่ยวกับ Oscillator ที่เป็นแหล่งกำเนิดสัญญาณนาฬิกาของระบบ ซึ่ง PIC18F46K22 นั้น สามารถที่จะเลือกใช้ Oscillator ที่อยู่ภายในได้ และสามารถทำ Phase Lock Loop หรือ PLL คูณกับค่าสัญญาณนาฬิกานี้ ให้มีค่าเพิ่มขึ้นไปอีกได้ 4 เท่า ซึ่งจะสามารถทำความถี่สูงสุดของสัญญาณนาฬิกา ได้สูงถึง 64MHz กันเลยทีเดียว 

    ในที่นี้ ผมมีบอร์ดของ INEX NX-877 PLUS อยู่แล้ว ซึ่งจากการพิจารณาที่แรงดัน และตำแหน่งการวางขาของไมโครคอนโทรลเลอร์ PIC18F46K22 กับ PIC16F877 แล้วพบว่า ตำแหน่งขา เหมือนกัน และแรงดันไฟเลี้ยงที่ใช้ ก็อยู่ในระดับ 5V เหมือนกัน ดังนั้น จึงสามารถถอดเอา PIC16F877 ออก แล้วสามารถเสียบ PIC18F46K22 ได้เลย เสียแต่ว่า เราอาจจะไม่ได้ใช้ขา RA6 และ RA7 เท่านั้น หากเราเลือกใช้ Oscillator ภายใน แต่ในแง่การทดลองก็ยังไม่ใช่ปัญหาตอนนี้ 

INEX Development Board NX-877 PLUS

หมายเหตุ : สำหรับบอร์ด CP-PIC V4,ET-BASE PIC40/877 ของ ETT หรือบอร์ดอื่นๆ ที่รองรับ PIC16F877 ก็สามารถใช้ได้เหมือนกัน