سلام به همه ی دوستان عزیز :smile:
توی یه پرژه می خوام یه سیگنال مربعی با دوره ی 50 درصد وفرکانس حدود 17khz درست کنم .رفتم سراغ واحد ccp و مد کامپیر رو با حالت toggle پایه ی خروجی انتخواب کردم . متسفانه اصلا با تغییر مقدار رجیستر های مقایسه (ccpr1l ,ccpr1h) فرکانس شکل موج خروجی تغییر نمیکنه وفرکانس خروجی هم خیلی پایینه. درصورتی
که توی دیتاشیت نوشته که محتوای رجیستر شمازشی TMR و CCPR1 مدام باهم مقایسه میشن ودر صورت برابری بفرض پایه ی CCP1 تغییر وضعیت میده(toggle میشه)
بعد رفتم سراغ خود کتابخونه های خود میکروچیپ و واحد CCP رو تنظیم کردم باز هم همون جوابی رو که با حالت دستی نوشته بودم رو داد :angry:
لطفا کمک کنید چون دیگه چیزی به ذهنم نمیرسه و اصلا انتظار همچین جوابی رو نداشتم.
من روی چند تا میکرو هم تست کردم وهمشون مثل هم جواب دادن(PIC18F1220-PIC18F452-PIC18F4550) .آیا اصلا PIC توان تولید این نوع شکل موج رو با واحد CCP ومد
مقایسه در حالت toggle رو داره یانه. از همه ی اساتید تقاضا دارم که کمک کنند :biggrin:
با تشکر.
برنامه با کتابخونه ی میکروچیپ:
حالت دستی (کامپایلر MICROC):
توی یه پرژه می خوام یه سیگنال مربعی با دوره ی 50 درصد وفرکانس حدود 17khz درست کنم .رفتم سراغ واحد ccp و مد کامپیر رو با حالت toggle پایه ی خروجی انتخواب کردم . متسفانه اصلا با تغییر مقدار رجیستر های مقایسه (ccpr1l ,ccpr1h) فرکانس شکل موج خروجی تغییر نمیکنه وفرکانس خروجی هم خیلی پایینه. درصورتی
که توی دیتاشیت نوشته که محتوای رجیستر شمازشی TMR و CCPR1 مدام باهم مقایسه میشن ودر صورت برابری بفرض پایه ی CCP1 تغییر وضعیت میده(toggle میشه)
بعد رفتم سراغ خود کتابخونه های خود میکروچیپ و واحد CCP رو تنظیم کردم باز هم همون جوابی رو که با حالت دستی نوشته بودم رو داد :angry:
لطفا کمک کنید چون دیگه چیزی به ذهنم نمیرسه و اصلا انتظار همچین جوابی رو نداشتم.
من روی چند تا میکرو هم تست کردم وهمشون مثل هم جواب دادن(PIC18F1220-PIC18F452-PIC18F4550) .آیا اصلا PIC توان تولید این نوع شکل موج رو با واحد CCP ومد
مقایسه در حالت toggle رو داره یانه. از همه ی اساتید تقاضا دارم که کمک کنند :biggrin:
با تشکر.
برنامه با کتابخونه ی میکروچیپ:
کد:
/* * File: P18F452_COMP.c * Author: SAEED RAZAZZADEH * * Created on June 23, 2013, 8:54 AM */ #define _XTAL _FREQ 16000000 #define USE_OR_MASKS #include <xc.h> #include <p18f452.h> #include <plib/timers.h> #include <plib/compare.h> //#pragma config CONFIG1H = 0x22 __CONFIG(1, OSC_HS & OSCS_OFF); //#pragma config CONFIG2L = 0xF __CONFIG(2, PWRT_OFF & BOR_ON & BORV_20); //#pragma config CONFIG2H = 0xE __CONFIG(3, WDT_OFF & WDTPS_128); //#pragma config CONFIG3H = 0x0 __CONFIG(4, CCP2MUX_OFF); //#pragma config CONFIG4L = 0x81 __CONFIG(5, STVR_ON & LVP_OFF); //#pragma config CONFIG5L = 0xF __CONFIG(6, CP0_OFF & CP1_OFF & CP2_OFF & CP3_OFF); //#pragma config CONFIG5H = 0xC0 __CONFIG(7, CPB_OFF & CPD_OFF); //#pragma config CONFIG6L = 0xF __CONFIG(8, WRT0_OFF & WRT1_OFF & WRT2_OFF & WRT3_OFF); //#pragma config CONFIG6H = 0xE0 __CONFIG(9, WRTC_OFF & WRTB_OFF & WRTD_OFF); //#pragma config CONFIG7L = 0xF __CONFIG(10, EBTR0_OFF & EBTR1_OFF & EBTR2_OFF & EBTR3_OFF); //#pragma config CONFIG7H = 0x40 __CONFIG(11, EBTRB_OFF); void main(void) { unsigned int period=0x0010; TRISDbits.TRISD1=0; //---Configure timer for corresponding timer module selection for capture module--- SetTmrCCPSrc(T1_SOURCE_CCP); OpenTimer1(TIMER_INT_OFF | T1_16BIT_RW | T1_SOURCE_INT | T1_PS_1_1); //---Configure output compare --- period = 0x0101; OpenCompare1( COM_INT_OFF | COM_TOGG_MATCH , period); while(1){ PORTDbits.RD1=~PORTDbits.RD1; } }
کد:
void main() { //MCU: PIC18F1220 //CCP MODE-> COMPARE TOGGLE ON RB3 TRISB.RB3=0; CCP1CON=0x02; T1CON=0x00; T3CON.T3CCP1=0; TMR1L=0; TMR1H=0; CCPR1L=0x40; CCPR1H=0x01; T1CON.TMR1ON=1; while(1); }
دیدگاه