اطلاعیه

Collapse
No announcement yet.

اینتراپت خارجی

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

    اینتراپت خارجی

    با سلام
    من از اینتراپت صفر بصورت تغییر سطح -INT0 Mode: Any change- در برنامه استفاده کردم و از اپنتراپت به یک زیر برنامه میرم در موقع اجرای برنامه متاسفانه بعضی مواقع برنامه داخل اینتراپت چند بار اجرا میشه لطفا راهنمائی فرمائید. ضمنا در برنامه از تایمر صفر و LCD استفاده میکنم
    interrupt [EXT_INT0] void ext_int0_isr(void)
    {
    // Place your code here
    right();
    }

    #2
    پاسخ : اینتراپت خارجی

    دوست عزیز به احتمال قوی این مساله به خاطر نوسان کلیده(bouncing)
    مدار رو تو پروتئوس شبیه سازی کنید اگر مشکل از Button bouncing باشه خودشو اینجا نشون نمیده چون کلید های پروتئوس ایده آل اند.
    توضیح مختصر در مورد Button bouncing:
    وقتی شما یه کلید رو فشار بدید به صورت ایده آل باید از یه مقدار منطقی یه دیگری بره مثلا یک طرف رو به صفر یا vcc وصل کنه ولی در عمل چون کلید یه المان فیزیکی غیر ایده آله این کار رو با نوسان انجام میده و میکرو ممکنه این نوسان ها رو تغییر سطح تلقی کنه و دوباره برنامه اینتراپت رو اجرا کنه.شکل پایین این مساله رو نشون میده

    افتادگی آموز اگر طالب فیضی هرگز نخورد آب زمینی که بلند است

    دیدگاه


      #3
      پاسخ : اینتراپت خارجی

      برنامه تو پروتئوس درست کار میکنه
      به نظرتون تاخیر در برنامه بهتره یا کلید رو اصلاح کنم :question:
      در ضمن میتونه این مشکل از LCD باشه :question:

      دیدگاه


        #4
        پاسخ : اینتراپت خارجی

        نوشته اصلی توسط si45
        برنامه تو پروتئوس درست کار میکنه
        به نظرتون تاخیر در برنامه بهتره یا کلید رو اصلاح کنم :question:
        در ضمن میتونه این مشکل از LCD باشه :question:
        زیر برنامه وقفه رو با یه delay طولانی تر کنید
        هنگام خروج از زیر برنامه وقفه هم پرچم وقفه رو set کنید تا اگر حین اجرای زیر برنامه بالا رفت (اینتراپت مجدد به خاطر bouncing ) برطرف بشه
        از مدار دیبانس خارجی هم میتونید استفاده کنید.یه سر هم به اینجابزنید
        افتادگی آموز اگر طالب فیضی هرگز نخورد آب زمینی که بلند است

        دیدگاه


          #5
          پاسخ : اینتراپت خارجی

          یه تصویر زیبا از لغزش یا همان نوسان کلید روی اسکوپ از اینجا


          افتادگی آموز اگر طالب فیضی هرگز نخورد آب زمینی که بلند است

          دیدگاه


            #6
            پاسخ : اینتراپت خارجی

            با توجه به توصیه های گفته شده موارد ذیل را انجام دادم
            1- مدار توصیه شده را بستم تعداد دفعات تکرار اینتراپت کم شده ولی باز بعضی مواقع اینتراپت تکرار میشه.
            2- اگه پین را بصورت معمولی چک کنم با توجه به اینکه تاخیر را میتونم به دلخواه بزارم مشکل بالا رفع میشه ولی دیگه از اینتراپت استفاده نمیشه.
            3- در ضمن بعضی مواقع با زدن کلید میکرو ریست میشه علت از چیه :question:

            دیدگاه


              #7
              پاسخ : اینتراپت خارجی

              نوشته اصلی توسط si45
              با توجه به توصیه های گفته شده موارد ذیل را انجام دادم
              1- مدار توصیه شده را بستم تعداد دفعات تکرار اینتراپت کم شده ولی باز بعضی مواقع اینتراپت تکرار میشه.
              2- اگه پین را بصورت معمولی چک کنم با توجه به اینکه تاخیر را میتونم به دلخواه بزارم مشکل بالا رفع میشه ولی دیگه از اینتراپت استفاده نمیشه.
              3- در ضمن بعضی مواقع با زدن کلید میکرو ریست میشه علت از چیه :question:
              من شخصا تنها کاری که میکنم اینه که موقع خروج از اینتراپت یه تاخیر 100 میلی ثانیه قرار میدم و پرچم اون وقفه رو هم set میکنم تا پاک بشه
              و همیشه واسم جواب داده و حتی کارم به خازن خارجی هم نکشیده.البته من معمولا اینتراپت رو تنظیم میکنم رو لبه پایین رونده.
              فکر کنم نوسان کلید های فشاری که پهن تر و بزرگ تر هستند از کلید های کوچک تر کمتر باشه. با یه کلید چهار پایه با سایز بزرگتر هم تست کنید بد نیست.مقاومت پول پ خارجی هم که حتما استفاده کردید.
              در مورد ریست شدن میکرو اطلاعی ندارم .ممکنه بخاطر مشکل در اتصالات مدارتون باشه.
              در ویدیوی آمورشی مهندس کی نژاد قسمت 16در مورد نوسان کلید بحث شده که توصیه میکنم نگاه کنید اینجا
              افتادگی آموز اگر طالب فیضی هرگز نخورد آب زمینی که بلند است

              دیدگاه


                #8
                پاسخ : اینتراپت خارجی

                چیکار کنم که با دریافت اینتراپت اول تا یک زمان مشخص مثلا 200 میلی ثانیه هر اینتراپتی که دریافت شده حذف کنه یا اصلا قبول نکنه (مثلا اینتراپت صفر)

                دیدگاه


                  #9
                  پاسخ : اینتراپت خارجی

                  نوشته اصلی توسط si45
                  چیکار کنم که با دریافت اینتراپت اول تا یک زمان مشخص مثلا 200 میلی ثانیه هر اینتراپتی که دریافت شده حذف کنه یا اصلا قبول نکنه (مثلا اینتراپت صفر)
                  منظور من این بود که دستور delay_ms(200) و GIFR|=(1<<INTF0) رو به آخر دستورات روتین اضافه کنید(البته اگر از اینتراپت صفر استفاده کرده اید)
                  وقتی اینتراپت اتفاق میافته و میکرو وارد روتین اینتراپت میشه خودش اتوماتیک بیت فعال سازی وقفه رو پاک میکنه و در نتیجه امکان وقوع اینتراپت داخل اینتراپت برطرف میشه (مگر اینکه خودتون دستی بعد از ورود به اینتراپت فعالش کنید که اینجا مورد نظر نیست).
                  به همین خاطر بعد از ورود به اینتراپت تا حداقل 200 میلی ثانیه به هیچ اینتراپتی پاسخ داده نمیشه و بعد 200 میلی ثانیه هم پرچم اینتراپت کلیده متصل به میکرو پایین آورده میشه تا اگر در طول مدت 200 میکروثانیه در اثر نوسان کلید مجددا درخواست وقفه واسش شده باشه مجددا وقفه اتفاق نیافته.
                  فقط توجه کنید که بار اول که وقفه اتفاق میافته میکرو اتوماتیک پرچم مربوطه رو پاک میکنه و نیازی به کد نیست و کدی که ما آخر روتین واسه پاک کردن پرچم وقفه نوشتیم واسه برطرف کردن اثره نوسان کلیده.

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

                  دیدگاه


                    #10
                    پاسخ : اینتراپت خارجی

                    با توجه به کد ساده برنامه زیر که از دو تابع تشکیل شده و زمان تاخیر به اندازه کافی میباشد وقتی اینتراپت اول داده میشود با اینکه اینتراپت بعدی نباید پذیرفته شود ولی عملا پس از پایان اینتراپت قبلی اینتراپت بعدی اجرا میشود ولی برنامه در پرتئوس درست کار میکنه
                    نمیدونم مشکل از میکروکنترلر هستش :question:

                    http://www.4shared.com/rar/ARx5woYr/INT0.html


                    دیدگاه

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