اطلاعیه

Collapse
No announcement yet.

پیداکردن یه راه برای حل مشکل بزرگ در کدویژن

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

    پیداکردن یه راه برای حل مشکل بزرگ در کدویژن

    سلام و خسته نباشید خدمت استادان عزیز
    من امروز به یه مشکل کوچیک شایدم بزرگ برخوردم. شایدم راه حل داره من نمیدونم چون تازه دارم کدویژن رو شروع میکنم.
    ببینید فرض کنید یه پروژه چشمک زن ال ای دی داریم که یه میکروسوییچ دارم و با هر بار فشار دادنش حالت چشمک زن عوض میشه.
    من اینجوری عمل میکنم.
    --------
    حلقه وایل{
    شرط روشن شدن کلید
    روشن شدن ال ای دی
    تاخیر 500 میلی ثانیه
    خاموش شدن ال ای دی
    تاخیر 500 میلی ثانیه}
    -------------------
    ببینید اینجا یه مشکلی هست که شرط کلید فقط وقتی که برنامه به اون خط میرسه اجرا میشه ولی موقعی که برنامه وسط تاخیرات یا انجام کار های دیگه ای هست کلید رو هر چقدر بزنیم عمل نمیکنه.
    من دنبال یه راهیم که بشه داعما کلید رو فراخوانی کرد..من حتی اومد دستور شرط رو پخش کردم بین دستورات ولی بازم وسط تاخیر نمیتونه کاری بکنه.
    من دنبال راهیم که بشه داعما حتی وسط تاخیر فشار داده شدن کلید رو تشخیص داد.
    آیا از دوستان کسی میدونه راه حلو؟؟

    #2
    پاسخ : پیداکردن یه راه برای حل مشکل بزرگ در کدویژن

    نوشته اصلی توسط amirhosseinstar10 نمایش پست ها
    سلام و خسته نباشید خدمت استادان عزیز
    من امروز به یه مشکل کوچیک شایدم بزرگ برخوردم. شایدم راه حل داره من نمیدونم چون تازه دارم کدویژن رو شروع میکنم.
    ببینید فرض کنید یه پروژه چشمک زن ال ای دی داریم که یه میکروسوییچ دارم و با هر بار فشار دادنش حالت چشمک زن عوض میشه.
    من اینجوری عمل میکنم.
    --------
    حلقه وایل{
    شرط روشن شدن کلید
    روشن شدن ال ای دی
    تاخیر 500 میلی ثانیه
    خاموش شدن ال ای دی
    تاخیر 500 میلی ثانیه}
    -------------------
    ببینید اینجا یه مشکلی هست که شرط کلید فقط وقتی که برنامه به اون خط میرسه اجرا میشه ولی موقعی که برنامه وسط تاخیرات یا انجام کار های دیگه ای هست کلید رو هر چقدر بزنیم عمل نمیکنه.
    من دنبال یه راهیم که بشه داعما کلید رو فراخوانی کرد..من حتی اومد دستور شرط رو پخش کردم بین دستورات ولی بازم وسط تاخیر نمیتونه کاری بکنه.
    من دنبال راهیم که بشه داعما حتی وسط تاخیر فشار داده شدن کلید رو تشخیص داد.
    آیا از دوستان کسی میدونه راه حلو؟؟
    سلام
    راه حل های زیادی میتونه برای این کار (منظور عملکرد مورد نظر شما در رابطه به تغییر حالت کار برنامه اس) ارائه بشه که بستگی به طرز فکر و خلاقیت برنامه نویس داره. مورد دیگه ای که میتونه دخیل باشه هم نوع پردازنده و نحوه نوشتن نرم افزارش هستش که زیاد واردش نمیشم چون میتونه در این مرحله سردرگم کننده باشه براتون. برای این که در هر لحظه بتونید کلید رو چک کنید هیچ راه نرم افزاری ای وجود نداره که دقیقا بلافاصله جواب بده. چون میکروکنترلر یک پردازنده داره و هر لحظه فقط یک وظیفه رو میتونه انجام بده که مطمئنا نمیتونه همه لحظات کلید رو چک کنه چون دیگه وقتی برای باقی کارها نمیمونه.
    خوب با توصیفات بالا، چاره چیه؟ چاره استفاده از ویژگی سخت افزاری به نام وقفه ها، به خصوص وقفه خارجیه. نمیدونم انقدر اطلاع دارید یا نه اما وقفه مکانیزمی در پردازنده است که میتونه وظیفه در حال انجام پردازنده رو متوقف کنه و پردازنده رو مجبور به اجرای قسمت خاصی از برنامه کنه. به اون قسمت خاص برنامه میگن سرویس وقفه که تنها وقتی اجرا میشه که اون وقفه اصطلاحا تحریک شده باشه. طبیعتا بعد از انجام وظایف سرویس وقفه، پردازنده به انجام ادامه کار قبلیش بر میگرده.
    توی بیشتر میکروکنترلرهایی که امروزه باهاشون سر و کار داریم، نوعی از وقفه داریم به اسم وقفه خارجی. یعنی وقفه ای که از خارج میکروکنترلر به اون اعمال میشه. توی AVR اون پایه هایی که جلوی اسمشون INT نوشته شده، میتونن وقفه خارجی رو تحریک کنن. داخل برنامه شما باید با استفاده از رجیسترهای خاصی وقفه خارجی مورد نظر رو فعال کنید و نوع تحریک شدنش رو هم مشخص کنید. نوع تحریک هم میتونه لبه بالا رونده، پایین رونده و یا در بعضی مواقع حساسیت به سطح سیگنال روی اون پایه وقفه خارجی باشه. بهتره برید در مورد وقفه خارجی مطالعه کنید، احتمالا خودتون جوابی برای مسئله اتون پیدا کنید.
    موفق باشید

    دیدگاه


      #3
      پاسخ : پیداکردن یه راه برای حل مشکل بزرگ در کدویژن

      سلام
      بهترین راه همون وقفه است که دوستمون گفت اصلا سخت نیست. ولی به راه دیگه هم داره تاخیر های 500 میلی ثانیه ای رو تو حلقه for به صورت 1 میلی ثانیه که 500 بار اجرا بشه بنویس و توی حلقه for یه if باید بزاری که اگر دکمه زده شد از حلقه خارج بشه که برای خروج از حلقه می تونی از دستور go to استفاده کنی

      دیدگاه


        #4
        پاسخ : پیداکردن یه راه برای حل مشکل بزرگ در کدویژن

        اصلا از Delay استفاده نکن,با این کار میتونی هر لحظه که اراده کنی به کلید دسترسی داشته باشی بدون هیچ تاخیر و مشکلی

        دیدگاه

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