اطلاعیه

Collapse
No announcement yet.

دقت اسیلاتور

Collapse
X
 
  • فیلتر
  • زمان
  • Show
Clear All
new posts

    دقت اسیلاتور

    سلام

    من توی برنامه احتیاج به زمان 1 ثانیه دارم که با استفاده از تایمر tcc0 و با استفاده از وقفه تایمر ایجاد کردم.

    کد:
    TCC0.PER = 31249;
    TCC0.CTRLB = TC_WGMODE_NORMAL_gc;
    TCC0.INTCTRLA = TC_OVFINTLVL_MED_gc;
    TCC0.CTRLA = TC_CLKSEL_DIV1024_gc;
    اسیلاتور میکرو 32 مگاهرتز داخلی انتخاب شده.
    کد:
    OSC.CTRL |= OSC_RC32MEN_bm;				// enable 32MHz oscillator
    	while(!(OSC.STATUS & OSC_RC32MRDY_bm)); // wait for oscillator to be ready
    	CCP = CCP_IOREG_gc;						// disable register security for clock update
    	CLK.CTRL = CLK_SCLKSEL_RC32M_gc;		// switch to 32MHz clock
    وقفه به درستی اتفاق میافته.
    مشکل سر دقت اسیلاتور هست چرا که توی هر 10 دقیقه زمان محاسبه شده تقریبا 12 ثانیه خطا داره.

    با استفاده از dfll هم این کار را کردم ولی مشکل هم چنان باقی است.

    کد:
    OSC.CTRL |= OSC_RC32MEN_bm;				// enable 32MHz oscillator
    	while(!(OSC.STATUS & OSC_RC32MRDY_bm)); // wait for oscillator to be ready
    	CCP = CCP_IOREG_gc;						// disable register security for clock update
    	CLK.CTRL = CLK_SCLKSEL_RC32M_gc;		// switch to 32MHz clock
    
    OSC.CTRL |= OSC_RC32KEN_bm;				// enable 32kHz oscillator
    	while(!(OSC.STATUS & OSC_RC32KRDY_bm)); // wait for oscillator to be ready
    
    OSC.DFLLCTRL = OSC_RC32MCREF_RC32K_gc;
    	DFLLRC32M.CTRL = DFLL_ENABLE_bm;




    با استفاده از کریستال خارجی و pll هم زمان دقیق بدست نمیاد
    کد:
    OSC.XOSCCTRL = OSC_FRQRANGE_12TO16_gc | OSC_XOSCSEL_XTAL_16KCLK_gc;
    	OSC.CTRL |= OSC_XOSCEN_bm;				// enable External Oscillator
    	while(!(OSC.STATUS & OSC_XOSCRDY_bm)); // wait for oscillator to be ready
    	OSC.PLLCTRL = OSC_PLLSRC_XOSC_gc | 2;
    	OSC.CTRL |= OSC_PLLEN_bm;
    	while(!(OSC.STATUS & OSC_PLLRDY_bm)); // wait for oscillator to be ready
    	CCP = CCP_IOREG_gc;						// disable register security for clock update
    	CLK.CTRL = CLK_SCLKSEL_PLL_gc;			// switch to PLL clock
    designer2013.blogsky.com

    #2
    پاسخ : دقت اسیلاتور

    چرا آی سی ساعت نمیزارید
    قیمت کمی دارند و دقت بیشتری
    از دو چیز بسیار زیاد یاد گرفتم (1) نمونه مدارهای موجود در سایت های خارجی (2) مهندسی معکوس بردهای غیر ایرانی. به نقل از آقای مرتضی امانی
    --------------------------------------------------------
    تمام دنیا ما را تحریم کرده اند؛ حداقل خودمان همدیگر را تحریم نکنیم. به نقل از pencil
    --------------------------------------------------------
    اشک هایی که پس از هر شکست ریخته میشوند همان عرق هاییست که برای پیروزی ریخته نشده است. mehran901

    دیدگاه


      #3
      پاسخ : دقت اسیلاتور

      با تشکر از پاسختون

      برای ساعت از آی سی ساعت استفاده کردم.

      زمان یک ثانیه برای قسمت دیگه ای لازم هست.

      با بررسی که تو برنامه انجام دادم اشتباه نرم افزاری بود که باعث میشد هر دقیقه یک ثانیه خطا بوجود بیاد. با رفع اشتباه مشکل حل شد و با اسیلاتور داخلی 32مگاهرتز و استفاده از dfll و تایمر TCC0 خطا در هر 10 دقیقه به 2 ثانیه رسید.

      و با استفاده از RTC داخلی میکرو خطا در هر 10 دقیقه صفر شد :wow:
      designer2013.blogsky.com

      دیدگاه

      لطفا صبر کنید...
      X