اطلاعیه

Collapse
No announcement yet.

نحوه تولید 1 میلی ثانیه دقیق با تایمر

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

    نحوه تولید 1 میلی ثانیه دقیق با تایمر

    سلام.
    من برای ساخت مداری نیاز دارم هر یک میلی ثانیه یه کاری انجام بدم و این زمان خیلی خیلی حساسه.
    من خودم اومدم با تایمر 1 با Prescale = 8 و مقدار اولیه Timer1 = 64535 و یه کریستال خارجی 8 مگاهرتز اینکارو کردم. اما زمان دقیق نیست.
    کسی میتونه راهنمایی کنه و مشکل برنامه منو بگه؟

    تو برنامه زیر هر 1 ثانیه متغیر s یه مقدار زیاد میشه که باهاش ثانیه رو نشون میدم تا بتونم دقت برنامه رو اندازه بگیرم.

    این برناممه

    $regfile = "m32def.dat"
    $crystal = 8000000

    Config Lcdpin = Pin , Db4 = Porta.2 , Db5 = Porta.3 , Db6 = Porta.4 , _
    Db7 = Porta.5 , E = Porta.1 , Rs = Porta.0
    Config Lcd = 16 * 2
    Cls

    Config Timer1 = Timer , Prescale = 8
    Enable Timer1
    Enable Ovf1
    On Ovf1 Ovfroutin
    Timer1 = 64535
    Stop Timer1

    Dim W As Long
    Dim S As Byte

    Enable Interrupts
    Start Timer1

    Do

    Loop

    End

    Ovfroutin:
    Timer1 = 64535
    Incr W
    If W = 1000 Then
    W = 0
    Incr S
    If S => 60 Then S = 0
    Home : Lcd S ; " "
    End If
    Return

    ممنون.

    #2
    پاسخ : نحوه تولید 1 میلی ثانیه دقیق با تایمر

    سلام
    این رو هم امتحان کن
    تایمر رو در وضیعت CTC قرار بده prescaler 64 و OCRn رو 124 قرار بده و وققه compare match رو فعال کن .
    هر 1 ثانیه یه وقفه صورت می گیره.

    دیدگاه


      #3
      پاسخ : نحوه تولید 1 میلی ثانیه دقیق با تایمر

      نوشته اصلی توسط mehrdad_italy
      تایمر رو در وضیعت CTC قرار بده prescaler 64 و OCRn رو 124 قرار بده و وققه compare match رو فعال کن .
      ممنون اما من هیچ کدومو غیر از prescaler 64 نمیفهمم متاسفانه. در ضمن من نمیخوام یک ثانیه درست کنم میخوام 1 میلی ثانیه درست کنم.

      دیدگاه


        #4
        پاسخ : نحوه تولید 1 میلی ثانیه دقیق با تایمر

        ببخشید منظور منم 1 میلی ثانیه بود اشتباه نوشتم

        من زیاد با تایمر در بسکام کار نکردم ولی در کل به این صورته

        CONFIG TIMER1= TIMER,COMPARE A =DISCONNECT,COMPARE B=DISCONNECT,PRESCALE=64,CLEAR TIMER=1
        و در ادامه برنامه :
        Enable Interrupts
        Enable Oc1a
        compare1a=124
        On Oc1a lable


        do
        loop
        end

        labe:
        یک میلی ثانه
        return


        دیدگاه


          #5
          پاسخ : نحوه تولید 1 میلی ثانیه دقیق با تایمر

          این برنامه هم مثل برنامه خودم تو هر یک دقیقه حدود 1 ثانیه عقب میوفته. میگم برای تنظیم فیوز بیت ها برای کریستال خارجی کدوم گزینه رو برای کریستال 8 مگاهرتز باید انتخاب کنیم؟

          دیدگاه


            #6
            پاسخ : نحوه تولید 1 میلی ثانیه دقیق با تایمر

            سعی کنید از زبان اسمبلی استفاده کنید چون اجرای دستورات خودش چند کلاک زمان میگیره و سرعت اجرای اسمبلی از c یا بیسیک بیشتر هستش
            http://www.eca.ir/forum2/index.php/topic,10159.0.html
            Engineering is the art of making what you want from things you can get.
            اموزش DSP ...........................
            http://www.eca.ir/forum2/index.php?topic=29824.0
            http://www.eca.ir/forum2/index.php?topic=32324.0

            دیدگاه


              #7
              پاسخ : نحوه تولید 1 میلی ثانیه دقیق با تایمر

              نوشته اصلی توسط ali833
              سعی کنید از زبان اسمبلی استفاده کنید چون اجرای دستورات خودش چند کلاک زمان میگیره و سرعت اجرای اسمبلی از c یا بیسیک بیشتر هستش
              فکر نمیکنم ربطی به زبان برنامه نویسی داشته باشه. ما نداریم با تاخیر ساده کار کنیم. تو برنامه داریم از تایمر استفاده میکنیم و تایمر که ربطی به زبان برنامه نویسی نداره.

              دیدگاه


                #8
                پاسخ : نحوه تولید 1 میلی ثانیه دقیق با تایمر

                نوشته اصلی توسط شازده
                فکر نمیکنم ربطی به زبان برنامه نویسی داشته باشه. ما نداریم با تاخیر ساده کار کنیم. تو برنامه داریم از تایمر استفاده میکنیم و تایمر که ربطی به زبان برنامه نویسی نداره.
                به زبان برنامه نویسی مربوطه ولی تو این برنامه 1 ثانیه فکر کنم یکم زیاده احتمالا به خاطر کریستال باشه
                CKSEL3..0=1111
                یه سوال , برنامه شما برای ساعته ؟ چرا از RTC تایمر/کانتر2 استفاده نمی کنید ؟

                دیدگاه

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