- סוגי הפרעות
- מפריע בארדואינו
- שימוש בהפרעות בארדואינו
- רכיבים נדרשים
- תרשים מעגל
- תכנות הפסקת Arduino
- הפגנת ארדואינו
קחו בחשבון מכונית שנעה במהירות, אם היא נפגעת לפתע ממכונית אחרת בכיוון ההפוך, הדבר הראשון שקורה הוא שחיישן מד התאוצה שנמצא ברכב חש תאוצה פתאומית ומפעיל הפרעה חיצונית למיקרו-בקר שנמצא ב המכונית. ואז, בהתבסס על אותה הפרעה, מייצר המיקרו אות חשמלי לפרוס את כריות האוויר באופן מיידי. מיקרו-בקרים הנמצאים ברכב עוקבים אחר דברים רבים בו זמנית כמו חישת מהירות המכונית, בדיקת חיישנים אחרים, שליטה על טמפרטורת המזגן וכו '. אז מה גורם לפתיחה פתאומית של כרית אוויר בשניות? התשובה היא הפרעות, משתמשים כאן באות הפסקות שיש להם את העדיפות הגבוהה מכולם.
דוגמה פשוטה נוספת להפסקות הוא טלפונים ניידים עם מסך מגע בעלי העדיפות הגבוהה ביותר לחוש "מגע". כמעט לכל מכשיר אלקטרוני יש סוג כלשהו להפסקות כדי 'להפריע' לתהליך הרגיל ולעשות כמה דברים בעדיפות גבוהה יותר באירוע מסוים. התהליך הרגיל מתחדש לאחר שירת ההפסקה.
אז מבחינה טכנית, Interrupts הוא מנגנון שבאמצעותו קלט / פלט או הוראות יכולים להשעות את הביצוע הרגיל של המעבד ולקבל את עצמו כאילו יש לו עדיפות גבוהה יותר. לדוגמא, מעבד שעושה ביצוע רגיל יכול להיות מופרע על ידי חיישן כלשהו כדי לבצע תהליך מסוים הקיים ב- ISR (Interrupt Service Routine). לאחר ביצוע מעבד ה- ISR יכול לחדש שוב את הביצוע הרגיל.
סוגי הפרעות
ישנם שני סוגים של הפרעות:
הפרעת חומרה: זה קורה כאשר אירוע חיצוני מתרחש כמו סיכת הפרעה חיצונית משנה את מצבה מ- LOW ל- HIGH או HIGH ל- LOW.
הפרעה לתוכנה: זה קורה על פי ההוראות מהתוכנה. לדוגמא הפרעות טיימר הן הפרעה לתוכנה.
מפריע בארדואינו
כעת נראה כיצד להשתמש בהפרעות בלוח Arduino. יש לו שני סוגים של הפרעות:
- הפרעה חיצונית
- הפסק שינוי הצמד
הפרעה חיצונית:
הפרעות אלה מתפרשות על ידי חומרה ומהירות מאוד. ניתן להגדיר הפרעות אלה להפעלת אירוע של רמות עלייה או ירידה או ירידה נמוכה.
מועצת ארדואינו |
סיכות הפרעה חיצוניות: |
UNO, NANO |
2,3 |
מגה |
2,3,18,19,20,21 |
הפרעות בשינוי פין:
ל- Arduinos ניתן להפעיל יותר סיכות הפסקה באמצעות הפרעות להחלפת סיכה. בלוחות Arduino מבוססי ATmega168 / 328 כל פינים או כל 20 סיכות האות יכולים לשמש כסיכות הפסקה. הם יכולים להיות מופעלים גם באמצעות קצוות עלייה או ירידה.
שימוש בהפרעות בארדואינו
על מנת להשתמש בהפרעות בארדואינו יש להבין את המושגים הבאים.
שגרת שירות הפסקה (ISR)
שגרת שירות להפסיק או מטפל בהפסקה הוא אירוע שיש בו הוראות קטנות. כאשר מתרחשת הפרעה חיצונית, המעבד מבצע לראשונה את הקוד שנמצא ב- ISR וחוזר למצב שבו השאיר את הביצוע הרגיל.
ל- ISR התחביר הבא בארדואינו:
attachInterrupt (digitalPinToInterrupt (pin), ISR, mode);
digitalPinToInterrupt (pin): ב- Arduino Uno, NANO הסיכות המשמשות להפסקה הן 2,3 ומגה 2,3,18,19,20,21. ציין כאן את סיכת הקלט המשמשת להפרעה חיצונית.
ISR: זו פונקציה הנקראת כאשר נעשית הפרעה חיצונית.
מצב: סוג המעבר להפעלה, למשל ירידה, עלייה וכו '.
- עולה: כדי להפריע כאשר הסיכה עוברת מ- LOW ל- HIGH.
- נפילה: כדי להפריע כאשר הסיכה עוברת מ- HIGH ל- LOW.
- שינוי: להפעלת הפרעה כאשר הסיכה עוברת מ- LOW ל- HIGH או HIGH ל- LOW (כלומר כאשר מצב הסיכה משתנה).
תנאים מסוימים בעת השימוש ב- Interrupt
- הפסקת פונקציית שגרת השירות (ISR) חייבת להיות קצרה ככל האפשר.
- פונקציית Delay () אינה פועלת בתוך ISR ויש להימנע ממנה.
במדריך זה להפסקת Arduino מספר מוגדל מ- 0 ושני כפתורי לחיצה משמשים להפעלת Interrupt, כל אחד מחובר ל- D2 & D3. נורית LED משמשת לציון ההפרעה. אם לחיצת כפתור אחת נלחצת נורית ההדלקה דולקת והתצוגה מציגה את הפסיקה 2 ונכבה, וכאשר לוחצים על כפתור לחיצה אחר המנורה נכבה והתצוגה מראה את הפרעה 1 ונכבה.
רכיבים נדרשים
- לוח Arduino (במדריך זה נעשה שימוש ב- Arduino NANO)
- לחצן לחיצה - 2
- נורית - 1
- נגד (10K) - 2
- LCD (16x2) - 1
- לוח לחם
- חוטי חיבור
תרשים מעגל
חיבור מעגל בין Arduino Nano לתצוגת LCD 16x2:
LCD |
ארדואינו ננו |
VSS |
GND |
VDD |
+ 5 וולט |
V0 |
ל- PIN של מרכז הפוטנציומטר לשליטה על ניגודיות ה- LCD |
RS |
D7 |
RW |
GND |
ה |
D8 |
D4 |
D9 |
D5 |
D10 |
D6 |
D11 |
D7 |
D12 |
א |
+ 5 וולט |
ק |
GND |
שני כפתורי לחיצה מחוברים לארדואינו ננו בסיכה D2 & D3. הם משמשים לשימוש בשתי הפרעות חיצוניות, אחת להפעלת LED ואחרת לכיבוי LED. לכל כפתור לחצן יש נגיעה נפתחת של 10k מחוברת לקרקע. אז כאשר לוחצים על כפתור הלחץ זה ההיגיון HIGH (1) וכשלא לוחצים עליו זה ההיגיון LOW (0). נגד משוך כלפי מטה הוא חובה אחרת יהיו ערכים צפים בסיכת הקלט D2 & D3.
LED משמש גם כדי להצביע על כך פסיקה כבר מופעלת או כפתור נלחץ.
תכנות הפסקת Arduino
במדריך זה מספר מוגבר מ- 0 המוצג ברציפות ב- LCD (16x2) המחובר ל Arduino Nano, בכל פעם שלוחצים על כפתור הלחיצה השמאלי (סיכת הפסקה D3) הנורית דולקת והתצוגה מציגה את Interrupt2 וכאשר כפתור הלחיצה הימני (סיכת הפסקה D2) נלחץ, ה- LED נכבה והתצוגה מציגה את Interrupt1.
קוד מלא עם סרטון עבודה ניתן בסוף הדרכה זו.
1. ראשית כלול קובץ הכותרת לתצוגת ה- LCD ואז מגדירים את סיכות ה- LCD המשמשות לחיבור עם Arduino Nano.
#לִכלוֹל
2. בתוך פונקציית התקנת הריק (), הצג תחילה הודעת מבוא בתצוגת LCD. למידע נוסף על ממשק LCD עם Arduino כאן.
lcd.begin (16,2); lcd.setCursor (0,0); lcd.print ("מעגל מעגל"); lcd.setCursor (0,1); lcd.print ("ArduinoInterrupt"); עיכוב (3000); lcd.clear ();
3. ואז באותה פונקציה של התקנת הריק () יש לציין את סיכות הכניסה והפלט. הסיכה D13 מחוברת לאנודה של ה- LED, ולכן יש להגדיר סיכה זו כפלט.
pinMode (13, OUTPUT);
4. כעת החלק החשוב העיקרי בתכנות הוא פונקציית attachInterrupt (), והיא כלולה גם בתוך הגדרת הריק ().
attachInterrupt (digitalPinToInterrupt (2), buttonPressed1, RISING); attachInterrupt (digitalPinToInterrupt (3), buttonPressed2, RISING);
כאן מצוין כי סיכה 2 מיועדת להפסקה חיצונית, ולפונקציה buttonPressed1 נקראת כאשר יש RISING (LOW to HIGH) בפין D2. וסיכה 3 מיועדת גם להפסקה חיצונית ולחצן לחץ על הפונקציה Pressed2 כאשר יש עלייה בסיומת D3.
5. בתוך לולאת הריק (), מספר (i) מוגדל מאפס ומודפס על גבי LCD (16x2).
lcd.clear (); lcd.print ("מונה:"); lcd.print (i); ++ i; עיכוב (1000);
באותה לולאה בטלה (), digitalWrite () משמש על הסיכה D13 בה מחובר האנודה של ה- LED. בהתאם לערך בפלט משתנה נורית תידלק או תכבה
digitalWrite (13, פלט);
6. החלק החשוב ביותר הוא יצירת פונקציית מטפלים לפי השם המשמש בפונקציה attachInterrupt () .
כשמשתמשים בשתי סיכות הפסקה 2 ו- 3 כך נדרשים שני ISR. כאן בתכנות זה נעשה שימוש ב- ISR
buttonPressed1 ():
לחצן בטל לחץ 1 () { פלט = LOW; lcd.setCursor (0,1); lcd.print ("הפסקה 1"); }
פונקציה זו מתבצעת כאשר לוחצים על לחצן על סיכה D2 (RISING EDGE). פונקציה זו משנה את מצב הפלט ל- LOW וגורמת לדלוק לכיבוי ומדפיסה את "interrupt1" על צג ה- LCD.
כפתור לחץ 2 ():
לחצן בטל לחץ 2 () {פלט = HIGH; lcd.setCursor (0,1); lcd.print ("Interrupt2"); }
פונקציה זו מבוצעת כאשר לוחצים על לחצן הפין D3. פונקציה זו משנה את מצב הפלט ל- HIGH וגורמת לדלוק להדליק ומדפיסה את "interrupt2" על צג ה- LCD.
הפגנת ארדואינו
1. כאשר לוחצים על לחצן PUSH בצד שמאל הנורית דולקת ול- LCD מוצג Interrupt2.
2. כאשר לוחצים על כפתור ה- PUSH בצד ימין נורית ה- LED מכבה ו- LCD מציג Interrupt1
כך הפרעה יכולה להיות שימושית להפעלת כל משימה חשובה בין ביצוע רגיל.