Lab11. การใช้งาน Campare เพื่อสร้างสัญญาณ PWM


#include <p30f2010.h>                    //เปิดใช้งานไลบรารี dspic30F2010                  
#include<OutCompare.h>                               //เปิดใช้งานไลบรารี compare

_FOSC(CSW_FSCM_OFF & XT_PLL4);      // โหมดการทำงาน แบบ XT คริสตอล 4 - 10 MHz มี PLLx4 คือ ทวีคูณความถี่ของ clock 4 เท่า
_FWDT(WDT_OFF);                                            //ปิดการทำงาน  watchdog Timer

void delay_ms(unsigned int ms){                    //ฟังก์ชัน delay ms
                unsigned int i;
                for(; ms>0; ms--)
                for(i=0; i<728; i++)
                Nop();
}
void _ISR _OC1Interrupt(void){                        //ฟังก์ชัน compare interrupt
                _OC1IF = 0;                                          //Clear register Compare interrupt
}
void OC1_init()                     //ฟังก์ชัน compare
{
                CloseOC1();
                OpenOC1(OC_IDLE_CON&
                                                OC_TIMER2_SRC&             //ใช้ Timer2 เป็นตัวป้อน clock 
                                                OC_PWM_FAULT_PIN_DISABLE,0,0);            //เปิด PWM ที่พอร์ต OC
                                                TMR2 = 0x0000;                  //Clear Timer2
                                                T2CON = 0x8030;               //Prescale 1:256
}
int main(void)
{
                OC1_init();                            //เรียกใช้ฟังก์ชัน Compare
for(;;){                                     //For loop
PR2 = 287;                            //ต้องการความถี่ 100Hz ดังนั้น period = 0.01 ms. สามารถหาค่า PR2 ได้จาก 
SetDCOC1PWM(144);       //ต้องการ Duty cycle 50% ดังนั้น หาค่าได้ดังนี้
}
return 0;                                 //Reset ค่าเริ่มต้น
}