اطلاعیه

Collapse
No announcement yet.

کالیبراسیون کریستال ساعتی

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

    کالیبراسیون کریستال ساعتی

    سلام
    من در برنامه ای نیاز به شمارش تعداد پالس ها دارم. به این صورت که هر ثانیه یکبار تعداد پالسهای شمرده شده را از طریق ارتباط سریال به pc ارسال میکنه. برای تولید 1 ثانیه هم از کریستال ساعتی و RTC میکرو atmega16 استفاده کردم. ولی وقتی که پالس هایی با فرکانس 10KHz به پایه شمارنده اعمال میکنم، تعداد پالس های شمرده شده در هر ثانیه به جای 10000، عددهایی با اختلاف تقریبا 300 تا نشون میده (مثلا 10370، 10377، 10350، ...).
    برای تست اینکه آیا RTC واقعا یک ثانیه را اندازه میگیرد، برنامه ای نوشتم که تایمر 1 و تایمر 2 (همون RTC) با هم راه اندازی میکنم بعد هر وقت تایمر 2 سرریز شد مقدار موجود در تایمر 1 را میخوانم. در این جا به جای اینکه تایمر 1 عدد 1000000 (معادل 1 ثانیه) را نشان بدهد عددهای 1035519، 1036040، 1035800 و... را نشان میدهد.
    آیا باید کریستال ساعتی ضریب کالبراسیون تعریف کرد؟؟ در دیتاشیت نوشته شده که تایمر 2 دارای ریجستر بافر میباشد. آیا مشکل از این هست؟

    کد:
    interrupt [TIM1_OVF] void timer1_ovf_isr(void)
    {
    T1OVF++;
    }
    
    interrupt [TIM2_OVF] void timer2_ovf_isr(void)
    {
       #asm("cli")
       count=TCNT1;
       mult=T1OVF;
       TCNT1=0;
       T1OVF=0;
       #asm("sei")
       printf("%5u",count);
       putchar('c');
       printf("%1u",mult);
    }
    
    void main(void)
    {
    while (1)
       {
       if(start==1)
       {
       TCCR2=0x05;
       delay_us(60);
       TCCR1B=0x02;
       start=0;
       }
    }

    #2
    پاسخ : کالیبراسیون کریستال ساعتی

    سلام

    شما نیاید تایمر 2 رو تو اون مد استفاده کنی چون وقتی که داری از این مد استفاده میکنی دیگه کرستالت 32768 هرتزه و بدیهیه که تعداد شمارش شده درست نیست.

    راه کار:
    از تایمر 0 یا 2 برای تولید زمان 1 ثانیه استفاده کن.بدونه استفاده از اون مد.
    ?Why not

    دیدگاه


      #3
      پاسخ : کالیبراسیون کریستال ساعتی

      با تشکر از شما
      من شمارش را با تایمر 1 انجام میدهم. زمان را با تایمر 2 با کلاک کریستال متصل به پایه TOSC توسط Asynchronous Status Register (ASSR اندازه میگیرم. تایمر 1 و 2 را تو مد نرمال راه اندازی کردم. فقط کلاک تایمر 2 را از کریستال متصل به پایه TOSC گرفتم و کلاک تایمر 1 را از پایه t1 با لبه پایین رونده. بصورت زیر.
      کد:
      // Timer/Counter 2 initialization
      // Clock source: TOSC1 pin
      // Clock value: PCK2/128
      // Mode: Normal top=0xFF
      // OC2 output: Disconnected
      ASSR=0x08;
      TCCR2=0x05;
      TCNT2=0x00;
      OCR2=0x00;

      دیدگاه


        #4
        پاسخ : کالیبراسیون کریستال ساعتی

        شما باید این کارو با یه کریستال 1000000 انجام بدی نه اون کاری که داری میکنی.
        کریستال 1000000 رو داخلی انتخاب کن.
        اون کریستالم بکن.
        ?Why not

        دیدگاه


          #5
          پاسخ : کالیبراسیون کریستال ساعتی

          نوشته اصلی توسط QUARK
          شما باید این کارو با یه کریستال 1000000 انجام بدی نه اون کاری که داری میکنی.
          کریستال 1000000 رو داخلی انتخاب کن.
          اون کریستالم بکن.
          ببخشید من متوجه منظور شما نمیشم. :cry:
          آیا منظور شما اینه که من با تایمر و کلاک داخلی میکرو، 1 ثانیه را تولید کنم و نه با کریستال ساعتی؟؟ من خیلی جاها دیدم از این روش استفاده میکنند و این روش خیلی راحت تر هم هست. چرا باید همچین مشکلی پیش بیاد. خطا در حد 3% هست خیلی هم بالا نیست.
          تایمر 2 را تو مد Asynchronous با prescaler 128 برای تولید 1 ثانیه هست.
          آیا منظور شما اینه که اگر من تایمر 2 را تو این مد راه اندازی کنم اونوقت کلاک کل میکرو از کریستال 32.768 khz تامین میشه؟؟؟ ولی تو دیتا شیت یکجا نوشته بود تو مد Asynchronous فقط کلاک مربوط به تایمر 2 به جای clk I/O از پایه TOSC1 میاد. و بقیه قسمت های میکرو مثلا تایمرها 0 و 1 کلاکشون از CLK I/O که همون 8MHz هستش، تامین میشود.

          دیدگاه


            #6
            پاسخ : کالیبراسیون کریستال ساعتی

            الان شما کلاک سیستمت 32768 هرتزِ پس اگه پالسی با فرکانس بیشتر بیاد سیستم شما قادر به پاسخ گویی نمیباشد.

            تازه واسه این ضریبِ خطا کاری نمیشه کرد یعنی همینیه که هست.
            ?Why not

            دیدگاه

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