أخبار التكنولوجيا
المقاطعات والمؤقتات! ⏱️🚨.. إزاي ترمي الـ delay في الزبالة وتخلي المتحكم يعمل 50 حاجة في نفس الوقت؟
0
تعليقات
المقاطعات والمؤقتات! ⏱️🚨.. إزاي ترمي الـ delay في الزبالة وتخلي المتحكم يعمل 50 حاجة في نفس الوقت؟
سلسلة عقول من سيليكون (المقال السادس): المقاطعات والمؤقتات! 
.. إزاي ترمي الـ delay في الزبالة وتخلي المتحكم يعمل 50 حاجة في نفس الوقت؟ 
أهلاً بكل وحوش الإلكترونيات وصناع التكنولوجيا! 
في المقال اللي فات (الخامس)، عالجنا "الزهايمر" للمتحكمات وعرفنا نفرق بين الذاكرات (الفلاش، والرام، والـ EEPROM) وعرفنا إمتى الشريحة بتنسى وإمتى بتفتكر.
النهاردة هنجاوب على سؤال المقال اللي فات: إزاي نخلي المتحكم يعمل كذا حاجة في نفس الوقت من غير ما يهنج أو يتجمد؟
الإجابة هي: السلاح السري اللي بنسميه المقاطعات والمؤقتات (Interrupts & Timers) 
. تعالوا نفهم إزاي بنستخدمهم عشان نخلي بوردتنا "تطير" من السرعة!
تنويه هام: دي الحلقة السادسة من سلسلة "عقول من سيليكون". لو فاتك اللي قبل كده، ارجع للصفحة واقرأهم. ركز جداً في مقال النهاردة لأنه هيغير طريقتك في كتابة الأكواد للأبد من هاوي لمحترف، ومتنساش اللايك والشير لدعم المحتوى!
1. كابوس الـ Delay! 

كلنا في البدايات بنتعلم نكتب كود عشان ننور ليد ونطفيه: ننور الليد، وبعدين نكتب delay(1000) يعني "استنى ثانية"، وبعدين نطفي الليد، وهكذا.
الكارثة: الـ delay ده مش مجرد وقت بيعدي، ده أمر "شلل تام" للمعالج! المعالج بيفضل واقف في مكانه مبيعملش أي حاجة تانية غير إنه بيعد النبضات عشان يخلص الثانية دي.
لو عندك سنسور حريق، أو زرار طوارئ حد داس عليه خلال الثانية دي، المتحكم هيكون "أعمى وأطرش" تماماً ومش هيستجيب غير لما الثانية تخلص! ودي ممكن تعمل كوارث في المشاريع الحقيقية.
2. الحل الأول: المقاطعات (Interrupts) - "جرس الباب"! 

تخيل إنك قاعد في البيت ومستني دليفري يوصل.
الـ delay أو الطريقة العادية (Polling) كأنك سايب كل اللي في إيدك وواقف باصص من العين السحرية للباب ومبتعملش أي حاجة تانية لحد ما ييجي!
أما المقاطعة (Interrupt)، فهي كأنك مشغل "جرس الباب". إنت قاعد بتذاكر، بتتفرج على التلفزيون، بتعمل أي حاجة.. وأول ما الجرس يرن (إشارة كهربائية بتيجي على رجل معينة في المتحكم)، بتسيب اللي في إيدك فوراً (المقاطعة)، تروح تفتح الباب تاخد الدليفري (تنفذ كود السنور أو الطوارئ)، وبعدين ترجع تكمل مذاكرتك من نفس النقطة بالظبط!
إمتى بنستخدمها؟ مع الحاجات اللي محتاجة استجابة فورية بالملي ثانية ومبتستناش، زي: زرار طوارئ (Stop Button)، أو حساس سرعة (Encoder) بيعد لفات موتور سريعة، أو حساسات الحماية.
3. الحل التاني: المؤقتات (Timers) - "المنبه الخفي"! 

الميكروكونترولر جواه "ساعات توقيت" داخلية (Hardware Timers) بتشتغل لوحدها في الخلفية من غير ما تشغل المعالج.
المؤقت ده عامل زي ما تظبط منبه موبايلك يرن كل ساعة عشان تاخد الدوا، وإنت في نفس الوقت عايش حياتك وبتذاكر وبتشتغل عادي جداً.
إزاي بنستغلها؟ بنقول للمؤقت: "يا بطل، عِد في الخلفية براحتك، وأول ما يمر 10 ملي ثانية مثلاً، ابعتلي إشارة عشان أروح أقرأ سنسور الحرارة، وبعدين ارجع للي كنت بعمله".
في بيئة الأردوينو، بنستخدم دالة سحرية مبنية على المؤقتات دي اسمها millis()، ودي بتخلينا نعرف الوقت اللي مر من وقت تشغيل البوردة، وبنقدر نقارن الأوقات ونعمل مهام كتير في نفس اللحظة (Multi-tasking) من غير ما نوقف المعالج ولا ثانية واحدة!
الخلاصة: الـ delay بيشل حركة المتحكم وبيخليه أعمى. عشان تعمل مشاريع سريعة وتستجيب فوراً، استخدم المقاطعات (Interrupts) للحوادث الفورية والسريعة، واستخدم المؤقتات (Timers / millis) لتنظيم الوقت وتكرار المهام في الخلفية من غير ما تعطل الشغل الأساسي.
سؤال : 
المتحكم بتاعنا دلوقتي بقى بيفكر، وبيحس، وبيتحكم في المواتير، ومبيجيلوش زهايمر، وكمان بيعمل 50 حاجة في نفس الوقت!
بس فيه معضلة تانية.. المتحكم ده عشان يشتغل، لازم يتكلم مع حساسات، وشاشات (OLED/LCD)، وشرايح تانية كتير عشان يتبادلوا الداتا.
لو كل قطعة هنوصلها بـ 8 أو 10 أسلاك، البوردة بتاعتنا هتبقى زحمة والرجول هتخلص فوراً! 
عشان كده، العلماء عملوا "لغات تخاطب" أو بروتوكولات اتصال (Communication Protocols) بتخلي المتحكم يتكلم مع أي شاشة أو سنسور بسلكين أو تلاتة بس!
تفتكروا إيه هي أشهر 3 بروتوكولات اتصال بنستخدمها في الإلكترونيات؟ (تلميح: واحد منهم بنبرمج بيه الشاشة، وواحد بنوصل بيه كارت الميموري، وواحد بنرفع بيه الكود من الكمبيوتر).
شاركونا إجاباتكم في التعليقات عشان المقال الجاي هنغوص في "لغات التخاطب السريعة"!

إرسال تعليق