اطلاعیه

Collapse
No announcement yet.

یه سوال ساده در مورد وقفه های خارجی

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

    یه سوال ساده در مورد وقفه های خارجی

    سلام

    درسته که میکرو های ATMEGA16/32 بیشتر از سه تا وقفه خارجی نمیتوانند بپذیرند...؟

    من اگر بخوام هشت تا وقفه خارجی داشته باشم چیکار باید بکنم...؟ :biggrin:


    والله به فکرم زده هشت تا کلید در کنار میکرو بذارم که با زدن هر کلید یه تابع اجرا بشه...!! :icon_razz:

    #2
    پاسخ : یه سوال ساده در مورد وقفه های خارجی

    درسته دوست عزیز 3 تا وقفه بیشتر نمی تونی داشته باشی
    :cry2:
    خوب شما یه کار دیگه بکن مثلا بیا یه متغیری استفاده کن که با یه کلید از بیرون عددش افزایش پیدا کنه(ربطی به وقفه نداره)
    بعد شما درون وقفه هر چی خواستی شرط بزار اگه متغییری بیرونی که با کلید شما افزایش دادی بیا ببین با کدوم شرط در وقفه هماهنگی داره اونو اجرا کنه
    امیدوارم متوجه شده باشی! :eek:

    دیدگاه


      #3
      پاسخ : یه سوال ساده در مورد وقفه های خارجی

      یه کارم میتونی بکنی . 8 تا بافر بذاری . ترانزیستورم میشه . خروجی همشون بره تو وقفه . از هر کدوم از کلیدات قبل از بافر بدی به پایه ها . وقفه که خورد توی وقفه ببینی وقفه مطعلق به کدوم یک از پایه هاست .

      دیدگاه


        #4
        پاسخ : یه سوال ساده در مورد وقفه های خارجی

        سلام

        این کار نیازی به وقفه خارجی نداره. شما می تونی هشت تا کلید رو مثلا روی یک پورت میکرو قرار بدی و با یک برنامه ساده با فشرده شدن هر کدوم کاری را که مد نظرته انجام بدی. برای اینکار می تونی از یک حلقه if استفاده کنی.
        شيطان که رانده گشت يک خطا بيشتر نکرد
        خود را براي سجده آدم رضا نکرد
        شيطان هزار مرتبه بهتر ز بي نماز
        او سجده را بر آدم و اين بر خدا نکرد

        دیدگاه


          #5
          پاسخ : یه سوال ساده در مورد وقفه های خارجی

          نوشته اصلی توسط roberty
          سلام

          درسته که میکرو های ATMEGA16/32 بیشتر از سه تا وقفه خارجی نمیتوانند بپذیرند...؟

          من اگر بخوام هشت تا وقفه خارجی داشته باشم چیکار باید بکنم...؟ :biggrin:


          والله به فکرم زده هشت تا کلید در کنار میکرو بذارم که با زدن هر کلید یه تابع اجرا بشه...!! :icon_razz:
          اگه به روش هایی که بچه ها گفتند نمی تونی کار کنی وبا میکرو ARM کار کردی از ARM استفاده کن تعدا واولویت هاش خیلی بیشتر از AVR هستش
          معجزه اين است که هرچه داشته هايت را بيشتر با ديگران سهيم شوي،داراتر مي شوي (لئونارد نيموي)
          اگر مغزانسان،چنان ساده مي بود که ما از آن سر در مي آورديم،هنوز چنان احمق بوديم که هيچ از آن سر در نمي آورديم!
          آموزش Modelsim

          دیدگاه


            #6
            پاسخ : یه سوال ساده در مورد وقفه های خارجی

            نوشته اصلی توسط kaja2012
            سلام

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


            ولی آن موقع تکلیف bounce چی میشه...؟ مخصوصا برای کارهایی که سرعت بالایی نیاز دارند...

            در این حالت با فشردن یک کلید ممکنه یک تابع چندین بار اجرا بشه یا اصلا اجرا نشه... :sad:

            دیدگاه


              #7
              پاسخ : یه سوال ساده در مورد وقفه های خارجی

              نوشته اصلی توسط skiboys
              اگه به روش هایی که بچه ها گفتند نمی تونی کار کنی وبا میکرو ARM کار کردی از ARM استفاده کن تعدا واولویت هاش خیلی بیشتر از AVR هستش
              صدالبته اینطوره... ARM خیلی عالی است... VIC داره.. PLL داره... سرعتش تا 500 مگاهرتز هست و میشه ویندوز روی آن اجرا کرد

              ولی سختی های خودش رو هم داره... همون VIC آنقدر رجیستر داره که آدم گرگیجه میگیره...

              برنامه نویسی هم در محیط IAR بصورت ماژولار هست و باید خودمون هدرفایلها رو تولید یا دستکاری کنیم...

              کلا کارکردن با ARM نسبت به AVR مثل خلبانی در مقابل رانندگی هست... هم سرعت بیشتر ... هم قدرت بیشتر... و هم سختی بیشتر و صد البته افتخار بیشتر...!!

              هنوز خیلی مونده تا آدمی مثل من بتونه میکروی ARM رو راه بندازه...

              من دوسال پیش همین موقع اصلا نمیدونستم میکروکنتلر چی هست...!! تازه شش ماه هست برنامه نویسی AVR رو شروع کردم.... هنوز خیلی راه مونده با آرم برسم.

              دیدگاه


                #8
                پاسخ : یه سوال ساده در مورد وقفه های خارجی

                نوشته اصلی توسط roberty
                ممنون...


                ولی آن موقع تکلیف bounce چی میشه...؟ مخصوصا برای کارهایی که سرعت بالایی نیاز دارند...

                در این حالت با فشردن یک کلید ممکنه یک تابع چندین بار اجرا بشه یا اصلا اجرا نشه... :sad:
                میشه بیشتر توضیح بدهید منظورتون چیه؟ فکر نمی کنم این موضوع سختی باشه.
                شيطان که رانده گشت يک خطا بيشتر نکرد
                خود را براي سجده آدم رضا نکرد
                شيطان هزار مرتبه بهتر ز بي نماز
                او سجده را بر آدم و اين بر خدا نکرد

                دیدگاه


                  #9
                  پاسخ : یه سوال ساده در مورد وقفه های خارجی

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

                  دیدگاه


                    #10
                    پاسخ : یه سوال ساده در مورد وقفه های خارجی

                    نوشته اصلی توسط kaja2012
                    میشه بیشتر توضیح بدهید منظورتون چیه؟ فکر نمی کنم این موضوع سختی باشه.
                    ببینید...

                    من فکر میکنم ا(( شاید اشتباه کنم )) گر کلید بصورت on/off باشه یعنی با یک فشار On بشه و آنقدر این وضع ادامه پیدا کنه تا مثلا چند دقیقه دیگه دوباره کلید رو بزنیم و OFF بشه (( مثل کلید پریز )) ... در اینصورت موقعی پورت مربوط به آن کلید از لحظه ای که کلید وصل میشه سیگنال ورودی میگیره و مطابق با اون تابعی که قرار بود اجرا بشه بصورت متوالی اجرا میشه... یعنی چندین بار فراخوانی...

                    و اگر کلید فشاری باشه ... یعنی تا وقتی دستمون رویش هست ON باشه و به محض برداشتن OFF بشه اینجا بحث خواندن دستورات در سیکلهایی سریع تر از سرعت حرکت دست انسان یا همون bounce مطرح میشه . بحث bounce در درس آزمایشگاه معماری کامپیوتر هم بحث شده.


                    یعنی اگر قرار باشه با زدن کلید یک عددی مثل 2 نمایش داده بشه وجود bounce باعث میشه بجای 2 کاراکتری مثل 22222 در خروجی داشته باشیم.

                    برای همین من روی وقفه تاکید داشتم و اینکه به محض زدن یک کلید یک تابع فقط یکبار اجرا بشه.. به بیان دیگه میکرو منتظر بمونه تا همون کلید فقط یه لحظه زده بشه تا روتین وقفه اجرا بشه.

                    دیدگاه


                      #11
                      پاسخ : یه سوال ساده در مورد وقفه های خارجی

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

                      من میخوام در حین اجرای تابع MAIN هشت تا تابع دیگه هم اجرا بشه.... آنهم به اختیار کاربر و اینکه خودمون تعیین کنیم چه تابعی اجرا بشه... این هشت تا کلید رو برای همون پروژه اسیلوسکوپ میخوام...

                      یعنی برای افزایش و کاهش voltdiv و timediv و انتخاب یکی از دوکانال ورودی و نمایش لیساژور و.....

                      دیدگاه


                        #12
                        پاسخ : یه سوال ساده در مورد وقفه های خارجی

                        سلام مجدد

                        خب شما می تونی با دستور while کار کنی که وقتی مثلا دستتون روی کلید هست 2 را بنویسه و منتظر بمونه تا شما دستتون را از روی کلید بردارید. یعنی با هر بار فشردن فقط یک بار کار مورد نظر انجام بشه و وقتی کلید رها شد و دوباره فشرده شد .... یعنی 222222 پیش نمی آد.متوجه منظورم هستید؟ مثلا اگر پین B.0 مد نظر باشه:

                        if(PINB.0==0)
                        delay_ms(20);
                        while (! PINB.0)
                        delay_ms(20);

                        این تابع میتونه در حلقه main تعریف بشه.
                        همچین چیزی! یعنی تا وقتی دستتون روی کلید هست برنامه در خط while متوقف میشه و تا دستتون را برداشتید برنامه کارشو شروع می کنه.
                        شيطان که رانده گشت يک خطا بيشتر نکرد
                        خود را براي سجده آدم رضا نکرد
                        شيطان هزار مرتبه بهتر ز بي نماز
                        او سجده را بر آدم و اين بر خدا نکرد

                        دیدگاه


                          #13
                          پاسخ : یه سوال ساده در مورد وقفه های خارجی

                          اگر وقفه هات باهم اجرا نشن میتونی همشونو بدی به یک وقفه و هر کرومو به یه پایه انکدر بدی . اونوقت وقتی که هر کدوم وقفه بده باید تو تابع وقفت بیای خروجی انکدر رو بخونی ببینی که مربوط به کدومشون بوده
                          آنکس که بداند و بداند که بداند /، اسب شرف از گنبد گردون بجهاند
                          آنکس که بداند و نداند که بداند / ، بيدارش نماييد که بسي خفته نماند
                          آنکس که نداند و بداند که نداند / ، لنگان خرک خويش به مقصد برساند
                          آنکس که نداند و نداند که نداند / ، در جهل مرکب ابدالدهر بماند

                          دیدگاه


                            #14
                            پاسخ : یه سوال ساده در مورد وقفه های خارجی

                            سلام

                            برا داشتن وقفه خارجی بیشتر میشه از سری های جدیدتر AVR مثل ATMEGA48 یا... استفاده کرد در این میکروها همه پین های I/O وقفه (Pin Change Interrupt ) تولید میکنن
                            البته در این حالت بازای هر بار فشار دادن و رها کردن کلید دو بار وقفه صدا زده میشه که با یه شرط نرم افزاری کوچولو مشکل حل میشه

                            دیدگاه


                              #15
                              پاسخ : یه سوال ساده در مورد وقفه های خارجی

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

                              دیدگاه

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