اطلاعیه

Collapse
No announcement yet.

تایمر 2 میکروی PIC16F877

Collapse
این موضوع بسته شده است.
X
X
 
  • فیلتر
  • زمان
  • Show
Clear All
new posts

    تایمر 2 میکروی PIC16F877

    من می خواهم مثلا اگر postscaler در تایمر 2 میکروی PIC16F877 عددی غیر از یک باشد یعنی این تایمر باید به این تعداد سرریز داشته باشد تا وقفه بیاید اگر بخواهم موقع سرریز کاری انجام دهم چه کنم؟ من بیت یا مکانیزمی برای این کار پیدا نکردم. از متخصصین تایمر کمک می خواهم.

    #2
    پاسخ : تایمر 2 میکروی PIC16F877

    سلام.
    متوجه منظورتون نشدم . آیا شما فقط میخواهید برای تایمر 2 مقدار postscale رو تعیین کنید؟ با چه کامپایلری؟

    دیدگاه


      #3
      پاسخ : تایمر 2 میکروی PIC16F877

      compiler CCS
      من برای یک کار زمان سنجی، علاوه بر این که میخواهم تایمر 2 روی 10 میلی ثانیه وقفه بدهد :
      prescaler=4 ,PR2=125 , Postscaler=5 fosc=1MHz
      setup_timer_2(..DIV4,124,5)

      بیت وقفه فقط وقتی که تایمر 5 بار از0 تا 125 بشمرد وقفه میدهد میخواهم با هر یار شمارش 125 تایی من در برنامه متوجه بشوم تا کار سومی را انجام دهم. یعنی در هر وقفه 10 میلی ثانیه ای من باید 5 بار سرریز تایمر را بفهمم

      اصل پروژه من تنظیم تایمر 2 وقتی که اسیلاتور میکرو external rc 1MHz هست می باشد. این کار با استفاده از تایمر 1 با کریستال 32768 هرتز انجام می شود اگر شد و خواستید کامل توضیح دهم فعلا گیر کرده ام.

      دیدگاه


        #4
        پاسخ : تایمر 2 میکروی PIC16F877

        یک راه حل مفید این است که شما مقدار postscale را برابر 1 قرار دهید به این منظور که با هر 126 شمارش (از 0 تا 125) یک وقفه بوجود آید . همچنین یک متغیر از نوع integer را به صورت public یا عمومی تعریف نمایید و با هربار وقوع وقفه ، یک واحد به مقدار این متغیر بیفزایید . حال در سرویس وقفه تنها کافیست که بررسی شود آیا مقدار متغیر مذکور مضربی از 5 است یا خیر؟
        نیاز به توضیح بیشتری می باشد؟

        دیدگاه


          #5
          پاسخ : تایمر 2 میکروی PIC16F877

          سلام
          سوال اساسی این است که بنا به ضرورت مجبوریم به جای کریستال از مقاومت و خازن به عنوان اسیلاتور میکرو استفاده کنیم و از طرفی به دقت 10 میلی ثانیه هم نیاز داریم چگونه میتوان با این اسیلاتور و میکروی pic16f877a زمانهای مثلا 10 ثانیه با دقت 10 میلی ثانیه گرفت. تنظیم تایمر 2 صورت مساله است.

          دیدگاه


            #6
            پاسخ : تایمر 2 میکروی PIC16F877

            خوب فرکانس اسیلاتور RC برای شما چقدره؟؟
            راه حل همانی است که ذکر کردم. شما یک متغیر را به صورت جنرال تعریف می نمایید . تایمر 2 را طوری تنظیم میکنید که هر 10 میلی ثانیه یکبار وقفه بوجود آید . در سرویس وقفه ابتدا یک واحد متغیر مذکور را افزایش می دهید . اگر مقدار متغیر به 100 رسیده بود یعنی یک ثانیه تولید شده است و شما کار مورد نظرتان را انجام می دهید . برای فعالیت هایی هم که به 10 میلی ثانیه احتیاج دارید ، کد های مورد نظر را مستقیما و بدون هیچ پیش شرطی در سرویس وقفه می نویسید .
            اگر متوجه نشدید بگید تا بیشتر توضیح بدم .

            دیدگاه


              #7
              پاسخ : تایمر 2 میکروی PIC16F877

              به طور دقیق فرکانس 1 مگا هرتز ولی اسیلاتور RC که دقیق نیست مثلا با درجه حرارت محیط تغییر می کند.
              اما روشی که توضیح داده اید فرض کنید شما تایمر را روی 10 میلی ثانیه تنظیم می کنید ولی به خاطر انحراف فرکانس روی 9 میلی ثانیه وقفه رخ می دهد و با افزایش متغیر در زیربرنامه وقفه به اندازه 100 بار زمان 9 ثانیه به دست می آید نه 10 ثانیه
              باید بتوان TMR2 را بر اساس فرکانسی که میکرو در آن کار میکند به درستی تنظیم کرد. یعنی بدست آوردن فرکانس میکرو شرط است.
              از شما تشکر میکنم

              دیدگاه


                #8
                پاسخ : تایمر 2 میکروی PIC16F877

                حالا چه اصراری به استفاده از اسیلاتور RC هست؟ از کریستال نمیتونید استفاده کنید؟
                اگر اینطور باشه شما در ابتدا باید توسط ماژول CCP که در مد CAPTURE پیکربندی شده باشد ، فرکانس ورودی میکرو را اندازه بگیرید و سپس مقدار پرسکالر و ... رو تعیین کنید .
                اگر فرکانس ورودی شما 1 مگاهرتز باشد ، برای داشتن وقفه تایمر 2 برای هر 10 میلی ثانیه باید این تنظیمات را انجام دهید :
                setup_timer_2(T2_DIV_BY_1,179,14);

                دیدگاه


                  #9
                  پاسخ : تایمر 2 میکروی PIC16F877

                  اما اگر بخواهیم از ccp استفاده کنیم زمانی که بدست می آوریم معیار صحیحی ندارد یعنی فرکانس میکرو را بطور دقیق نمی دانیم. فرض کنیم از طریق ccp یک عدد بدست آوردیم خود ساز و کار تایمر 1 و ccp دارند بر اساس قرکانس نامعلوم میکرو کار می کنند و زمانی که به ما می دهند درست نیست که نتیجه آن درست باشد.
                  کریستال 1 مگاهرتز داریم ولی امکان استفاده از آن را نداریم.
                  با تشکر فراوان.

                  دیدگاه

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