اطلاعیه

Collapse
No announcement yet.

مشکل با وقفه

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

    #16
    پاسخ : مشکل با وقفه

    نوشته اصلی توسط Mahdi.Faani نمایش پست ها
    بهه طور کلی وقتی وارد روتین وقفه میشید وقفه خا از کار میفتند و این کار پیشنهادی شما هیچ تاثیری نداره...

    ایشون اگه سرعت و عکسالعمل واسشون مهم نیست بهتره که به جای وقفه مقدار پین رو چک کنند...اگر نه با گذاشتن خازن میشه bounce ناشی از کلید رو تا حدی خنثی کرد

    Sent from my E2333 using Tapatalk
    پس با این حال اگه بخواییم وقفه خارجی رو بدیم به یه کلید ، چطور باید حالت دیبانس براش بسازیم ؟؟
    مثلا میشه یه به محض ورود به وقفه خارجی ، یه 50 میلی ثانیه براش تاخیر در ادامه ی کد بزاریم ، تا طرف دستشو از سر کلید برداره و بعد برنامه به کارخودش ادامه بده؟؟

    کد HTML:
    int0label:
    waitms 50
    toggle led
    return
    به سمت نور خورشيد حرکت کن،تو ميتوني تابش خورشيد رو حس کني ،حتي اگه کور باشي.
    (پيش به سوي هدف)

    دیدگاه


      #17
      پاسخ : مشکل با وقفه

      با این کار شما ۵۰ میلی ثانیه تاخیر میذارید تو روتین وقفه...واسه یه دستور ساده ۵۰ میلی ثانیه وقت سی پی یو رو تلف میکنید...اگه میخاین کم دردسر باشه توی حلقه اصلی برنامه چک کنید ک کلید فشرده شده یا نه...اونجا میتونین حتی کاری کنین ک تا وقتی طرف دستشو بر نداشته کد مد نظرتون اجرا نشه...وقفه خارجی واسه کارای خیلی حساس و real time استفاده میشه نه فشردن یه کلید ک ی چیزیو روشن خاموش کنه...

      اگه هم اصرار بر استفاده از اینتراپت دارین وارد وقفه ک شدین وقفه int0 رو غیر فعال کنین ولی فعال شدنش در جای دیگری از برنامه باشه..مثلا درون حلقه اصلی برنامه و جوری کدشو بذارید ک مثلا حلقه اصلی به اندازه ۵۰ میلی ثانیه تکرار بشه بعد وقفه فعال بشه...
      همونطور ک میبینید که اینجوری دردسرش بیشتره...

      Sent from my E2333 using Tapatalk
      تولید کننده تجهیزات برنامه پذیر اتوماسیون صنعتی

      www.intelart.ir


      ساخت کنترلر دما PID فازي با AVR [آموزشی]

      دیدگاه


        #18
        پاسخ : مشکل با وقفه

        نوشته اصلی توسط Mahdi.Faani نمایش پست ها
        با این کار شما ۵۰ میلی ثانیه تاخیر میذارید تو روتین وقفه...واسه یه دستور ساده ۵۰ میلی ثانیه وقت سی پی یو رو تلف میکنید...اگه میخاین کم دردسر باشه توی حلقه اصلی برنامه چک کنید ک کلید فشرده شده یا نه...اونجا میتونین حتی کاری کنین ک تا وقتی طرف دستشو بر نداشته کد مد نظرتون اجرا نشه...وقفه خارجی واسه کارای خیلی حساس و real time استفاده میشه نه فشردن یه کلید ک ی چیزیو روشن خاموش کنه...

        اگه هم اصرار بر استفاده از اینتراپت دارین وارد وقفه ک شدین وقفه int0 رو غیر فعال کنین ولی فعال شدنش در جای دیگری از برنامه باشه..مثلا درون حلقه اصلی برنامه و جوری کدشو بذارید ک مثلا حلقه اصلی به اندازه ۵۰ میلی ثانیه تکرار بشه بعد وقفه فعال بشه...
        همونطور ک میبینید که اینجوری دردسرش بیشتره...

        Sent from my E2333 using Tapatalk
        مشکل اینجاست که مثلا ما 30 میلی ثانیه وقت داریم تا از یه بازه سنسور عبور کنیم ، خوب ، این بازه هم باید تو یه حلقه بینهایت دائم چک بشه که اگه مثلا تو این بازه ی سنسور قرار گرفته ،
        حالا اگه تو این بازه ما بیایم دستورات چک کردن و زیاد کنیم یا زیاد کد بنویسیم ، زمان بیشتری برای اجرای این کدها نیاز هست دیگه ، یهو دیدی از این بازه گذشتیم و دستور اصلی که برای ایست مثلا موتور بود ، صادر نشد و موتور روشن میمونه،
        کلا ما میخایم تمامی قدرت و سرعت پردازنده رو تو این 30 میلی ثانیه برای هوشیار بودن اینکه آیا فلان سنسور تحریک شد یا نه قرار بدیم.

        حالا از نظر شما دستورات زیاد تو کمتر از 30 میلی ثانیه انجام میشه ، تا چند دستور مجاز به نوشتنیم ؟؟

        ممنون از پاسختون.
        به سمت نور خورشيد حرکت کن،تو ميتوني تابش خورشيد رو حس کني ،حتي اگه کور باشي.
        (پيش به سوي هدف)

        دیدگاه


          #19
          پاسخ : مشکل با وقفه

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

          دیدگاه


            #20
            پاسخ : مشکل با وقفه

            ببینید شما باید خودتونو بذارین جای سی پی یو...ببینین الان تو این خط کد قرار داریم...بعد از این قراره چ اتفاقی بیفته؟باید تمام پروسه رو تو ذهنتون شبیه سازی کنین...این کاریه ک خودم میکنم...اینطوری میتونید تصمیم گیری کنید...
            وقتی کارایی ک ادوات جانبی cpu مثل adc رو با روش سرکسی یا همون polling انجام بدین درواقع دارین وقت cpu رو تلف میکنین...اینطوری ممکنه یه دستور در زمان مناسبش اجرا نشه...ولی وقتی کارهای جانبی رو با روتین اینتراپت انجام بدین و کارهای پردازشی رو داخل حلقه بذارید هیچ کدوم از دستورات رو از دست نمیدین...اینکه کجا اینتراپت استفاده بشه ب کاریرد مد نظرتون بستگی داره...

            ولی ی چیزیو در مورد اینتراپت خارجی بگم:واسه کارهایی مثل فشردن کلید و اینطور چیزا اصلا خوب نیست..چون به هکین مشکلی ک شما خوردید میرسه...شما چک کردن مقدار پین داخل حلقه اصلی رو امتحان کنید ببینید نتیجه ش مناسبتون هست یا نه
            جاهایی اینتراپت خارجی استفاده میشه که مثلا یه دیوایس قراره سیگنال بده ب میکرو..مثل پورت usb ولی جایی مثل کلید اصلا مناسب نیست...

            Sent from my E2333 using Tapatalk
            تولید کننده تجهیزات برنامه پذیر اتوماسیون صنعتی

            www.intelart.ir


            ساخت کنترلر دما PID فازي با AVR [آموزشی]

            دیدگاه


              #21
              پاسخ : مشکل با وقفه

              مرسی آقا مهدی ....آره به روش چک کردن مدام پایه ها میشه تو حلقه اصلی انجامش داد...ولی خواستم با وقفه بخونم که میکرو زیاد مشغول نشه
              در ضمن میشه کی پدو با وقفه خوند و مشکلی پیش نمیاره ولی سویئچ که بچسبه برخلاف پوش باتن مدام روتین وقفه اجرا میشه...یه جوری باید وقفه رو غیر فعال کرد و بعد انجام روتین فعالشش کرد و میکرو از تو روتین خارج کرد...ولی چطوریشو نمیدونم

              دیدگاه


                #22
                پاسخ : مشکل با وقفه

                خب شما اگه غیر فعالش کنین و در انتهای وقفه دوباره برگردین باز هم همون اش و همون کاسه س...انقد سریع دستورات داخلدروتین وقفه به اتمام میرسه ک عملا این کار بی فایده س
                شما فکرشو بکن ۵۰ میلی ثانیه بانس داری...در عرض چند میکرو ثانیه میکرو دستپرات وقفه رو انجام میده...

                Sent from my E2333 using Tapatalk
                تولید کننده تجهیزات برنامه پذیر اتوماسیون صنعتی

                www.intelart.ir


                ساخت کنترلر دما PID فازي با AVR [آموزشی]

                دیدگاه


                  #23
                  پاسخ : مشکل با وقفه

                  دقیقا همینه....پس با این وجود ما نمیتونیم از تو روتین بپریم بیرون

                  دیدگاه


                    #24
                    پاسخ : مشکل با وقفه

                    میشه ولی با پردازش های اضافی

                    Sent from my E2333 using Tapatalk
                    تولید کننده تجهیزات برنامه پذیر اتوماسیون صنعتی

                    www.intelart.ir


                    ساخت کنترلر دما PID فازي با AVR [آموزشی]

                    دیدگاه


                      #25
                      پاسخ : مشکل با وقفه

                      خوب چطوره ؟

                      دیدگاه


                        #26
                        پاسخ : مشکل با وقفه

                        خب توی چند تا پست بالاتر گفتم دیگه...
                        از تایمر استفاده کنید و بعد از همون ۱۰۰ میلی ثانیه فعالش کنید

                        Sent from my E2333 using Tapatalk
                        تولید کننده تجهیزات برنامه پذیر اتوماسیون صنعتی

                        www.intelart.ir


                        ساخت کنترلر دما PID فازي با AVR [آموزشی]

                        دیدگاه


                          #27
                          پاسخ : مشکل با وقفه

                          وقتی که کلید مدام وصله عملا اون تایم تاخیر بی اثر میشه

                          دیدگاه


                            #28
                            پاسخ : مشکل با وقفه

                            خب اینی ک من گفتم واسه وقتیه ک ی لحظه کلید فشرده بشه...اگه میخای حالت نگه داشته شدن رو هم جبران کنی باید تایمر رو در حالت نرمال راه بندازی و توی روتین وقفه سرریز ی if بذاری...وقتی ک مقدار خونده شده از اون پین مساوی با رها شدنه شدنه وقفه خارجی رو فغال کنه...در این حالت زمان ی دور سرریز شدن باید از زمان بانس کردن کلید بیشتر باشه

                            حالت دیگه اینکه از if و else if استفاده کنی...اگه پین فشرده بود وقفه خارجی غیر فعال و اگه رها بود وقفه خارجی فعال بشه
                            این حالت میتونه زمان سرریز شدن تایمر از زمان بانس کلید کمتر بشه باعث میشه ک وقفه هی فعال و غیر فعال بشه

                            پس ترجیحا حالت اول رو انجام بدین و ی شمارنده تو سرریز تایکر بذارین ک بتونین تو بازه های مثلا ۶۰ میلی ثانیه ای پین رو چک کنین

                            Sent from my E2333 using Tapatalk
                            تولید کننده تجهیزات برنامه پذیر اتوماسیون صنعتی

                            www.intelart.ir


                            ساخت کنترلر دما PID فازي با AVR [آموزشی]

                            دیدگاه

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