اطلاعیه

Collapse
No announcement yet.

زمان های بزرگ با تایمر

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

    زمان های بزرگ با تایمر

    سلام به همه
    من در پروژه ای نیاز دارم یک متغیر با مقدار 5 ثانیه قبلش مقایسه بشه
    مثلا:
    متغیر B به A/D وصل شده
    حالا اگر B نسبت به 5 ثانیه پیش تغیرات داشت باید یک led روشن بشه...

    سوال اساسی اینه که با تایمر چه جوری زمان 5 ثانیه درست کنم ؟؟
    آیا فرق میکنه از کدوم تایمر استفاده کنم؟؟ (تایمر 0 1 2)

    در ضمن اون 5 ثانیه برنامه های دیگه ای هم هست که نباید اجرای اونا مختل بشه

    نرم افزار pic basic pro
    میکرو pic16f877
    اگه کسی میتونه یک نمونه برنامه قرار بده که خیلی عالی میشه. :applause:
    ممنون از همه :nice: :nice:
    من منتظرم...


    من نبودم آنکه از من در خیالت ساختی ...
    پس تو هم چون دیگران چندان مرا نشناختی

    #2
    پاسخ : زمان های بزرگ با تایمر

    ببین من با PIC فقط یکبار کار کردم. اما منطق تمام اینها عین همه. شما به یک متغیر احتیاج داری تا توسط اون بفهمی که کی مدت 5 ثانیه ات سپری شده. فرض کنیم یک تایمر داری که هر 2 میلی ثانیه یکبار روال وقفه اش فراخوانی میشه. هر وقت خواستی 5 ثانیه صبر کنی میری این متغیر رو مساوی 5000/2 یعنی 2500 قرار میدی. در روال وقفه تایمرت هم چک میکنی که اگه این متغیر صفر نباشه؛ مقدار اونو یکی کم کنی. در سیکل اجرایی برنامه ات هم چک میکنی هر وقت این متغیر صفر شده بیایی و کار 5 ثانیه یکبارت رو انجام بدی و دوباره این متغیر رو مقدار بدی و الی آخر.
    فقط توجه کن که میزان دقت این زمانبندی +/- 2 میلی ثانیه هست. البته زمان سیکل اجرایی برنامه ات رو صفر در نظر گرفتم.

    دیدگاه


      #3
      پاسخ : زمان های بزرگ با تایمر

      ممنون آقا رضا
      دقت برام مهم نیست و تقریبی هم قبوله :nice:
      کزیستال 4 مگ هست
      در ضمن من بیشتر میخوام روش کار را بدونم
      من این برنامه رو نوشتم لطفا دوستان اشکالاتش رو بگن :read:

      MM VAR byte
      OPTION_REG = %10010111
      ON INTERRUPT GOTO CHEK
      INTCON=%10100000
      mm=2500

      MAIN:
      ''OTHER PROGRAM
      GOTO MAIN

      CHEK:
      IF MM=0 THEN LOOP
      IF MM<>0 THEN MM=MM-1
      INTCON.2=0
      RESUME
      ENABLE
      GOTO MAIN

      LOOP:
      HIGH PORTB.7
      MM=2500
      GOTO MAIN
      END
      با تشکر
      من نبودم آنکه از من در خیالت ساختی ...
      پس تو هم چون دیگران چندان مرا نشناختی

      دیدگاه


        #4
        پاسخ : زمان های بزرگ با تایمر

        من البته نمیدونم با چی کد میزنی. ولی بنظر میاد برنامه ات باید درست کار نکنه. چون داری از روال وقفه بدون بازگشتن فقط به لوپ اصلی برنامه میپری. اینجوری به ازای هر دفعه صدا شده وقفه کلی آشغال داخل پشته برنامه باقی میمونه. البته با این برنامه ساده ممکنه این حالت رو هیچ وقت نبینی. چون روال برگشتی وجود نداره. ولی مسلما برنامه درست کار نمیکنه. فکر میکنم بجای GOTO باید از RETURN یا چیزی مشابه اون در انتهای روال وقفه استفاده بشه.

        دیدگاه


          #5
          پاسخ : زمان های بزرگ با تایمر

          یعنی به جای

          chek:
          .
          .
          .
          goto main

          بذارم

          chek:
          .
          .
          .
          return

          خیلی ممنون :applause: :applause:
          توکتاب نوشته resume به حالت قبل از وقفه میره
          حالا من یه کم گیج شدم oo: oo:
          goto main
          بذارم یا نه.............
          من نبودم آنکه از من در خیالت ساختی ...
          پس تو هم چون دیگران چندان مرا نشناختی

          دیدگاه


            #6
            پاسخ : زمان های بزرگ با تایمر

            اگر خودش گفته در انتهای وقفه باید resume استفاده بشه از این استفاده کن. ولی حتما مطمئن باش که این resume فقط وقفه ها رو مجددا فعال نمیکنه. منظورم اینه که شاید این resume کارش برگشت از وقفه نباشه و فقط وقفه ها رو دوباره فعال کنه. اما مسلما در هنگام برگشت از یک وقفه باید وقفه ها دوباره فعال بشن.

            ولی هر چی هست قاعدتا نباید goto main بذاری. با این حال بهتره یک مثالی چیزی راجع به یک وقفه پیدا کنی. مطمئن تره.

            دیدگاه


              #7
              پاسخ : زمان های بزرگ با تایمر

              خیلی ممنون
              با یک مدار ساده تست کنم ببینم چی میشه :nice:
              اگه نشد میام سوالاتم رو میپرسم :agree:
              من نبودم آنکه از من در خیالت ساختی ...
              پس تو هم چون دیگران چندان مرا نشناختی

              دیدگاه

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