- أنواع المقاطعات
- المقاطعات في اردوينو
- استخدام المقاطعات في الأردوينو
- المكونات مطلوبة
- مخطط الرسم البياني
- برمجة مقاطعة اردوينو
- مظاهرة مقاطعة اردوينو
فكر في سيارة سريعة الحركة ، إذا اصطدمت فجأة بسيارة أخرى في الاتجاه المعاكس ، فإن أول شيء يحدث هو أن مستشعر مقياس التسارع الموجود في السيارة يستشعر تسارعًا مفاجئًا ويؤدي إلى مقاطعة خارجية للميكروكونترولر الموجود في السيارة. ثم بناءً على هذا المقاطعة ، ينتج الميكروكونترولر إشارة كهربائية لنشر الوسائد الهوائية على الفور. تراقب المتحكمات الدقيقة الموجودة في السيارة أشياء كثيرة في وقت واحد مثل استشعار سرعة السيارة ، وفحص أجهزة الاستشعار الأخرى ، والتحكم في درجة حرارة مكيف الهواء وما إلى ذلك ، فما الذي يجعل فتح الوسادة الهوائية بشكل مفاجئ في ثوانٍ؟ الجواب هو المقاطعات ، يتم استخدام إشارة المقاطعة هنا والتي لها الأولوية القصوى للجميع.
مثال بسيط آخر على المقاطعات هو الهواتف المحمولة التي تعمل باللمس والتي لها الأولوية القصوى لحاسة اللمس. تقريبا كل جهاز إلكتروني لديه نوع من المقاطعة "لمقاطعة" العملية المنتظمة والقيام ببعض الأشياء ذات الأولوية الأعلى في حدث معين. يتم استئناف العملية العادية بعد خدمة المقاطعة.
لذلك ، من الناحية الفنية ، تعد المقاطعات آلية يمكن بواسطتها إدخال / إخراج أو تعليمات تعليق التنفيذ العادي للمعالج والحصول على الخدمة نفسها كما لو كانت لها أولوية أعلى. على سبيل المثال ، يمكن مقاطعة المعالج الذي يقوم بالتنفيذ العادي بواسطة بعض أجهزة الاستشعار لتنفيذ عملية معينة موجودة في ISR (روتين خدمة المقاطعة). بعد تنفيذ معالج ISR يمكن استئناف التنفيذ الطبيعي مرة أخرى.
أنواع المقاطعات
هناك نوعان من المقاطعات:
مقاطعة الأجهزة: تحدث عندما يحدث حدث خارجي مثل تغيير دبوس المقاطعة الخارجي حالته من LOW إلى HIGH أو HIGH إلى LOW.
مقاطعة البرامج: تحدث وفقًا لتعليمات البرنامج. على سبيل المثال ، تعد مقاطعات المؤقت مقاطعة البرامج.
المقاطعات في اردوينو
سنرى الآن كيفية استخدام المقاطعات في لوحة Arduino. له نوعان من المقاطعات:
- المقاطعة الخارجية
- دبوس تغيير المقاطعة
المقاطعة الخارجية:
يتم تفسير هذه المقاطعة بواسطة الأجهزة وهي سريعة جدًا. يمكن ضبط هذه المقاطعات على التشغيل عند حدوث ارتفاع أو انخفاض أو انخفاض المستويات.
لوحة اردوينو |
دبابيس المقاطعة الخارجية: |
أونو ، نانو |
2،3 |
ميجا |
2،3،18،19،20،21 |
دبوس تغيير المقاطعات:
يمكن أن يكون لدى Arduinos المزيد من دبابيس المقاطعة التي تم تمكينها باستخدام مقاطعات تغيير الدبوس. في لوحات Arduino القائمة على ATmega168 / 328 ، يمكن استخدام أي دبابيس أو جميع دبابيس الإشارة العشرين كدبابيس للمقاطعة. يمكن أيضًا تشغيلها باستخدام حواف مرتفعة أو متساقطة.
استخدام المقاطعات في الأردوينو
من أجل استخدام المقاطعات في Arduino ، يجب فهم المفاهيم التالية.
روتين خدمة المقاطعة (ISR)
روتين خدمة المقاطعة أو معالج المقاطعة هو حدث يحتوي على مجموعة صغيرة من الإرشادات فيه. عند حدوث مقاطعة خارجية ، ينفذ المعالج أولاً هذه التعليمات البرمجية الموجودة في ISR ويعود إلى الحالة التي ترك فيها التنفيذ الطبيعي.
يحتوي ISR على النحو التالي في Arduino:
attachInterrupt (digitalPinToInterrupt (pin) ، ISR ، الوضع) ؛
digitalPinToInterrupt (دبوس): في Arduino Uno ، NANO المسامير المستخدمة للمقاطعة هي 2،3 وفي ميجا 2،3،18،19،20،21. حدد دبوس الإدخال المستخدم للمقاطعة الخارجية هنا.
ISR: هي وظيفة يتم استدعاؤها عند حدوث مقاطعة خارجية.
الوضع: نوع الانتقال الذي يتم تشغيله ، على سبيل المثال ، هبوط ، ارتفاع ، إلخ.
- الارتفاع: لتشغيل المقاطعة عندما ينتقل الدبوس من LOW إلى HIGH.
- السقوط: لتحريك المقاطعة عندما ينتقل الدبوس من HIGH إلى LOW.
- CHANGE: لتشغيل مقاطعة عندما ينتقل الدبوس من LOW إلى HIGH أو HIGH إلى LOW (أي عندما تتغير حالة الدبوس).
بعض الشروط أثناء استخدام المقاطعة
- يجب أن تكون وظيفة روتين خدمة المقاطعة (ISR) قصيرة قدر الإمكان.
- لا تعمل وظيفة Delay () داخل ISR ويجب تجنبها.
في هذا البرنامج التعليمي Arduino Interrupt ، يتم زيادة رقم من 0 ويتم استخدام زرين ضغط لتشغيل المقاطعة ، كل واحد متصل بـ D2 & D3. يستخدم مؤشر LED للإشارة إلى المقاطعة. إذا تم الضغط على زر ضغط واحد ، يتم تشغيل المصباح وتعرض الشاشة مقاطعة 2 وتنطفئ ، وعندما يتم الضغط على زر ضغط آخر ، ينطفئ المصباح وتعرض الشاشة مقاطعة 1 وتنطفئ.
المكونات مطلوبة
- لوحة Arduino (في هذا البرنامج التعليمي يتم استخدام Arduino NANO)
- زر الضغط - 2
- LED - 1
- المقاوم (10 كيلو) -2
- شاشة LCD (16 × 2) - 1
- مجلس الخبز
- توصيل الأسلاك
مخطط الرسم البياني
اتصال الدائرة بين Arduino Nano وشاشة LCD مقاس 16x2:
شاشة LCD |
اردوينو نانو |
VSS |
GND |
VDD |
+ 5 فولت |
V0 |
إلى مركز الجهد PIN للتحكم في تباين شاشة LCD |
RS |
د 7 |
RW |
GND |
ه |
د 8 |
د 4 |
D9 |
د 5 |
D10 |
د 6 |
D11 |
د 7 |
D12 |
أ |
+ 5 فولت |
ك |
GND |
زران دفع متصلان بـ Arduino Nano في الدبوس D2 و D3. يتم استخدامها لاستخدام قاطعين خارجيين ، أحدهما لتشغيل LED والآخر لإيقاف تشغيل LED. يحتوي كل زر ضغط على مقاوم سحب لأسفل يبلغ 10 كيلو متصلاً بالأرض. لذلك عند الضغط على زر الضغط يكون المنطق HIGH (1) وعندما لا يتم الضغط عليه يكون المنطق LOW (0). المقاوم المنسدل إلزامي وإلا ستكون هناك قيم عائمة في دبوس الإدخال D2 & D3.
A LED يستخدم أيضا للإشارة إلى أن المقاطعة قد تسبب أو تم الضغط على زر.
برمجة مقاطعة اردوينو
في هذا البرنامج التعليمي ، يتم زيادة الرقم من 0 والذي يتم عرضه بشكل مستمر في شاشة LCD (16 × 2) متصلة بـ Arduino Nano ، عندما يتم الضغط على زر الضغط الأيسر (دبوس المقاطعة D3) ، يتم تشغيل مؤشر LED وتظهر الشاشة Interrupt2 ، وعندما يتم الضغط على زر الضغط الأيمن (دبوس المقاطعة D2) مضغوط ، ينطفئ مؤشر LED ويظهر على الشاشة Interrupt1.
يتم تقديم رمز كامل مع فيديو عملي في نهاية هذا البرنامج التعليمي.
1. يتم أولاً تضمين ملف الرأس الخاص بشاشة LCD ثم تحديد دبابيس LCD المستخدمة في الاتصال بـ Arduino Nano.
#تضمن
2. داخل وظيفة الإعداد الباطل () ، قم أولاً بعرض بعض الرسائل التمهيدية على شاشة LCD. تعرف على المزيد حول توصيل شاشة LCD مع Arduino هنا.
lcd.begin (16.2) ؛ lcd.setCursor (0،0) ؛ lcd.print ("CIRCUIT DIGEST") ؛ lcd.setCursor (0،1) ؛ lcd.print ("ArduinoInterrupt") ؛ تأخير (3000) ؛ lcd.clear () ؛
3. ثم في نفس وظيفة الإعداد الفارغ () يجب تحديد دبابيس الإدخال والإخراج. يتم توصيل دبوس D13 بمصباح LED ، لذلك يجب تحديد هذا الدبوس كإخراج.
pinMode (13 ، الإخراج) ؛
4. الآن يأتي الجزء المهم الرئيسي في البرمجة وهو الوظيفة attachInterrupt () ، وهي مدرجة أيضًا داخل إعداد الفراغ ().
attachInterrupt (digitalPinToInterrupt (2) ، buttonPressed1 ، RISING) ؛ attachInterrupt (digitalPinToInterrupt (3) ، buttonPressed2 ، RISING) ؛
هنا يتم تحديد أن الدبوس 2 مخصص للمقاطعة الخارجية ، ويتم استدعاء وظيفة buttonPressed1 عندما يكون هناك RISING (LOW to HIGH) عند D2 pin. والدبوس 3 مخصص أيضًا للمقاطعة الخارجية ويتم استدعاء وظيفة buttonPressed2 عندما يكون هناك RISING عند D3 pin.
5. داخل الحلقة الفارغة () ، يتم زيادة الرقم (i) من الصفر ويتم طباعته على شاشة LCD (16 × 2).
lcd.clear () ؛ lcd.print ("COUNTER:") ؛ lcd.print (ط) ؛ ++ أنا ؛ تأخير (1000) ؛
في نفس الحلقة الفارغة () ، يتم استخدام digitalWrite () على الدبوس D13 حيث يتم توصيل أنود LED. اعتمادًا على القيمة في الناتج المتغير ، سيتم تشغيل أو إيقاف تشغيل LED
digitalWrite (13 ، الإخراج) ؛
6. الجزء الأكثر أهمية هو إنشاء وظيفة معالج المقاطعة وفقًا للاسم المستخدم في وظيفة attachInterrupt () .
نظرًا لاستخدام دبابيس المقاطعة 2 و 3 ، يلزم وجود اثنين من ISR. هنا في هذه البرمجة يتم استخدام ISR التالية
buttonPressed1 ():
buttonPressed1 باطلة { الإخراج = منخفضة ؛ lcd.setCursor (0،1) ؛ lcd.print ("المقاطعة 1") ؛ }
يتم تنفيذ هذه الوظيفة عند الضغط على زر الضغط على الدبوس D2 (RISING EDGE). تغير هذه الوظيفة حالة الإخراج إلى LOW مما يؤدي إلى إيقاف تشغيل LED وطباعة "المقاطعة 1" على شاشة LCD.
زر الضغط 2 ():
buttonPressed2 باطلة {الإخراج = عالية؛ lcd.setCursor (0،1) ؛ lcd.print ("Interrupt2") ؛ }
يتم تنفيذ هذه الوظيفة عند الضغط على زر الضغط الموجود على الدبوس D3. تعمل هذه الوظيفة على تغيير حالة الإخراج إلى HIGH مما يؤدي إلى تشغيل LED وطباعة "المقاطعة 2" على شاشة LCD.
مظاهرة مقاطعة اردوينو
1. عند الضغط على زر الضغط على الجانب الأيسر ، يضيء مؤشر LED وتعرض شاشة LCD المقاطعة 2.
2. عند الضغط على زر الضغط على الجانب الأيمن ، ينطفئ مؤشر LED وتعرض شاشة LCD المقاطعة 1
هذه هي الطريقة التي يمكن أن تكون بها المقاطعة مفيدة لبدء أي مهمة مهمة بين التنفيذ العادي.