اطلاعیه

Collapse
No announcement yet.

مشکل در تایمر میکزو

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

    مشکل در تایمر میکزو

    با سلام
    دوستان من میخوام یک برنامه بنویسم که روی یک پایه میکرو 7 تا پالس مربعی با فرکانس 200 کیلو هرتز تولید کنه بعد یک ثانیه صبر کنه و روی یک پایه دیگه دوباره 7 تا پالس مربعی با همون فرکانس 200 کیلو هرتز رو بسازه.
    من از برنامه زیر برای تست مد مقایسه ای تایمر 1 میکرو استفاده کردم. اول زمان Compare1a = 5 در نظر گرفتم که روی پایه oc1a فرکانس حدودا 170 کیلوهرتز شد. بعد Compare1a = 4 گذاشتم که دقیقا فرکانس 200 کیلوهرتز بدست اومد. منتها روی پایه b0 فرکانس به مراتب کمتر از 200 کیلوهرتزه ظاهرا انجام دستورات توی تابع q زمانبره و باعث میشه فرکانس پایین بیاد. دوستان کسی پیشنهادی داره که من بتونم این برنامه رو بنویسم؟
     $regfile="m48def.dat"
    $crystal=16000000
    config PORTB=OUTPUT
    Config Timer1 = Timer , Compare A = toggle , Prescale = 1 , Clear Timer = 1
    Compare1a = 4
    Enable Interrupts
    Enable Oc1a
    On Oc1a Q
    dim a as Byte
    a=0
    do
    loop
    q:
    a=a+1
    toggle portb.0
    return



    #2
    پاسخ : مشکل در تایمر میکزو

    نوشته اصلی توسط sarutobi نمایش پست ها
    با سلام
    دوستان من میخوام یک برنامه بنویسم که روی یک پایه میکرو 7 تا پالس مربعی با فرکانس 200 کیلو هرتز تولید کنه بعد یک ثانیه صبر کنه و روی یک پایه دیگه دوباره 7 تا پالس مربعی با همون فرکانس 200 کیلو هرتز رو بسازه.
    من از برنامه زیر برای تست مد مقایسه ای تایمر 1 میکرو استفاده کردم. اول زمان Compare1a = 5 در نظر گرفتم که روی پایه oc1a فرکانس حدودا 170 کیلوهرتز شد. بعد Compare1a = 4 گذاشتم که دقیقا فرکانس 200 کیلوهرتز بدست اومد. منتها روی پایه b0 فرکانس به مراتب کمتر از 200 کیلوهرتزه ظاهرا انجام دستورات توی تابع q زمانبره و باعث میشه فرکانس پایین بیاد. دوستان کسی پیشنهادی داره که من بتونم این برنامه رو بنویسم؟
     $regfile="m48def.dat"
    $crystal=16000000
    config PORTB=OUTPUT
    Config Timer1 = Timer , Compare A = toggle , Prescale = 1 , Clear Timer = 1
    Compare1a = 4
    Enable Interrupts
    Enable Oc1a
    On Oc1a Q
    dim a as Byte
    a=0
    do
    loop
    q:
    a=a+1
    toggle portb.0
    return



    On Ovf1 q
    start Timer1



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



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

    دیدگاه


      #3
      پاسخ : مشکل در تایمر میکزو

      سلام
      خیلی ممنون که جواب دادین. اما توی مد مقایسه ای نیازی به استارت تایمر نیست و برنامه با همین دستورات به تابع q پرش میکنه. من با اسیلوسکوپ پایه های میکرو رو چک کردم برنامه کارشو انجام میده اما فرکانسش درست نیست
      چطوری با استفاده از کانتر میشه این برنامه رو نوشت (
      میخوام یک برنامه بنویسم که روی یک پایه میکرو 7 تا پالس مربعی با فرکانس 200 کیلو هرتز تولید کنه بعد یک ثانیه صبر کنه و روی یک پایه دیگه دوباره 7 تا پالس مربعی با همون فرکانس 200 کیلو هرتز رو بسازه.)
      امکانش هست در این مورد توضیح بدید؟
      البته یه توضیح هم بدم این برنامه ای که نوشتم برای تسته کاملترش اینه که توی تابع a افزایش داده بشه و وقتی که مثلا کمتر از 14 بود پایه b0 رو تاگل کنه اگه بین 14 و یک عددی ( مثلا 1000) بود هیچ کاری نکنه و اگه بزگتر از 1000 و کو چکتر 1014 بود پایه b1 رو تاگل کنه که اینجا کاملش رو ننوشتم
      جدیدترین ویرایش توسط sarutobi; ۱۴:۳۰ ۱۳۹۷/۰۷/۰۶.

      دیدگاه


        #4
        پاسخ : مشکل در تایمر میکزو

        بهتره از دو تا تایمر استفاده کنید
        اولی به عنوان کانتر برای شمارش تعداد پالسها
        دومی تایمر برای ساخت پالس ها
        اگه اطلاع دقیق تری بدین شاید بتونم بهتر راهنمایی کنم
        می خاین اون پالسها دقیقا برابر هم باشن یا تایم اون پالسها برابر هم باشه ( زمان یا تعداد یا هر دو ؟ )
        توضیحات شما نا مفهوم ه




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

        دیدگاه


          #5
          پاسخ : مشکل در تایمر میکزو

          نوشته اصلی توسط S_B_T نمایش پست ها
          بهتره از دو تا تایمر استفاده کنید
          اولی به عنوان کانتر برای شمارش تعداد پالسها
          دومی تایمر برای ساخت پالس ها
          اگه اطلاع دقیق تری بدین شاید بتونم بهتر راهنمایی کنم
          می خاین اون پالسها دقیقا برابر هم باشن یا تایم اون پالسها برابر هم باشه ( زمان یا تعداد یا هر دو ؟ )
          توضیحات شما نا مفهوم ه




          البته یه توضیح هم بدم این برنامه ای که نوشتم برای تسته کاملترش اینه که توی تابع a افزایش داده بشه و وقتی که مثلا کمتر از 14 بود پایه b0 رو تاگل کنه اگه بین 14 و یک عددی ( مثلا 1000) بود هیچ کاری نکنه و اگه بزگتر از 1000 و کو چکتر 1014 بود پایه b1 رو تاگل کنه که اینجا کاملش رو ننوشتم
          منظور شما از استفاده از کانتر و تایمر ساخت فرکانس متر؟ من نمیخوام فرکانس متر بسازم برنامه ای که میخوام اینه:
          وقتی یک دکمه رو فشار دادم روی یکی از پایه های میکرو مثلا b0 هفت تا پالس مربعی با فرکانس 200 کیلو ساخته بشه سپس میکرو 1 ثانیه صبر کنه و روی یه پایه دیگه مثلا b1 هفت تا پالس مربعی با فرکانس 200 کیلو بسازه. همین
          خیلی ممنون

          دیدگاه


            #6
            پاسخ : مشکل در تایمر میکزو

            اکی
            اول ببین می تونی با میکرو پالس 200 کیلو تولید کنی ؟
            من اکه جای تو باشم برنامه رو پیچیده نمی کنم
            از یک ای سی 555 برای تولید 200 کیلو هرتز استفاده می کنم و بوسیله یه آی سی and دیگه اون رو با یکی از پایه های میکرو AND می کنم که کنترل دست خودم باشه
            حالا اون پین رو توی زمانهای که می خام فعال یا غیر فعال می کنم



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

            دیدگاه


              #7
              پاسخ : مشکل در تایمر میکزو

              نوشته اصلی توسط S_B_T نمایش پست ها
              اکی
              اول ببین می تونی با میکرو پالس 200 کیلو تولید کنی ؟
              من اکه جای تو باشم برنامه رو پیچیده نمی کنم
              از یک ای سی 555 برای تولید 200 کیلو هرتز استفاده می کنم و بوسیله یه آی سی and دیگه اون رو با یکی از پایه های میکرو AND می کنم که کنترل دست خودم باشه
              حالا اون پین رو توی زمانهای که می خام فعال یا غیر فعال می کنم



              خیلی ممنون
              ایده جالبیه اما من توی مد مقایسه ای فرکانس 200 کیلو رو روی پایه
              oc1a
              تولید کردم، فکر کنم بشه یه کانتر رو هم راه اندازی کنم، پایه
              oc1aرو به پایه کانتر وصل میکنم و وقتی تعداد پالس ها به اندازه دلخواه رسید تایمر رو خاموش یا روشن میکنمالان روی این برنامه کار و نتیجه رو اعلام میکنم
              خیلی ممنون
              جدیدترین ویرایش توسط sarutobi; ۱۵:۰۷ ۱۳۹۷/۰۷/۰۶.

              دیدگاه


                #8
                پاسخ : مشکل در تایمر میکزو

                سلام مجدد
                من برنامه رو به شکل زیر نوشتم که هر نیم ثانیه 7 تا پالس درست کنه اما روی اسیلوسکوپ نتایج زیر رو گرفتم ( یعنی هر 4 ثانیه 13 پالس با فرکانس 200 کیلو تولید میکنه ) کسی نظری نداره؟

                $regfile="m48def.dat"
                $crystal=16000000
                Config Timer0 = Counter , Edge = Rising
                Config Timer1 = Timer , Compare A = toggle , Prescale = 1 , Clear Timer = 1
                Compare1a = 4
                COUNTER0 = 249
                ENABLE OVF0
                ON OVF0 p
                Enable Interrupts
                do


                loop
                p:
                stop timer1
                COUNTER0 = 249
                waitms 500
                start timer1
                return





                دیدگاه

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