اطلاعیه

Collapse
No announcement yet.

محاسبه OCR در تایمر

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

    #16
    پاسخ : محاسبه OCR در تایمر

    نوشته اصلی توسط محمد رضا حاج بابایی
    نه خوب نمی تونه بگیره. چون یه دلیلش اینه که این رجیستر باید با TCNT مقایسه یشه و مقدار اون هم که فقط صحیح می باشد. شما باید به جای 11.5 ، 12 یا 11 قرار بدی.
    خوب اینطوری اگه 12 یا 11 باشه جای 11.5، فرکانس 40 کیلوهرتز بدست نمیاد! بالا و پایین میشه!
    http://ceworld.ir/images/ads/dornablogcom_ads.gif

    دیدگاه


      #17
      پاسخ : محاسبه OCR در تایمر

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

      نوشته اصلی توسط behnam_kh2002
      خوب اینطوری اگه 12 یا 11 باشه جای 11.5، فرکانس 40 کیلوهرتز بدست نمیاد! بالا و پایین میشه!
      آره دیگه. یه خطای خیلی کوچیک داره. باید با محاسباتت، کلاک میکرو و تقسیم تایمر رو طوری بدست بیاری که در حدود اون فرکانسی که میخوای تولید کنی، 0.5 تا تغییر OCR کمترین تاثیر رو داشته باشه. اصلا شاید بشه عدد صحیح بدست آورد... با تغییر کلاک ...

      از این دقیقتر دیگه فکر کنم باید از آی سی های تولید فرکانس استفاده کنی
      https://www.linkedin.com/in/mohammadhosseini69

      http://zakhar.blog.ir

      دیدگاه


        #18
        پاسخ : محاسبه OCR در تایمر

        با تایمر هر زمانی را نمی شود ساخت. اما برای کم کردن پله زمان های قابل حصول باید چند مسئله را رعایت کنید:
        1- تا حد امکان فرکانس کلاک CPU را بالا ببرید.
        2- ضریب تقسیم کلاک CPU را یک قرار دهید.
        3- برای رسیدن به زمان های بزرگتر در صورت امکان از تایمرهای 16 بیتی استفاده کنید.
        البته حداکثر زمان ممکن در این حالت بسیار محدود است، اما پله تغییرات زمانی تا حد امکان کاهش می یابد.به عنوان مثال اگر کلاک CPU برابر 20 مگاهرتز و ضریب تقسیم تایمر برابر یک باشد، پله تغییرات زمان 50 نانوثانیه خواهد بود. اما با وجود کوچک بودن این عدد، بازهم نمی شود به همه زمانها دست پیدا کرد. گاهی لازم است از فرکانس های خاصی برای اسیلاتور استفاده شود ( مانند 11.059 مگاهرتز) تا بعد از تقسیم به زمان مورد نظر برسد. برای زمان های بزرگتر می توان از ضریب تقسیم بزرگتر از یک برای کلاک تایمر استفاده کرد و در نهایت از شمارنده های نرم افزاری استفاده نمود.
        اوژن: به معنای افکننده و شکست دهنده است
        دانایی، توانایی است-Knowledge is POWER
        برای حرفه ای شدن در الکترونیک باید با آن زندگی کرد
        وضعمان بهتر می شود، اگر همه نسبت به جامعه و اطراف خود مسوول باشیم و نگوئیم به ما چه
        قوی شدن و خوب ماندن - خوبی کردن به دیگران یک لذت ماندگار است
        اگر قرار باشد نفت و منابع خام را بدهیم و چرخ بگیریم، بهتر است چرخ را از نو اختراع کنیم
        ساعت کار بدن اکثر انسان ها کمتر از 800000 ساعت است و بعد از آن از کار می افتد

        دیدگاه


          #19
          پاسخ : محاسبه OCR در تایمر

          طراح جان، این 50 نانو ثانیه رو چطوری حساب کردی؟! کلا یه توضیح ساده تر میدی؟!
          http://ceworld.ir/images/ads/dornablogcom_ads.gif

          دیدگاه


            #20
            پاسخ : محاسبه OCR در تایمر

            اگه اجازه بدین من یکم شفاف ساری کنم!
            با بالا بردن فرکانس تایمر، دوره تناوب (یا پله زمانی) رو کاهش میدیم. با فرض 20 مگاهرتز بودن فرکانس تایمر، دوره تناوبش میشه 50 نانو ثانیه. (طبقه گفته طراح رفتم تو حوزه زمان) یعنی هر 50 نانو ثانیه یه لبه ایجاد و شمارش میشه. بنابراین با هر واحد اضافه کردن به OCR نتیجه این میشه که 2*50 نانو ثانیه به دوره تناوب پالس خروجی اضافه میشه. (ضریب 2 میدونین از کجا اومد دیگه؟ یه فلیپ فلاپ T فرض کنید که باهاش فرکانس رو نصف میکنن.)
            خوب حالا فرض کنید فرکانس تایمر 1 مگاهرتز باشه. در اینصورت دوره تناوبش میشه 1 میکرو ثانیه. با هر واحدی که به OCR اضافه کنیم، 2 میکرو ثانیه به دوره تناوب پالس خروجی اضافه میشه. با قبلی مقایسه کنید. تغییرات خیلی بیشتر شد. و این یعنی دقت کمتر.
            بنابراین فرکانس بالاتر دقت بیشتری ایجاد میکنه، اما باعث میشه نتونیم فرکانس های پایین تولید کنین (همونطور که طراح گفت حداکثر زمان ممکن محدود میشه) چون می تونیم حداکثر 255 پله زمانی به پالس خروجی اضافه کنیم و از اونجایی که پله های زمانی رو کوچیک کردیم، فرکانس با نسبت کمتری پایین میاد. نتیجه بعدی اینکه اگه از تایمر 16 بیتی استفاده کنیم میتونیم تعداد پله زمانی بیشتری اضافه کنیم و به فرکانس های پایینتر (یا زمان بزرگتر) دست پیدا کنیم.
            البته من هیچکدوم اینا رو نمی دونستم. از حرف های طراح عزیز اینطور اسنتباط کردم
            https://www.linkedin.com/in/mohammadhosseini69

            http://zakhar.blog.ir

            دیدگاه


              #21
              پاسخ : محاسبه OCR در تایمر

              با تشکر از توضیحات خوب جناب محمد حسینی.
              به دلیل مطرح شدن این موارد و فنی شدن بحث، توضیحات دیگری اضافه می شود:
              استفاده از تایمر ممکن است به منظور ساخت شکل موج در خروجی بصورت سخت افزاری باشد و یا انجام عملیات نرم افزاری در یک فاصله زمانی دقیق مد نظر باشد. اگر این شکل موج یا فاصله زمانی انجام عملیات بخواهد کاملا دقیق باشد، باید حتما از مد CTC استفاده شود.
              زیرا اگرچه در مد Normal برای ساخت زمان مورد نظر می توان بعد از ایجاد وقفه سرریز، مقداری غیر از صفر را در داخل تایمر بوسیله خطوط برنامه قرار داد. اما واقعیت آن است که از زمانی که تایمر صفر می شود تا وقتی که مقدار جدید توسط نرم افزار در داخل آن قرار می گیرد، مدت زمانی سپری می شود. بنابراین برای ساخت یک زمان دقیق که کوچکترین خطایی در آن وجود نداشته باشد باید این زمان اضافی در مقدار اولیه تایمر لحاظ شود و چنین کاری فقط در سطح برنامه نویسی اسمبلی ممکن است.
              اما در مد CTC بعد از مساوی شدن مقدار تایمر با OCRx، تایمر بصورت خودکار به صفر می رسد و به کار خود ادامه می دهد. برای تولید شکل موج دقیق می توان پین خروجی متناظر OCRx را طوری برنامه ریزی کرد که به محض ایجاد شرایط Compare مثلا Toggle شود و خطایی هم در این شکل موج وجود نخواهد داشت. زیرا منبع تولید آن یک واحد سخت افزاری است.
              از آنجایی که دوستانی که در این بحث شرکت می کنند افراد علاقه مند و فعالی هستند و به نظر می رسد که پیگیر ریزه کاری ها و نکات خاص تایمرها باشند، نظر دوستان را به تاپیکی که چند ماه پیش در این انجمن قرار داده شد جلب می کنم که حاوی نکته بسیار خاصی در مورد تایمرها بود. اما از آنجا که جو این انجمن در همان حد Config TIMER تشخیص داده شد، برای ادامه آن پیگیری انجام نشد. زیرا این نکات برای کسانی باید مطرح شود که موضوعیتی برای آنها داشته باشد و در آن زمان چنین مخاطبانی یافت نشد:

              http://www.eca.ir/forum2/index.php?topic=37267
              اوژن: به معنای افکننده و شکست دهنده است
              دانایی، توانایی است-Knowledge is POWER
              برای حرفه ای شدن در الکترونیک باید با آن زندگی کرد
              وضعمان بهتر می شود، اگر همه نسبت به جامعه و اطراف خود مسوول باشیم و نگوئیم به ما چه
              قوی شدن و خوب ماندن - خوبی کردن به دیگران یک لذت ماندگار است
              اگر قرار باشد نفت و منابع خام را بدهیم و چرخ بگیریم، بهتر است چرخ را از نو اختراع کنیم
              ساعت کار بدن اکثر انسان ها کمتر از 800000 ساعت است و بعد از آن از کار می افتد

              دیدگاه


                #22
                پاسخ : محاسبه OCR در تایمر

                بچه ها اینو ببینید:


                کد:
                #include<mega16.h>
                #define xtal 8000000
                void main()
                {
                DDRB=0xFF;
                PORTB=0x00;
                TCNT0=0x00;
                TCCR0=0B00010010; //toggle OC0 on compare match
                OCR0=0x63; //OCR0=99
                while(1);
                }


                گفته که برنامه ایجاد پالس مربعی با T = 512 میکرو ثانیه روی OC0

                این 512 میکرو ثانیه یعنی چی؟ یه توضیحی میدید؟
                http://ceworld.ir/images/ads/dornablogcom_ads.gif

                دیدگاه


                  #23
                  پاسخ : محاسبه OCR در تایمر

                  معمای avr طرح میکنی؟!
                  با توجه به تنظیمات رجیستر TCCR0 : فرکانس تایمر یک هشتم کلاک میکرو است. تایمر در مد NORMAL و پایه خروجی هم درحالت Toggle قرار گرفته.
                  کلاک میکرو 8 مگاهرتز ، بنابراین فرکانس تایمر میشه 1 مگاهرتز
                  در مد Normal تایمر بصورت افزایشی عمل شمارش رو انجام میده تا به حداکثر مقدار خود (255 در این تایمر) برسه. یعنی به OCR کاری نداره! (بنظر میرسه OCR0 تو این کد واسه رد گم کنیه!!) خوب پس میشه از همون فرمول بدست آوردن فرکانس در مد CTC استفاده کرد. با این فرق که OCR رو باید 255 بذاریم. فرکانس رو که بدست بیاریم و معکوس کنیم میشه 512 میکرو ثانیه دوره تناوب پالس خروجی
                  https://www.linkedin.com/in/mohammadhosseini69

                  http://zakhar.blog.ir

                  دیدگاه

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