سلام
من این برنامه رو نوشتم تا وقتی پریود و دیوتی رو تغییر بدم تو خروجی واسم اون فرکانس ودیوتی مورد نظر واسه PWM رو تولید کنه اما تو پروتوس ازش جواب نمی گیرم
مگه برای تنظیم دیوتی و فرکانس فرمولهای ما اینا نیستن
Period = (PR2 + 1) * 4 * ( 1/xtal ) * prescaler
duty cycle = value / [ 4 * (PR2 +1 ) ]
خوب اینم برنامه می شه راهنمائی کنید
include <16F877A.h>
#FUSES HS,NOWDT,NOPUT,NOPROTECT,NODEBUG,NOBROWNOUT,NOLVP, NOCPD,NOWRT
#use delay(clock=20000000)
#include <math.h>
void main(){
long PR,period=0.0001,value,duty=0.5,k;
//Period = (PR2 + 1) * 4 * ( 1/xtal ) * prescaler
//duty cycle = value / [ 4 * (PR2 +1 ) ]
PR=period / 4*((1/20000000)*16);
PR= floor(PR);//round to low number
value=duty*(4*(PR+1));
value=ceil(value); //round to hight number
while(true){
setup_ccp1(CCP_PWM);
set_pwm1_duty(value);
setup_timer_2(T2_DIV_BY_16,PR,1);
}
}
دوستان گفتن می شه از طریق ویزارد این کار ها رو کرد اما چه جوری؟ آیا می شه مدام توی برنامه افرکانس و دیوتی رو از طریق ویزارد تغییر داد؟
با تشکر
من این برنامه رو نوشتم تا وقتی پریود و دیوتی رو تغییر بدم تو خروجی واسم اون فرکانس ودیوتی مورد نظر واسه PWM رو تولید کنه اما تو پروتوس ازش جواب نمی گیرم
مگه برای تنظیم دیوتی و فرکانس فرمولهای ما اینا نیستن
Period = (PR2 + 1) * 4 * ( 1/xtal ) * prescaler
duty cycle = value / [ 4 * (PR2 +1 ) ]
خوب اینم برنامه می شه راهنمائی کنید
include <16F877A.h>
#FUSES HS,NOWDT,NOPUT,NOPROTECT,NODEBUG,NOBROWNOUT,NOLVP, NOCPD,NOWRT
#use delay(clock=20000000)
#include <math.h>
void main(){
long PR,period=0.0001,value,duty=0.5,k;
//Period = (PR2 + 1) * 4 * ( 1/xtal ) * prescaler
//duty cycle = value / [ 4 * (PR2 +1 ) ]
PR=period / 4*((1/20000000)*16);
PR= floor(PR);//round to low number
value=duty*(4*(PR+1));
value=ceil(value); //round to hight number
while(true){
setup_ccp1(CCP_PWM);
set_pwm1_duty(value);
setup_timer_2(T2_DIV_BY_16,PR,1);
}
}
دوستان گفتن می شه از طریق ویزارد این کار ها رو کرد اما چه جوری؟ آیا می شه مدام توی برنامه افرکانس و دیوتی رو از طریق ویزارد تغییر داد؟
با تشکر
دیدگاه