اطلاعیه

Collapse
No announcement yet.

تولید زمانهای دقیق توسط تایمر میکرو امکان داره؟

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

    تولید زمانهای دقیق توسط تایمر میکرو امکان داره؟

    با سلام
    یه چیزی هستش که هر چی فکر میکنم به جواب نمیرسم کسی از دوستان میتونه کمکم کنه
    سوالم این هستش که فرض کنید شما تایمری را راه اندازی کردین و وقتی OverFlow میشه به اون ادرس سرویس روتین وقفه پرش میکنه و برنامه ای که اونجا نوشتیم اجرا میکنه.خوب مشکل من اینجا شروع میشه
    به فرض اینکه هر 1 میلی ثانیه وقفه رخ بده.خوب از وقتی که میکرو به ادرس وقفه پرش میکنه و در انجا چند خط برنامه را اجرا میکنه مطمئنا مقداری زمان نیز صرف اجرا این چند خط شده و مجددا از وقفه برمیگرده.خوب این زمان برای دفعه بعد نمیتونه دیگه 1 میلی ثانیه باشه
    درست میگم یا من اشتباه میکنم؟

    #2
    پاسخ : تولید زمانهای دقیق توسط تایمر میکرو امکان داره؟

    سلام
    حرف شما درسته
    وقفه و دستوراتی که تو وقفه اجرا میشن زمان میبرن و اگه موقع اجرا وقفه، تایمر هنوز در حال شمارش باشه، خوب مقداری خطا ایجاد میکنه.
    برای رفع این مشکل یه راه اینه که میزان زمان شما از پریود کلاک میکرو بیشتر باشه تا این زمان خیلی خطا تو محاسبات شما ایجاد نکنه مثلا شما فرکانس 8 مگ برای میکرو در نطر بگیرین و بعد فرکانس تایمر رو مثلا 1 مگ یا کمتر بگیرین در این صورت دقت تایمر شما کمتر از فرکانس میکرو و خطایی تو محاسبات شما زیاد ایجاد نمیشه. از طرفی معمولا دستورات درون وقفه رو تعداد کمی قرار میدن تا مدت زمان وقفه کم باشه.
    در کل بهتره تعداد دستورات رو کم و فرکانس تایمرتون هم کمتر از فرکانس میکرو در نطر بگیرین.

    دیدگاه


      #3
      پاسخ : تولید زمانهای دقیق توسط تایمر میکرو امکان داره؟

      سلام
      در مواردی که خیلی محاسبه زمان زمان مهم بشه برنامه نویس با مراجعه به دیتاشیت میکرو که کلاک لازم برای اجرای هر دستوردر اون اومده محاسبه میکنه که سی پی یو چند کلاک برای اجرای اون نیاز داره اونوقت اون مقدار کلاک رو از رجیستر تایمر کم میکنه و به زمان مورد نظر میرسه که باید به زبان اسمبلی مسلط باشه

      دیدگاه


        #4
        پاسخ : تولید زمانهای دقیق توسط تایمر میکرو امکان داره؟

        این رو هم یادتون باشه که دقت عملکرد کریستالها و رزوناتورها، تا حدی وابسته به دمای محیط و حتی پالسهای الکترومغناطیسی و میدانهای الکتریکی قوی محیط است.

        دیدگاه


          #5
          پاسخ : تولید زمانهای دقیق توسط تایمر میکرو امکان داره؟

          سلام دوستان
          با عرض معذرت، به نظر بنده دو پاسخ اول اشتباه است.

          نوشته اصلی توسط فرید الدین میرزایی
          وقفه و دستوراتی که تو وقفه اجرا میشن زمان میبرن و اگه موقع اجرا وقفه، تایمر هنوز در حال شمارش باشه، خوب مقداری خطا ایجاد میکنه.
          نوشته اصلی توسط alielcr
          در مواردی که خیلی محاسبه زمان زمان مهم بشه برنامه نویس با مراجعه به دیتاشیت میکرو که کلاک لازم برای اجرای هر دستوردر اون اومده محاسبه میکنه که سی پی یو چند کلاک برای اجرای اون نیاز داره اونوقت اون مقدار کلاک رو از رجیستر تایمر کم میکنه و به زمان مورد نظر میرسه که باید به زبان اسمبلی مسلط باشه
          ببینید توی میکروکنترلر کلاک تایمر سخت افزاری تولید میشه و شمارنده تایمر نیز به همین روش جلو می رود. اصلا فلسفه و امتیاز وجود تایمر نیز همین است.
          اولا اگر قرار بود مشغول بودن پردازنده باعث توقف شمارنده تایمر شود (حال چه در روتین وقفه، چه اجرای دستورات توابع عادی) که دیگه تایمر فایده ای نداشت.
          ثانیا اگر قرار بود تایمر نرم افزاری اجرا شود خب چرا میکروها محدودیت تایمر دارند؟ به جای چند تایمر انگشت شمار مثلا 50 تا تایمر میزاشتن !!!
          ثالثا همیشه زمان اجرای یک کد ثابت نیست و ممکنه بسته به نوع کد، شرط هایی اجرا شوند و زمان اجرای برنامه کم یا زیاد شوند و در این صورت زمان سرریز تایمر هر بار متفاوت خواهد بود !!!
          اگه به بخش کلاک تایمر دیتاشیت های AVR هم مراجعه کنید همین مطلب را تصدیق می کند.


          شمارنده تایمر که سریز می شود، روتین وقفه اجرا می شود. همزمان نیز شمارنده صفر شده و شمارش ادامه پیدا می کند. در شکل بالا دقت کنید. در لحظه ایجاد وقفه که با قرمز مشخص شده است مقدار شمارنده ریست شده و برابر صفر یا مقدار مینیمم تعریف شده BOTTOM می گردد و در پالس بعدی BOTTOM+1 می شود. پس شمارش ادامه دارد. پردازنده هم جای دیگر مشغول پردازش روتین وقفه است.
          فقط شما به عنوان کدنویس باید توجه داشته باشید که زمان اجرای روتین وقفه در بدترین شرایط و طولانی ترین حالت کمتر از زمان سرریز وقفه باشد.

          نوشته اصلی توسط مهندس نوآور
          این رو هم یادتون باشه که دقت عملکرد کریستالها و رزوناتورها، تا حدی وابسته به دمای محیط و حتی پالسهای الکترومغناطیسی و میدانهای الکتریکی قوی محیط است.
          تایید می شود. متاسفانه تمامی خطای زمان سنجی میکروکنترلری از همین موارد نشات می گیرد.
          بانک اطلاعاتی مسابقات رباتیک ایران
          http://robocenter.ir/Match/DefaultMatch.aspx
          آموزش جامع ساخت ربات به زبان فارسی در 110 صفحه
          http://www.4shared.com/document/u_72uaga/Robotic_Mechatronic.html

          دیدگاه


            #6
            پاسخ : تولید زمانهای دقیق توسط تایمر میکرو امکان داره؟

            نوشته اصلی توسط saeed_h
            سلام دوستان
            با عرض معذرت، به نظر بنده دو پاسخ اول اشتباه است.

            ببینید توی میکروکنترلر کلاک تایمر سخت افزاری تولید میشه و شمارنده تایمر نیز به همین روش جلو می رود. اصلا فلسفه و امتیاز وجود تایمر نیز همین است.
            اولا اگر قرار بود مشغول بودن پردازنده باعث توقف شمارنده تایمر شود (حال چه در روتین وقفه، چه اجرای دستورات توابع عادی) که دیگه تایمر فایده ای نداشت.
            ثانیا اگر قرار بود تایمر نرم افزاری اجرا شود خب چرا میکروها محدودیت تایمر دارند؟ به جای چند تایمر انگشت شمار مثلا 50 تا تایمر میزاشتن !!!
            ثالثا همیشه زمان اجرای یک کد ثابت نیست و ممکنه بسته به نوع کد، شرط هایی اجرا شوند و زمان اجرای برنامه کم یا زیاد شوند و در این صورت زمان سرریز تایمر هر بار متفاوت خواهد بود !!!
            اگه به بخش کلاک تایمر دیتاشیت های AVR هم مراجعه کنید همین مطلب را تصدیق می کند.


            شمارنده تایمر که سریز می شود، روتین وقفه اجرا می شود. همزمان نیز شمارنده صفر شده و شمارش ادامه پیدا می کند. در شکل بالا دقت کنید. در لحظه ایجاد وقفه که با قرمز مشخص شده است مقدار شمارنده ریست شده و برابر صفر یا مقدار مینیمم تعریف شده BOTTOM می گردد و در پالس بعدی BOTTOM+1 می شود. پس شمارش ادامه دارد. پردازنده هم جای دیگر مشغول پردازش روتین وقفه است.
            فقط شما به عنوان کدنویس باید توجه داشته باشید که زمان اجرای روتین وقفه در بدترین شرایط و طولانی ترین حالت کمتر از زمان سرریز وقفه باشد.

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

            دیدگاه


              #7
              پاسخ : تولید زمانهای دقیق توسط تایمر میکرو امکان داره؟

              در داخل روتین تایمر نباید از دستوراتی که تاخیر میندازن استفاده کرد
              معمولاً داخل روتین تایمر یک فلگ رو صفر و یک میکنن و یا از دستوراتی استفاده میکنند که تایمر overflow نشه و زمان اجرای دستورات داخل روتین از زمان تایمر زیاد نشه
              مثلا اگه روتین تایمر ما هر یک ثانیه اجرا میشه
              از یه دستور dely_ms(1000) نمیتونی استفاده کنی
              البته و صد البته داخل روتین وقفه ها از دستورات تاخیر به شدت باید پرهیز کنید
              موفق باشید
              برای آنکه کاری امکان پذیر گردد دیدگان دیگری لازم است، دیدگانی نو

              دیدگاه


                #8
                پاسخ : تولید زمانهای دقیق توسط تایمر میکرو امکان داره؟

                [quote][quote author=saeed_h link=topic=120308.msg785712#msg785712 date=1461687494]
                سلام دوستان
                با عرض معذرت، به نظر بنده دو پاسخ اول اشتباه است.

                ببینید توی میکروکنترلر کلاک تایمر سخت افزاری تولید میشه و شمارنده تایمر نیز به همین روش جلو می رود. اصلا فلسفه و امتیاز وجود تایمر نیز همین است.
                اولا اگر قرار بود مشغول بودن پردازنده باعث توقف شمارنده تایمر شود (حال چه در روتین وقفه، چه اجرای دستورات توابع عادی) که دیگه تایمر فایده ای نداشت.
                ثانیا اگر قرار بود تایمر نرم افزاری اجرا شود خب چرا میکروها محدودیت تایمر دارند؟ به جای چند تایمر انگشت شمار مثلا 50 تا تایمر میزاشتن !!!
                ثالثا همیشه زمان اجرای یک کد ثابت نیست و ممکنه بسته به نوع کد، شرط هایی اجرا شوند و زمان اجرای برنامه کم یا زیاد شوند و در این صورت زمان سرریز تایمر هر بار متفاوت خواهد بود !!!
                اگه به بخش کلاک تایمر دیتاشیت های AVR هم مراجعه کنید همین مطلب را تصدیق می کند.


                شمارنده تایمر که سریز می شود، روتین وقفه اجرا می شود. همزمان نیز شمارنده صفر شده و شمارش ادامه پیدا می کند. در شکل بالا دقت کنید. در لحظه ایجاد وقفه که با قرمز مشخص شده است مقدار شمارنده ریست شده و برابر صفر یا مقدار مینیمم تعریف شده BOTTOM می گردد و در پالس بعدی BOTTOM+1 می شود. پس شمارش ادامه دارد. پردازنده هم جای دیگر مشغول پردازش روتین وقفه است.
                فقط شما به عنوان کدنویس باید توجه داشته باشید که زمان اجرای روتین وقفه در بدترین شرایط و طولانی ترین حالت کمتر از زمان سرریز وقفه باشد.

                تایید می شود. متاسفانه تمامی خطای زمان سنجی میکروکنترلری از همین موارد نشات می گیرد.

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

                دیدگاه


                  #9
                  پاسخ : تولید زمانهای دقیق توسط تایمر میکرو امکان داره؟

                  دوستان من در مورد ایجاد تاخیر در تایمر اشتباه کردم :sad:
                  همونطور که دوستمون آقای saeed_h گفتن تایمر سخت افزاریه و وقفه در اون تاخیر ایجاد نمیکنه
                  اما ممکنه که بخوایم تغییراتی در تایمر بدیم و یا در برخی موارد استفاده از تایمر تعداد پالس هایی که در وقفه ایجاد میشه در نتیجه نهایی تاثیر میذاره متاسفانه یادم نمیاد کی و برای چه کاری به این موضوع برخوردم :angry:
                  ولی در کل وقفه هرچی دستوراتش سریعتر اجرا بشن بهتره :smile:
                  مطلب قبل رو حدف نکردم تا سلسله بحث از بین نره

                  دیدگاه


                    #10
                    پاسخ : تولید زمانهای دقیق توسط تایمر میکرو امکان داره؟

                    نوشته اصلی توسط mostafa6369
                    یعنی با این تفاسیری که شما فرمودین.هرچی هم دستورات داخل روتین وقفه باشه (یک خط یا چند خط ) فرقی نمیکه وتوی زمان بندی تایمر خللی وارد نمیکنه .درسته؟.
                    سلام.
                    تا زمانی که زمان اجرای دستورات روتین وقفه شما از زمان تایمر کمتر باشد هیچ مشکلی پیش نمی آید. حالا چه یک خط، چه هزار خط. من خودم دستگاه نیمه صنعتی دارم که باید 24 ساعته وسط بیابان کار کنه، کل کارش هم بر اساس تایمر هست و هر 5 میلی ثانیه یک تایمر اجرا می شود و حدود 400 خط دستورات سنگین محاسباتی درون روتین وقفه اجرا می شود. اجرای این دستورات با کریستال 14.7456 مگ حدود 1.5 میلی ثانیه زمان می بره که کمتر از 5 میلی ثانیه هست. پس مشکلی پیش نمی یاد.

                    همیشه سعی کنید تناسبی بین فرکانس میکرو، زمان تایمر و حجم برنامه درون روتین رعایت کنید. مثلا همین برنامه من حدود 30 درصد وقت پردازنده وقف پردازش روتین وقفه می شود و 70 درصد بقیه آزاد و به سایر توابع می رسد. فرضا اگر از 5 میلی ثانیه، 4.8 میلی ثانیه یعنی 96% بابت تایمر صرف می شد، عملا باعث کندی شدید میکرو در اجرای سایر دستورات یا به ظاهر هنگی میکرو می شد.

                    حالا چطوری بفهمیم که روتین وقفه چقدر زمان نیاز داره ؟ راه حل اول و علمیش همون هست که دوستمون alielcr گفتند. یعنی تعداد سیکل ماشین هر دستور اسمبلی برنامه روتین را محاسبه کنیم. این روش نیاز به تسلط به زبان اسمبلی و تحلیل کامل برنامه و در نظر گرفتن طولانی ترین حالت اجرای شرط های برنامه دارد.
                    راه ساده تر و عملی که من از دوستان همین انجمن یاد گرفتم اینه که شما ابتدای روتین وقفه، یک پایه خروجی میکرو را یک کنید و آخر روتین آن را صفر کنید. حالا کافیه با اوسیلوسکوپ زمان یک بودن آن پایه را اندازه گیری کنید.
                    بانک اطلاعاتی مسابقات رباتیک ایران
                    http://robocenter.ir/Match/DefaultMatch.aspx
                    آموزش جامع ساخت ربات به زبان فارسی در 110 صفحه
                    http://www.4shared.com/document/u_72uaga/Robotic_Mechatronic.html

                    دیدگاه


                      #11
                      پاسخ : تولید زمانهای دقیق توسط تایمر میکرو امکان داره؟

                      نوشته اصلی توسط saeed_h
                      سلام.
                      تا زمانی که زمان اجرای دستورات روتین وقفه شما از زمان تایمر کمتر باشد هیچ مشکلی پیش نمی آید. حالا چه یک خط، چه هزار خط. من خودم دستگاه نیمه صنعتی دارم که باید 24 ساعته وسط بیابان کار کنه، کل کارش هم بر اساس تایمر هست و هر 5 میلی ثانیه یک تایمر اجرا می شود و حدود 400 خط دستورات سنگین محاسباتی درون روتین وقفه اجرا می شود. اجرای این دستورات با کریستال 14.7456 مگ حدود 1.5 میلی ثانیه زمان می بره که کمتر از 5 میلی ثانیه هست. پس مشکلی پیش نمی یاد.

                      همیشه سعی کنید تناسبی بین فرکانس میکرو، زمان تایمر و حجم برنامه درون روتین رعایت کنید. مثلا همین برنامه من حدود 30 درصد وقت پردازنده وقف پردازش روتین وقفه می شود و 70 درصد بقیه آزاد و به سایر توابع می رسد. فرضا اگر از 5 میلی ثانیه، 4.8 میلی ثانیه یعنی 96% بابت تایمر صرف می شد، عملا باعث کندی شدید میکرو در اجرای سایر دستورات یا به ظاهر هنگی میکرو می شد.

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

                      دیدگاه

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