ورود به حساب ثبت نام جدید فراموشی کلمه عبور
برای ورود به حساب کاربری خود، نام کاربری و کلمه عبورتان را در زیر وارد کرده و روی «ورود به سایت» کلیک کنید.





اگر فرم ثبت نام برای شما نمایش داده نمی‌شود، اینجا را کلیک کنید.









اگر فرم بازیابی کلمه عبور برای شما نمایش داده نمی‌شود، اینجا را کلیک کنید.





کاربران برچسب زده شده

نمایش نتایج: از 1 به 9 از 9
  1. #1
    2008/10/10
    اصفهان
    67
    1

    مشکل با مد compare از واحد ccp-eccp

    سلام به همه ي دوستان عزيز :smile:

    توي يه پرژه مي خوام يه سيگنال مربعي با دوره ي 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;
      }
    }
    حالت دستي (کامپايلر MICROC):

    کد:
    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);
    }
    در زندگيت به کسي اعتــــماد کن که به او ايمــــان داري نه احســاس . . .

    چه بسيار انسان ها ديدم تنشان لباس نبود؛و چه بسيار لباس ها ديدم که انساني درونش نبود ...!
  2. #2
    2006/08/16
    867
    17

    پاسخ : مشکل با مد compare از واحد ccp-eccp

    شما باید وقفه ccp رو فعال کنید و در داخل اون تایمر رو صفر کنید.
    وگرنه تایمر بعد از عبور از مقدار ccpr تا 65535 میره و خودش ریست میشه.
    مقدار ccpr هم برای فرکانس 17 کیلوهرتز باید 941 باشه.(کریستال 16 مگ)

    راه حل بهتری هم هست که نیاز به وقفه رو حذف میکنه و اون استفاده از مد pwm هست.
    در اون صورت تایمر 2 باید پریودش 234 باشه.









    مهمان عزیز شما حق دیدن لینک ها را ندارید

    عضویت

  3. #3
    2008/10/10
    اصفهان
    67
    1

    پاسخ : مشکل با مد compare از واحد ccp-eccp

    بله دقيقا همين طور که شما ميگيد من هم به همين نتيجه رسيدم خيلي از تون ممنونم ولي امان از اين ديتا شيتا خيلي بد توضيح ميدن.

    برنامه براي فرکانس 500 کيلو روي پايه ي RC2 کريستال 16MHz:

    کد:
    /* 
     * 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 <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 gl_interrupt_init(void);
    void ccp_comp_init(void);
    //=======================================================
    void interrupt comp_isr(void){
    
      TMR1=0x0000;
      PIR1bits.CCP1IF=0;
    }
    
    
    
    void main(void) {
    
      TRISDbits.TRISD1=0;
    
      ccp_comp_init();
      gl_interrupt_init();
     
      while(1){
    
        PORTDbits.RD1=~PORTDbits.RD1;
      }
    }
    
    //=======================================================
    void gl_interrupt_init(void){
    
      INTCONbits.GIE=1;
      INTCONbits.PEIE=1;
    }
    //=======================================================
    void ccp_comp_init(void){
    
      unsigned int period=0x0010;
      //---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 ---
      TMR1=0x0000;
      period = 0x0001;
      OpenCompare1( COM_INT_ON | COM_TOGG_MATCH , period);
      PIR1bits.CCP1IF=0;
    }
    در زندگيت به کسي اعتــــماد کن که به او ايمــــان داري نه احســاس . . .

    چه بسيار انسان ها ديدم تنشان لباس نبود؛و چه بسيار لباس ها ديدم که انساني درونش نبود ...!
  4. #4
    2008/10/10
    اصفهان
    67
    1

    پاسخ : مشکل با مد compare از واحد ccp-eccp با سرس تايمر 3

    سلام به همه ي رفقا.

    بر حسب نياز در پروزه لازم شد که تايمر رو براي واحد CCP (مد مقايسه ) بزارم روي تايمر 3 ولي متصفانه خروجي RB3 تاگل نميشه وقفه ي خود تايمر3
    رو جداگانه امتحان کردم رخ ميده ودرست کار ميکنه ولي نميدونم چرا توي واحد CCP پايه تاگل نميشه ديتا شيت رو هم خيلي خوندم ولي علت رو نتونستم
    پيدا کنم .

    لطف کنيد يه نگاهي به برنامه بندازيند ببينيد مشکل از چيه.من فعلا دسترسي به XC هم ندارم که امتحان کنم. اما فکر کنم اونم همين جوابو بده احتمالا
    ايراد از برنامه هست.

    با تشکر از همه.


    //MCU: PIC18F1220

    void main() {

    TRISB.RB3=0;

    PIR1.CCP1IF=0;
    CCP1CON=0x02;// compare mod (toggle RB3)
    CCPR1=0x00EB;
    TMR3L=0x00;
    TMR3H=0x00;
    T3CON=0x09;// timer3 for ccp , pres 1:1 , start timer 3


    while(1){

    if(PIR1.CCP1IF==1){
    PIR1.CCP1IF=0;
    TMR3L=0;
    TMR3H=0;
    }

    }

    }
    در زندگيت به کسي اعتــــماد کن که به او ايمــــان داري نه احســاس . . .

    چه بسيار انسان ها ديدم تنشان لباس نبود؛و چه بسيار لباس ها ديدم که انساني درونش نبود ...!
  5. #5
    2006/08/16
    867
    17

    پاسخ : مشکل با مد compare از واحد ccp-eccp


    بنده تا حالا با 18F1220 کار نکردم ولی دیتاشیتش رو دانلود کردم و یک نگاهی بهش انداختم.
    برای اینکه منبع کلاک CCP1 تایمر3 باشد مقدار T3CON باید 0x41 باشد.
    توصیه میکنم دیتاشیت را با دقت بیشتری بخونید.
    کد:
    RD16  T3CCP2  T3CKPS1  T3CKPS0  T3CCP1  T3SYNC  TMR3CS  TMR3ON
     0    1     0      0     0     0     0     1

    مهمان عزیز شما حق دیدن لینک ها را ندارید

    عضویت

  6. #6
    2008/10/10
    اصفهان
    67
    1

    پاسخ : مشکل با مد compare از واحد ccp-eccp

    سلام از اينکه پاسخ دادين ممنون. فقط فکر کنم ديتاشيت احتمالا از ميکروي pic18f1220 نباشه چون بيت T3CCP2 توي رجيستر TIMER3 از اين ميکرو نيست و
    مربوط به ميکرو هايي است که دو تا واحد CCP دارند مثل PIC18F4550.

    PIC18F1220
    1 0 0 1 0 0 U
    RD16 — T3CKPS1 T3CKPS0 T3CCP1 T3SYNC TMR3CS TMR3ON
    در زندگيت به کسي اعتــــماد کن که به او ايمــــان داري نه احســاس . . .

    چه بسيار انسان ها ديدم تنشان لباس نبود؛و چه بسيار لباس ها ديدم که انساني درونش نبود ...!
  7. #7
    2006/08/16
    867
    17

    پاسخ : مشکل با مد compare از واحد ccp-eccp

    متاسفانه دیتاشیت شما ایراد داره.
    سندی که لینکش رو در زیر گذاشتم errata ی این قطعه و دیتاشیت اون هست:
    http://ww1.microchip.com/downloads/en/DeviceDoc/80244d.pdf

    مهمان عزیز شما حق دیدن لینک ها را ندارید

    عضویت

  8. #8
    2008/10/10
    اصفهان
    67
    1

    پاسخ : مشکل با مد compare از واحد ccp-eccp

    دوست عزيز واقعا ازتون کمال تشکر رو دارم :applause:

    ولي آخه يه همچين خطا هاي بزرگي هيچوقت نبايد توي ديتاشيت رخ بده وگر يه نفر مثل من ممکن 3يا 4 روز وقت روش بزاره(آخه من از کجا بدونم بايد
    ERETA اين قطعه رو بگيرم. )

    بازم از کمکتون ممنون.
    در زندگيت به کسي اعتــــماد کن که به او ايمــــان داري نه احســاس . . .

    چه بسيار انسان ها ديدم تنشان لباس نبود؛و چه بسيار لباس ها ديدم که انساني درونش نبود ...!
  9. #9
    2006/08/16
    867
    17

    پاسخ : مشکل با مد compare از واحد ccp-eccp

    حق با شماست. در واقع به نوعی بدشانسی آوردید در این مورد.
    ولی کلاً وقتی تصمیم میگیرید با یک آیسی بیشتر کار کنید بهتره Errataش رو هم دانلود کنید.
    موفق باشید

    مهمان عزیز شما حق دیدن لینک ها را ندارید

    عضویت

نمایش نتایج: از 1 به 9 از 9

موضوعات مشابه

  1. پاسخ: 4
    آخرين نوشته: 2019/06/06, 17:20
  2. مشکل با واحد pwm میکرو lpc1768 ؟؟؟؟؟؟
    توسط seyed saeed در انجمن NXP
    پاسخ: 4
    آخرين نوشته: 2015/02/13, 18:32
  3. مشکل با واحد کپچر
    توسط fever در انجمن میکروکنترلرهای AVR
    پاسخ: 5
    آخرين نوشته: 2014/01/28, 23:57
  4. مفهوم واحد هاي xl چيست؟(واحد اندازه گيري تسمه و پولي)
    توسط RshRshRsh در انجمن رباتيك و مكاترونيك
    پاسخ: 1
    آخرين نوشته: 2014/01/28, 23:12
  5. مد ctc در کد ویژن همان مد compare در بیسکام است!!؟؟؟؟
    توسط raoofsh در انجمن میکروکنترلرهای AVR
    پاسخ: 1
    آخرين نوشته: 2011/09/12, 00:41

کلمات کلیدی این موضوع

علاقه مندي ها (Bookmarks)

علاقه مندي ها (Bookmarks)

مجوز های ارسال و ویرایش

  • شما نمیتوانید موضوع جدیدی ارسال کنید
  • شما امکان ارسال پاسخ را ندارید
  • شما نمیتوانید فایل پیوست کنید.
  • شما نمیتوانید پست های خود را ویرایش کنید
  •