اطلاعیه

Collapse
No announcement yet.

آیا استفاده از 3 تایمر همزمان مشکلی ایجاد نمیکنه؟

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

    آیا استفاده از 3 تایمر همزمان مشکلی ایجاد نمیکنه؟

    من میخوام یه مدار بسازم که هر 3 تایمر میکرو مشغول میشه
    تایمر صفر برای PWM
    تایمر 1 برای رفرش Seven-segment
    تایمر 2 برای ایجاد 1 ثانیه با prescaler=128
    علاوه بر اینها 2 تا از اینتراپتهای خارجی هم فعاله
    و همه اینها با هم در یک زمان باید کار کنن
    آیا این مشکلی ایجاد نمیکنه و همه با هم کار میکنن و برنامه به خوبی اجرا میشه؟

    #2
    پاسخ : آیا استفاده از 3 تایمر همزمان مشکلی ایجاد نمیکنه؟

    سلام دوست عزیز
    اگر شمااز بیشتر از 1 اینتراپت توی میکروی AVR استفاده کنید هر کدام که اول اجرا بشه بقیه اینتراپت ها رو غیر فعال میکنه
    این بستگی داره که اینتراپت های خارجی رو برای چی استفاده کردین و توی چه MODE استفاده شدن و مدت زمان اجرای زیر برنامه هر کدام از اینتراپت ها چقدر است

    موفق باشی

    دیدگاه


      #3
      پاسخ : آیا استفاده از 3 تایمر همزمان مشکلی ایجاد نمیکنه؟

      نوشته اصلی توسط behi88
      سلام دوست عزیز
      اگر شمااز بیشتر از 1 اینتراپت توی میکروی AVR استفاده کنید هر کدام که اول اجرا بشه بقیه اینتراپت ها رو غیر فعال میکنه
      در مورد اینتراپت ها ممنون، اونها هیچ موقع با هم فعال نمیشه و یکی یکی فعال میشن
      در مورد استفاده همزمان از تمام تایمرها کسی کار نکرده؟

      دیدگاه


        #4
        پاسخ : آیا استفاده از 3 تایمر همزمان مشکلی ایجاد نمیکنه؟

        در مورد سوال شما موارد زیر قابل ذکر است:

        1-برای refresh کردن seven-segment و ایجاد زمان 1 ثانیه لزوما احتیاجی به استفاده از 2 تایمر مستقل نیست و شما می توانید عملیات refresh را در فاصله زمانی انجام دهید که مضرب صحیحی از آن برابر 1 ثانیه شود و این مضرب را با یک شمارنده نرم افزاری بسازید. مثلا اگر در هر 1 میلی ثانیه عملیات refresh انجام می شود،هر 1000 بار یکبار که برابر 1 ثانیه می شود عملیات مورد نظر خود را انجام دهید. البته معمول است که برای دقیق بودن زمان ساخته شده تایمر را در مد CTC قرار دهید.
        2- در استفاده از وقفه ها همزمان با اجرای حلقه اصلی، دو مسئله تعیین کننده است. اول تعداد وقوع وقفه در واحد زمان و دوم مدت زمان اجرای سرویس روتین هروقفه(همانگونه که دوست عزیز behi88 فرمودند). بنابراین پارامتر تعیین کننده، حاصلضرب تعداد وقوع هر وقفه در ثانیه ضرب در مدت زمان اجرای هر وقفه است. پس صرف نظر از این که یک وقفه یا بیشتر داشته باشیم اگر CPU به گونه ای LOAD شود که قادر به پاسخگویی به اجرای حلقه اصلی و یک وقفه یا بیشتر نباشد، اجرای نرم افزار شما با مشکل مواجه می شود و اگر همه وقفه های موجود هم فعال باشند اما CPU بتواند جوابگوی مدت زمان اجرای کل وقفه ها و اجرای حلقه اصلی باشد، مسئله ای بوجود نمی آید.
        3- به ازای یک تعداد وقفه مشخص، عواملی مانند فرکانس کلاک CPU، بهینه بودن کد نویسی و نوع کامپایلر هم از عواملی است که در صحت عملکرد نرم افزار شما تاثیر بسزایی دارد و برنامه نویسی به زبان اسمبلی، برنده بلامنازع کاربردهایی است که LOADشدن CPU به حد مرزی می رسد و از حداکثر توان پردازشی آن استفاده می شود.
        اوژن: به معنای افکننده و شکست دهنده است
        دانایی، توانایی است-Knowledge is POWER
        برای حرفه ای شدن در الکترونیک باید با آن زندگی کرد
        وضعمان بهتر می شود، اگر همه نسبت به جامعه و اطراف خود مسوول باشیم و نگوئیم به ما چه
        قوی شدن و خوب ماندن - خوبی کردن به دیگران یک لذت ماندگار است
        اگر قرار باشد نفت و منابع خام را بدهیم و چرخ بگیریم، بهتر است چرخ را از نو اختراع کنیم
        ساعت کار بدن اکثر انسان ها کمتر از 800000 ساعت است و بعد از آن از کار می افتد

        دیدگاه


          #5
          پاسخ : آیا استفاده از 3 تایمر همزمان مشکلی ایجاد نمیکنه؟

          نوشته اصلی توسط جواب ندی قهر میکنما...
          من میخوام یه مدار بسازم که هر 3 تایمر میکرو مشغول میشه
          تایمر صفر برای PWM
          تایمر 1 برای رفرش Seven-segment
          تایمر 2 برای ایجاد 1 ثانیه با prescaler=128
          علاوه بر اینها 2 تا از اینتراپتهای خارجی هم فعاله
          و همه اینها با هم در یک زمان باید کار کنن
          آیا این مشکلی ایجاد نمیکنه و همه با هم کار میکنن و برنامه به خوبی اجرا میشه؟
          اصلا مشکلی ایجاد نمیکنه
          نگران نباش



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

          دیدگاه


            #6
            پاسخ : آیا استفاده از 3 تایمر همزمان مشکلی ایجاد نمیکنه؟

            نوشته اصلی توسط behi88
            سلام دوست عزیز
            اگر شمااز بیشتر از 1 اینتراپت توی میکروی AVR استفاده کنید هر کدام که اول اجرا بشه بقیه اینتراپت ها رو غیر فعال میکنه
            این بستگی داره که اینتراپت های خارجی رو برای چی استفاده کردین و توی چه MODE استفاده شدن و مدت زمان اجرای زیر برنامه هر کدام از اینتراپت ها چقدر است

            موفق باشی
            به هیچ عنوان اینطوری که می گی نیست :redface:

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

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

            دیدگاه


              #7
              پاسخ : آیا استفاده از 3 تایمر همزمان مشکلی ایجاد نمیکنه؟

              نه اینطوریا که فکر می کنیدهم نیست اگه تایمر ها باهم کار کنن مشکلی پیش نمی آد اما اگه اینتراپت ها کار کنن در صورتی که بیفتن رو اینتراپت تایمر شما زمان رو از دست میدید و البته یه توصیه می کنم اصلا تو اینتراپت ها از delay استفاده نکن چون باعث رو هم افتادن اینتراپت ها میشه و البته کار کردن 3 تا تایمر باهم باعث طولانی تر شدن delay ها میشه و کلا مشکل ایجاد میکنه
              من تو یه پروژه ی بزرگ که یک سال طول کشید این مشکل رو داشتم ...
              Share OR Die

              دیدگاه


                #8
                پاسخ : آیا استفاده از 3 تایمر همزمان مشکلی ایجاد نمیکنه؟

                کسی متوجه سوال اصلی من نشد!!!!!!!!!!!
                آیا استفاده از 3 تایمر به صورت همزمان مشکلی ایجاد نمیکنه؟
                خواهشا کسی که کار کرده و تجربه این مورد رو داشته جواب بده.
                ممنون.

                دیدگاه


                  #9
                  پاسخ : آیا استفاده از 3 تایمر همزمان مشکلی ایجاد نمیکنه؟

                  عزیر دل برادر مشکلی ایجاد نمی کنه وگر نه 3 تا نمی ذاشتن

                  ببین این ها بخش ها جدا از هسته هستن فقط یک بار رجیستر هاشون مقدار دهی میشه و دیگه cpu باهاشون کاری نداره خودشون کارشون رو می کنن مثل اینکه 3 تا کار رو بدی 3 نفر انجام بدن

                  هیچ تداخلی ندارن و هیچ مشکلی نیست
                  من خودم اینکار رو کردم خیال شما هم جمع باشه

                  دیدگاه


                    #10
                    پاسخ : آیا استفاده از 3 تایمر همزمان مشکلی ایجاد نمیکنه؟

                    این طوری نمیشه ، انگار قرار نیست به نتیجه برسیم
                    بهتره شما برنامه رو بنویسی و نتیجه رو عملی ببینی
                    نتیجش هرچی شد بگو...
                    Share OR Die

                    دیدگاه


                      #11
                      پاسخ : آیا استفاده از 3 تایمر همزمان مشکلی ایجاد نمیکنه؟

                      نوشته اصلی توسط Mahdi.N
                      این طوری نمیشه ، انگار قرار نیست به نتیجه برسیم
                      بهتره شما برنامه رو بنویسی و نتیجه رو عملی ببینی
                      نتیجش هرچی شد بگو...
                      توی همین موضوع چند بار بحث شده
                      اتفاقا به نتیجه هم رسیده
                      من خودم نمونه برنامه رو نوشتم 2 تا وقفه خارجی و 1 تایمر (یه سرچی بکن پیدا می کنی )
                      البته 3 تا تایمر هم مشکل نداره
                      از اونی که شما می گی هم مشکل تر حتی 2 تا وقفه خارجی با هم در یک زمان عمل کرده و همش جواب داده
                      شما اگه برنامه ات مشکل داره بگو مشکل رو حل کنیم :mrgreen: :mrgreen: :mrgreen:

                      این برنامه عملی بوده و جواب هم داده
                      :mrgreen: :mrgreen: :mrgreen:








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

                      دیدگاه


                        #12
                        پاسخ : آیا استفاده از 3 تایمر همزمان مشکلی ایجاد نمیکنه؟

                        با توجه به بحث های مطرح شده، به نظر می رسد باید توضیحات بیشتری داده شود.
                        روش عملکرد یک میکروکنترلر مانند AVR به این صورت است که با وارد شدن پالسهای ساعت به CPU، یک دستورالعمل از حافظه برنامه که از نوع flash است خوانده و بعد از تفسیر آن، توسط CPU میکروکنترلر اجرا می شود که به این عمل fetch-execute می گویند. اگر وقفه ای برای میکروکنترلر اتفاق بیافتد، معنای آن این است که CPU دستورالعمل بعدی را از آدرس مشخصی که در هر شماره AVR مقدار از پیش تعیین شده ای است، اجرا می کند. حال این وقفه مربوط به هر یک از اجزای داخلی میکروکنترلر که باشد،برنامه ای که در آن آدرس مشخص توسط برنامه نویس نوشته و روی flash برنامه ریزی می شود، اجرا می شود. به این برنامه اصطلاحا interrupt service routine می گویند. هنگام اجرای هر روتین وقفه، سایر وقفه ها disable می شوند و تقاضای اجرای آنها توسط CPU پذیرفته نمی شود(مگر آنکه دستور اسمبلی sei در این روتین اجرا شود). اما از آنجایی که هر تقاضای وقفه ای دارای یک flag داخلی برای CPU است، نپذیرفتن وقفه توسط CPU به معنای از بین رفتن وقفه نیست و بعد از بازگشت CPU از پاسخ دهی به روتین وقفه جاری،به سایر وقفه های درخواستی پاسخ داده می شود که به معنای پرش CPU به آدرس وقفه مورد نظر است.
                        حال مشکل ممکن است در چه شرایطی ایجاد شود؟ در این شرایط که اگر زمانی که CPU صرف می کند تا به یک یا چند وقفه پاسخ دهد، به دلیل زیاد بودن حجم کد نوشته شده به حدی زیاد باشد که CPU به اصطلاح نتواند همه درخواست ها را handle کند. به عنوان مثال فرض کنید شما فقط یک وقفه تایمر را فعال کنید که هر یک میلی ثانیه اتفاق می افتد و همزمان هم بخواهید در حلقه اصلی برنامه کاری را انجام دهید. اگر کدی که در روتین وقفه می نویسید از نظر زمان اجرا به گونه ای باشد که اجرای آن بیش از یک میلی ثانیه طول بکشد(مثلا 2 میلی ثانیه)، نرم افزار شما در اجرا به این مشکل برخورد می کند که دائما یک دستور(دستور اسمبلی) را از حلقه اصلی اجرا میکند و بعد به روتین وقفه پرش می کند و باز یک دستور اسمبلی را اجرا می کند و مجددا به روتین وقفه پرش می کند و به همین ترتیب و به همین دلیل نمی تواند کد واقع در حلقه اصلی را با سرعت زیاد اجرا کند و همچنین وقفه تایمر نمی تواند در زمان صحیح خود که یک میلی ثانیه است، اتفاق بیافتد.
                        بنابراین مهم نیست که شما از 3 تایمر استفاده کنید (یا حتی 4 تایمر در mega64 و مانند آن) و حتی مهم نیست که در آن واحد از تمام وقفه هایی که در یک شماره AVR وجود دارد بصورت همزمان استفاده کنید. بلکه مهم این است که مجموع کدهای معادلی که برای وقفه ها ایجاد می شود به حدی باشد که CPU بتواند همه آنها را اجرا کند و زمان هم کم نیاورد.
                        پس پاسخ سوال شما بطور مشخص این است که استفاده همزمان از 3 تایمر ممکن است مشکل ایجاد کند و ممکن است مشکلی ایجاد نکند و این به کدی که شما می نویسید بستگی دارد.چنانکه میتوان برنامه ای نوشت که حتی در استفاده از یک وقفه هم مشکل پیدا کند و نتواند وقفه را handle کند و این به حجم کد و زمان اجرا و تعداد وقوع وقفه در واحد زمان بستگی دارد.
                        نکته آخر اینکه در برنامه نویسی به زبان های High Level مانند BASIC و C، برنامه نویس از کد معادل تولید شده برای هر دستور و حجم و زمان اجرای آن اطلاعی ندارد و بنابراین واقعا نمی تواند قضاوت کند که برنامه ای که نوشته CPU را به حدی زیر بار می برد که اجرای برنامه با مشکل مواجه شود یا نه.مگر آنکه به کد معادل تولید شده برای میکروکنترلر توسط کامپایلر مراجعه شود.
                        اوژن: به معنای افکننده و شکست دهنده است
                        دانایی، توانایی است-Knowledge is POWER
                        برای حرفه ای شدن در الکترونیک باید با آن زندگی کرد
                        وضعمان بهتر می شود، اگر همه نسبت به جامعه و اطراف خود مسوول باشیم و نگوئیم به ما چه
                        قوی شدن و خوب ماندن - خوبی کردن به دیگران یک لذت ماندگار است
                        اگر قرار باشد نفت و منابع خام را بدهیم و چرخ بگیریم، بهتر است چرخ را از نو اختراع کنیم
                        ساعت کار بدن اکثر انسان ها کمتر از 800000 ساعت است و بعد از آن از کار می افتد

                        دیدگاه


                          #13
                          پاسخ : آیا استفاده از 3 تایمر همزمان مشکلی ایجاد نمیکنه؟

                          با نظر جناب طراح موافقم
                          برنامه ای که من نوشته بودم 97% از مگا 16 رو پر کرده بود
                          نسبتا برنامه ی حجیمی بود و دستوراتی که در هر اینتراپت بود زیاد بود به همین دلیل تابع delay طولانی تر می شد حدود 1.3 برابر
                          و گاهی وقتا که وقفه ی خارجی فعال میشد ، سرریز تایمرو از دست می دادم....
                          Share OR Die

                          دیدگاه


                            #14
                            پاسخ : آیا استفاده از 3 تایمر همزمان مشکلی ایجاد نمیکنه؟

                            نوشته اصلی توسط Saeed Bagherani


                            به هیچ عنوان اینطوری که می گی نیست :redface:

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

                            وقتی یه وقفه خارجی فعال میشه
                            Global interrupt Flag رو صفر میکنه
                            یعنی عملا تمام وقفه های دیگه رو غیر فعال میکنه و تا زمانی که توی زیر برنامه وقفه هست این Flag فعال نمیشه
                            در صورتی که منبع اینتراپت بعدی تا زمان اجرا شدن زیر برنامه فعلی ادامه داشته باشه اونوقت دستورات پشت سر هم اجرا میشن درغیر این صورت شما اینراپت دومی رو از دست میدین
                            ولی دوست عزیزمون درست میگن در صورت کار با PWM ، با فعال شدن وقفه خارجی تغییری در عملکرد PWM به وجود نمیاد

                            دیدگاه


                              #15
                              پاسخ : آیا استفاده از 3 تایمر همزمان مشکلی ایجاد نمیکنه؟

                              نوشته اصلی توسط behi88

                              وقتی یه وقفه خارجی فعال میشه
                              Global interrupt Flag رو صفر میکنه
                              یعنی عملا تمام وقفه های دیگه رو غیر فعال میکنه و تا زمانی که توی زیر برنامه وقفه هست این Flag فعال نمیشه
                              در صورتی که منبع اینتراپت بعدی تا زمان اجرا شدن زیر برنامه فعلی ادامه داشته باشه اونوقت دستورات پشت سر هم اجرا میشن درغیر این صورت شما اینراپت دومی رو از دست میدین
                              ولی دوست عزیزمون درست میگن در صورت کار با PWM ، با فعال شدن وقفه خارجی تغییری در عملکرد PWM به وجود نمیاد
                              من اونایی رو که نوشتم تست کردم و جواب هم گرفتم
                              شما چطور
                              اگه بله === برنامه ات رو بزار شاید ایراد توی برنامه داشته باشی

                              اگه نه === چرا روی چیزی که نمیدونی بحث می کنی و مردم رو به اشتباه میندازی


                              اگه قرار باشه با 1 وقفه بقیه وقفه ها از کار بیفتن میکرو 2 ریال هم ارزش نداره و اصلا چند تا وقفه توی اون اضافه استفاده شده


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

                              دیدگاه

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