اطلاعیه

Collapse
No announcement yet.

آیا با atmega32 میتوان موج مربعی با دقت 1 هرتز درست کرد ؟

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

    #31
    پاسخ : آیا با atmega32 میتوان موج مربعی با دقت 1 هرتز درست کرد ؟

    نوشته اصلی توسط shayanmelody
    نیاز به تقسیم فرکانس در طول اجرای برنامه نیست .
    در طول برنامه با مقداردهی اولیه به رجیستر شمارنده تایمر میشه زمان سرریزی رو تغییر داد و در صورت لزوم میشه یه شمارنده دیگه به صورت دستی تو زیر برنامه وقفه قرار داد برای دقیق تر شدن کار . به این ترتیب با تغییر زمان سرریزی میشه از مقدار 1 هرتز ( حتی کمتر از 1 هرتز !)تا مقدار ماکزیممی که میشه با گام های دلخواه درست کرد
    دوست عزیز به این دقت نمیشه رسید. شما اگه میخواین مطمئن بشید یه برنامه به همین صورت که فرمودین بنویسین و تست کنین و نتیجه رو ببینید
    انسانها 10 دسته اند: دسته ای که باینری میدانند و دسته ای که باینری نمیدانند!

    دیدگاه


      #32
      پاسخ : آیا با atmega32 میتوان موج مربعی با دقت 1 هرتز درست کرد ؟

      نوشته اصلی توسط hamedtaran
      همونطور که گفتم من از اولم هدف شمارو متوجه شده بودم.
      راهکاری که گفتم بسیار دقیقه. فقط به محاسبات نیاز دارید. ولی با تایمر ها فقط میتونیم حداکثر تا بزرگترین عددی که تایمر میتونه داشته باشه به دقت برسیم و اگه عدد بیشتر شد دیگه امکانش نیست. این روشی که گفتم بسیار کارساز هست. فقط کافیه فرکانس اسیلاتور میکرو به عدد 50 کیلوهرتز تقسیم بشه. مثلا فرض کنیم نتیجه این تقسیم بشه 80 ٬ در این صورت اگه حلقه for تا هشتاد بشماره و بعد که تموم شد توی خط بعدی برنامه ما میایم یکی از پورت هارو تاگل میکنیم و تمام. به همین راحتی. نیازی هم به تایمر نیست. ولی یه خبر بد باید بدم. من دفه پیش اشتباه میکردم. اون دقتی که شما میخوای بازم حاصل نمیشه :mrgreen:
      اگه کدتون رو با اسمبلی بنویسین و تمهیدات لازم رو هم ذکر کنین حرفتون رو قبول دارم
      اما شما آیا میدونین برای اجرای یک دستور for به زبان سی که به ; ختم میشه دقیقا چند سیکل کلاک لازمه ؟ حالا اگه داخلش دستورات دیگه هم باشه فبها !!
      محاسباتی که انجام دادین کاملا غلطه
      برای همین برای انجام کار های دقیق از تایمر استفاده میشه

      دیدگاه


        #33
        پاسخ : آیا با atmega32 میتوان موج مربعی با دقت 1 هرتز درست کرد ؟

        نوشته اصلی توسط shayanmelody
        اگه کدتون رو با اسمبلی بنویسین و تمهیدات لازم رو هم ذکر کنین حرفتون رو قبول دارم
        اما شما آیا میدونین برای اجرای یک دستور for به زبان سی که به ; ختم میشه دقیقا چند سیکل کلاک لازمه ؟ حالا اگه داخلش دستورات دیگه هم باشه فبها !!
        محاسباتی که انجام دادین کاملا غلطه
        برای همین برای انجام کار های دقیق از تایمر استفاده میشه
        بنده بطور مثال عرض کردم و گفتم که باید دقیق محاسبه کنید. در ضمن در این روش٬ چون سر ریز وجود نداره٬ بنابراین نیازی به متغیر نداریم که مقدار قبلی تایمرو ذخیره کنه.
        درضمن در زبان سی برای اکثر خطوط برنامه یک پالس کلاک کافی استآ‌ البته بستگی به کامپایلر داره. مثلا در بسکام دستورات کندتر اجرا میشن.
        درضمن این کار ( تولید فرکانس پنجاه کیلو و تنظیم دقیق اون) با تایمر میکرو غیر ممکنه.مگر اینکه کارهای سخت افزاری خلاقانه بکار ببریم.
        موفق باشید
        انسانها 10 دسته اند: دسته ای که باینری میدانند و دسته ای که باینری نمیدانند!

        دیدگاه


          #34
          پاسخ : آیا با atmega32 میتوان موج مربعی با دقت 1 هرتز درست کرد ؟

          بحث جالبی داره میشه
          اما این جمله که شما با قاطعیت گفتین با میکرو نمیشه فرکانس 50 هرتز درست کرد حرف منطقی نیست

          دیدگاه


            #35
            پاسخ : آیا با atmega32 میتوان موج مربعی با دقت 1 هرتز درست کرد ؟

            نیاز به تقسیم فرکانس در طول اجرای برنامه نیست .
            در طول برنامه با مقداردهی اولیه به رجیستر شمارنده تایمر میشه زمان سرریزی رو تغییر داد و در صورت لزوم میشه یه شمارنده دیگه به صورت دستی تو زیر برنامه وقفه قرار داد برای دقیق تر شدن کار . به این ترتیب با تغییر زمان سرریزی میشه از مقدار 1 هرتز ( حتی کمتر از 1 هرتز !)تا مقدار ماکزیممی که میشه با گام های دلخواه درست کرد


            ببینین اولا شما میاین کلاک رو تقسیم می کنید یا خودش رو میدید به تایمر فرض کنیم فرض کنید تقسیم بر m بشه که m یک عدد طبیعی هم هست حالا این رو می دی که تایمر و تایمر تا N می شماره در واقع فرکانس ورودیش رو داره تقسیم بر N می کنه پس فرکانس خروجی تایمر می شه فرکانس کلاک میکرو تقسیم بر N*m که این چون ضرب اون 2 تا طبیعی هست شما هر مقداری رو نمیتونی بسازی امیدوارم متوجه شده باشید
            التماس دعا

            دیدگاه


              #36
              پاسخ : آیا با atmega32 میتوان موج مربعی با دقت 1 هرتز د&#

              خوب
              کلاس کاری برای دستگاه ما که قراره با avr کار بکنه و ابزارهای دم دستمون فرکانس 16 مگ و یک تایمر 16 بیتی هست نسبت به سایر دستگاه صنعتی رایج منطقا یک مقدار پایین تره.

              دیدگاه


                #37
                پاسخ : آیا با atmega32 میتوان موج مربعی با دقت 1 هرتز درست کرد ؟

                مرسی از دوستان صحبت منم همین بود که آیا با یه میکرو که ال س در درایو میکنه و ای دی سی رو چک میکنه میشه فرکانس دقیقی داشت داریم به نتیجه میرسیم که شاید واقعا امکانش نباشه .
                I'm going to
                RWTH Aachen
                University

                دیدگاه


                  #38
                  پاسخ : آیا با atmega32 میتوان موج مربعی با دقت 1 هرتز درست کرد ؟

                  استفاده از تاخیر waitms wait us اما مشکل اینجاست که این تاخیر درسته از کلاک سی پی یو تغذیه می کنه اما با اضافه شدن خطوط بعدی دستورات سی پی یو وقفه گذاری رو اضافه می کنه زمان کش میاد مگر اینکه در بین دستورات کالیبرش کنید یعنی انقدر کم زیادش کنید تا در اسکوپ 1 هرتز رو ببینید حالا جمع دستورات و و قفه شما با هم منتهی به یک هرتز میشوند
                  روش دیگه استفاده از روش r2r داکه روش خوبیه واسه سیگنال دلخواه اما 8 خروجی شمارو درگیر می کنه مخصوص سیگنال ژنراتوره
                  روش دیگه تنظیم تایمر روی pwm با پایین ترین تقسیم 1024 پایه ایی که به عنوان خروجی گرفته اید رو نمونه گیری و بشمارید
                  Config Timer1 = Pwm , Prescale = 8 , Pwm = 10 , Compare A Pwm = Disconnect , Compare B Pwm = Clear Down
                  config portc.2=output
                  pwm1b=1
                  dim hertz as word
                  dim 1hertz as bit
                  ....
                  :rest
                  hertz=1
                  goto he
                  :he
                  if pinb.1=1 then hertz=hertz+1
                  if hertz=500 then 1hertz=1
                  if hertz=1000 then 1hertz=0
                  if hert=1001 then goto rest
                  برنامه بالایی فقط دقت بهتری داره اما باز با اضافه شدن خطوط دوباره زمان خواندن پالس های پی وی ام به تاخیر که باز بایستی دوباره مقدار شمارشو کالیبره کنی می تونی توی منوی برنامت دو مقدارو قابل تغییر بزاری و بعد زمان های دیگری نیز وا کشی کنی
                  و اما روش نهایی استفاده از یک میکروی ارزان قیمت ساده که همین برنامه رو سوارش کنی و ازش کلاک 1 هرتز رو بگیری حالا با تغییر و یا تاخیر میکروی اصلی شما همیشه پالس های دقیق دارید
                  چون میکرو ها یک سی پی یو دارند هر گروه کلاک یک خط خوانده خط بعدی گروه کلاک بعدی
                  پالس های pwm وتایمر ها اجزای جدای سی پی یو هستند که مستقلند
                  و فقط کلاک مقایسته ها و استارت و استوپ و چقدر شمردن رو در وقفه ایی از بین برنامه ها دریافت می کنند enable spi Q Qnot clock از سی پی یو دستور میگیره
                  حتی در کامپیوتر ها هم ساعت توسط یه میکروی کوچک جداگانه با باتریش کار کرده و مقدار در اختیار سی پی یو اصلی می گذارد


                  دیدگاه

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