اطلاعیه

Collapse
No announcement yet.

مشکل همیشگی در ایجاد وقفه

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

    مشکل همیشگی در ایجاد وقفه

    با سلام و خسته نباشی خدمت تمامی دوستان عزیز غرض از مزاحمت این بود که چندین سوال داشتم که امیدوارم مرا یاری رسانید
    بنده روی یک پروژه که با BACOM هست دارم کار میکنم که در آن ک سری حلقه ها برای اجرای برنامه توسط برنامه بیسکام نوشتم که پس از کامپایل کردن و و اجرای آن در برنامه شبیه ساز پروتئوس به خوبی کار میکند
    حالا اگه من پنج پایه(پورت)از میکرو را برای موارد وقفه استفاده کنم که به این صورت اگه هر کدام از این پورتها را در زمانهای نامشخص یک کنیم و بواسطه یک شدن هر کدام از این پورتها یک سری حلقه ها مختص همان پورتی که یک شده اجرا شود و در صورت صفر شدن آن پورت برنامه به حالت عادی و اجرای حلقه اصلی بپردازد اولا ما چه ATMEAGA احتیاج داریم که این تعداد وقفه را ساپورت کند ثانیا برنامه به زبان بیسکام به چه صورتی نوشته می شود با این تعداد وقفه ثالثا اگه یکی از پورتهایی که به وقفه خارجی اختصاص داده ایم دائما صفر و یک شود (چیزی مثل لامپ راهنای اتومبیل )و در این صورت ما بخواهیم یک حلقه را اجرا کند که ممدت اجرای این حلقه بیش از مدت زمانی است که این پورت یک می شود آنگاه برنامه ی آن به چه صورتی است
    اینو هم بگم بنده از میکرو ATMEGA و بیسکام چیز زیادی نمیدونم ولی اگه میتونید دوستان مرا یاری رسانید حتی در حد تخصصی با سپاس
    دوست عزیز متشکرم از پاسخ شما ولی مثل اینکه من مسئله رو بد طرح کردم
    یک برنامه بطور عادی در حالت اجرا است و در این موقع یک پورت یک میشود و برنامه باید از حلقهی اصلی خارج شود و حلقه جدیدی که مختص یک شدن همان پورت است اجرا شود و تا صفر شدن همان پورت این حلقه ی جدید تکرار شود . حال اگر به جای یک پورت ما چندین پورت مثلا پنج تا از این پورتها را به این کار اختصاص دهیم که در هنگام یک شدن هر کدام از این پورتها برنامه از مسیر اصلی خود خارج شده و حلقه ی جدیدی را اجرا کند و دائما آنرا تا صفر شدن این پورتها تکرار کند و در صورت صفر شدن این پورتها به حلقه ی اصلی برنامه برگردد. لازم به ذکر است ما باید برای هر کدام از این پنج پورت یک حلقه بنویسیم که در صورتی که هریک از این پورتها فعال شد حلقه ی مربوط به آن پورت را اجرا کند و اگر یکی از پورتها یی که در یک زمان نا مشخص یک میشود نسبت به دیگر پورتها ارجحیت داشته باشد حلقه ی مربوط به آن پورت را ارجح بداند و آنرا اجرا کند

    #2
    پاسخ : کمک کمک دوستان فرهیخته

    نوشته اصلی توسط mjs10205
    با سلام و خسته نباشی خدمت تمامی دوستان عزیز غرض از مزاحمت این بود که چندین سوال داشتم که امیدوارم مرا یاری رسانید
    بنده روی یک پروژه که با BACOM هست دارم کار میکنم که در آن ک سری حلقه ها برای اجرای برنامه توسط برنامه بیسکام نوشتم که پس از کامپایل کردن و و اجرای آن در برنامه شبیه ساز پروتئوس به خوبی کار میکند
    حالا اگه من پنج پایه(پورت)از میکرو را برای موارد وقفه استفاده کنم که به این صورت اگه هر کدام از این پورتها را در زمانهای نامشخص یک کنیم و بواسطه یک شدن هر کدام از این پورتها یک سری حلقه ها مختص همان پورتی که یک شده اجرا شود و در صورت صفر شدن آن پورت برنامه به حالت عادی و اجرای حلقه اصلی بپردازد اولا ما چه ATMEAGA احتیاج داریم که این تعداد وقفه را ساپورت کند ثانیا برنامه به زبان بیسکام به چه صورتی نوشته می شود با این تعداد وقفه ثالثا اگه یکی از پورتهایی که به وقفه خارجی اختصاص داده ایم دائما صفر و یک شود (چیزی مثل لامپ راهنای اتومبیل )و در این صورت ما بخواهیم یک حلقه را اجرا کند که ممدت اجرای این حلقه بیش از مدت زمانی است که این پورت یک می شود آنگاه برنامه ی آن به چه صورتی است
    اینو هم بگم بنده از میکرو ای تی مگا و بیسکام چیز زیادی نمیدونم ولی اگه میتونید دوستان مرا یاری رسانید حتی در حد تخصصی با سپاس
    سلام..
    دوست عزیز عنوان پست رو عوض کنید..(طبق قوانین سایت گذاشتم کلماتی مانند کمک ، فوری و ... ممنوع میباشد)
    متشکرم
    www.icesi.ir

    دیدگاه


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

      اول ممنون از آقای موسوی که این اخطار رو به جا و مناسب دادند و امیدوارم که تغییرات اعمال بشه.
      -------------------------------------------
      در مورد سوالی که پرسیدید ، از نظر تئوری ، و اونطوری که از نوشته های طولانی شما برداشت کردم، به نظر من شما می خواهید چند برنامه همراه هم اجرا بشه. در وقفه تقریبا این حالت وجود دارد ، ولی دقیق نه. همراه هم در AVR این کار صورت نمی گیرد. مثلا شما می خواهید ، یک برنامه رو با تاخیر 1 ثانیه ای و دیگری را با 10 میلی ثانیه ای انجام دهید. در صورتی که تنها ظاهر این مسئله مهم است این نکته عملی می باشد ، ولی در صورتی که باید از همه نظر صحیح باشد، این کار توسط میکرو کنترلر ها صورت نمی گیرد. از آنجایی که شما با میکرو کنترلر ها آشنایی کامل ندارید، گمان می کنم که با مدارهای منطقی و PLD , SPLD , GAL , CPLD , FPGA نیز آشنایی ندارید. چون تنها چند خانواده ای که نام بردم این امکان را دارند که جدیدا نوع جدیدی نیز به نام خانواده FPAA نیز این قابلیت ها را دارند. برای آشنایی می توانید به این قسمت مراجعه کنی : http://www.eca.ir/forum2/index.php?board=103.0
      کنکوری 90 ديروز،آ‌دانشجو مهندسي نرم افزار پلي تكنيك امروز!

      دیدگاه


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

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

        دیدگاه


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

          نوشته اصلی توسط mjs10205
          دوست عزیز متشکرم از پاسخ شما ولی مثل اینکه من مسئله رو بد طرح کردم
          یک برنامه بطور عادی در حالت اجرا است و در این موقع یک پورت یک میشود و برنامه باید از حلقهی اصلی خارج شود و حلقه جدیدی که مختص یک شدن همان پورت است اجرا شود و تا صفر شدن همان پورت این حلقه ی جدید تکرار شود . حال اگر به جای یک پورت ما چندین پورت مثلا پنج تا از این پورتها را به این کار اختصاص دهیم که در هنگام یک شدن هر کدام از این پورتها برنامه از مسیر اصلی خود خارج شده و حلقه ی جدیدی را اجرا کند و دائما آنرا تا صفر شدن این پورتها تکرار کند و در صورت صفر شدن این پورتها به حلقه ی اصلی برنامه برگردد. لازم به ذکر است ما باید برای هر کدام از این پنج پورت یک حلقه بنویسیم که در صورتی که هریک از این پورتها فعال شد حلقه ی مربوط به آن پورت را اجرا کند و اگر یکی از پورتها یی که در یک زمان نا مشخص یک میشود نسبت به دیگر پورتها ارجحیت داشته باشد حلقه ی مربوط به آن پورت را ارجح بداند و آنرا اجرا کند
          سلام.
          خودت قبول داری که سوالت گنگه؟؟ :rolleyes:

          تو متن بالا پورت درسته یا پین؟؟

          ATmega64 فکر کنم 7 یا 8 تا اینتراپت داشته باشه..

          سوالتو خیلی واضح تر بپرس.. :agree:
          www.icesi.ir

          دیدگاه


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

            گاهی میشه به جای وقفه فقط وضعیت پایه ها رو تو یه لوپ بررسی کرد( فقط گاهی وقتا)
            گاهی میشه از دو تا میکرو استفاده کرد
            گاهی هم همونطور که میلاد گفت میشه از میکروهایی که تعداد وقفه زیاد دارن استفاده کرد مثل ATMEGA1280 و ATMEGA640 و ATMEGA2560 که 32 اینتراپت خارجی دارن .
            اگه به بسکام 1.11.9.0 دسترسی داری می تونی بری مشخصات مورد نظرتو پیدا کنی.

            دیدگاه

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