- Види переривань
- Переривання в Arduino
- Використання переривань в Arduino
- Потрібні компоненти
- Кругова діаграма
- Програмування переривань Arduino
- Демонстрація переривання Arduino
Розглянемо автомобіль, що швидко рухається, якщо раптом його збиває інший автомобіль у протилежному напрямку, перше, що трапляється, це те, що датчик акселерометра, присутній в машині, відчуває раптове розгін і спрацьовує зовнішнє переривання мікроконтролера, що знаходиться в машина. Потім на основі цього переривання мікроконтролер видає електричний сигнал для негайного розгортання подушок безпеки. Мікроконтролери, присутні в машині, одночасно відстежують багато речей, наприклад, відчувають швидкість автомобіля, перевіряють інші датчики, контролюють температуру кондиціонера тощо. То що робить раптове відкриття подушки безпеки за лічені секунди? Відповідь - переривання, тут використовується сигнал переривання, який має найвищий пріоритет серед усіх.
Ще одним простим прикладом переривань є мобільні телефони із сенсорним екраном, які мають найвищий пріоритет щодо сенсорності. Майже кожен електронний пристрій має певний вид переривань, щоб `` перервати '' звичайний процес і виконати деякі дії з вищим пріоритетом щодо певної події. Регулярний процес відновлюється після подання переривання.
Тож технічно переривання - це механізм, за допомогою якого введення-виведення або інструкція може призупинити нормальне виконання процесора і отримує обслуговування, як у нього вищий пріоритет. Наприклад, процесор, що виконує звичайне виконання, може бути перерваний якимось датчиком для виконання певного процесу, який присутній у ISR (Interrupt Service Rutine). Після запуску процесор ISR може знову відновити нормальне виконання.
Види переривань
Існує два типи переривань:
Апаратне переривання: Це трапляється, коли зовнішня подія відбувається, коли зовнішній вивід переривання змінює свій стан з LOW на HIGH або HIGH на LOW.
Програмне переривання: Це відбувається відповідно до інструкцій програмного забезпечення. Наприклад, переривання таймера - це програмне переривання.
Переривання в Arduino
Тепер ми побачимо, як використовувати переривання в Arduino Board. Він має два типи переривань:
- Зовнішнє переривання
- Переривання заміни контактів
Зовнішнє переривання:
Ці переривання інтерпретуються апаратно і дуже швидко. Ці переривання можуть бути встановлені для спрацьовування у випадку підняття або падіння або низьких рівнів.
Arduino Board |
Зовнішні штифти переривання: |
УНО, НАНО |
2,3 |
Мега |
2,3,18,19,20,21 |
Переривання зміни PIN-коду:
Arduinos може мати більше контактів переривання, використовуючи переривання заміни контактів. У платах Arduino на базі ATmega168 / 328 будь-які висновки або всі 20 сигнальних висновків можуть використовуватися як висновки переривання. Їх також можна спрацьовувати за допомогою піднімаючих або падаючих країв.
Використання переривань в Arduino
Для того, щоб використовувати переривання в Arduino, слід розуміти наступні поняття.
Процедура обслуговування переривань (ISR)
Процедура служби переривань або обробник переривань - це подія, що містить невеликий набір інструкцій. Коли відбувається зовнішнє переривання, процесор спочатку виконує цей код, який присутній у ISR, і повертається до стану, де він залишив нормальне виконання.
ISR має такий синтаксис в Arduino:
attachInterrupt (digitalPinToInterrupt (pin), ISR, режим);
digitalPinToInterrupt (pin): У Arduino Uno, NANO висновки, що використовуються для переривання, складають 2,3 & in mega 2,3,18,19,20,21. Тут вкажіть вхідний штифт, який використовується для зовнішнього переривання.
ISR: Це функція, яка викликається при виконанні зовнішнього переривання.
Режим: тип переходу для запуску, наприклад, падіння, підйом тощо.
- RISING: Щоб викликати переривання, коли штифт переходить від LOW до HIGH.
- FALLING: щоб викликати переривання, коли штифт переходить від HIGH до LOW.
- ЗМІНА: Щоб викликати переривання, коли штифт переходить від НИЗЬКОГО до ВИСОКОГО або ВИСОКОГО до НИЗЬКОГО (тобто, коли стан контакту змінюється).
Деякі умови під час використання переривання
- Функція переривання служби переривання (ISR) повинна бути якомога коротшою.
- Функція Delay () не працює всередині ISR і її слід уникати.
У цьому посібнику з переривання Arduino число збільшується від 0, а дві кнопки використовуються для спрацьовування переривання, кожна з яких підключена до D2 і D3. Для індикації переривання використовується світлодіод. Якщо натиснути одну кнопку, світлодіод увімкнеться, а на дисплеї з'явиться переривання2 і згасне, а коли натисне іншу кнопку, світлодіод вимкнеться, а на дисплеї відобразиться переривання1 і згасне.
Потрібні компоненти
- Arduino Board (У цьому посібнику використовується Arduino NANO)
- Кнопка - 2
- Світлодіод - 1
- Резистор (10K) - 2
- РК-дисплей (16x2) - 1
- Хлібна дошка
- Підключення проводів
Кругова діаграма
Схема з'єднання між Arduino Nano та РК-дисплеєм 16x2:
РК-дисплей |
Arduino Nano |
VSS |
GND |
VDD |
+ 5В |
V0 |
На PIN-код центру потенціометра Для контролю контрастності РК-дисплея |
RS |
D7 |
RW |
GND |
Е |
D8 |
D4 |
D9 |
D5 |
D10 |
D6 |
D11 |
D7 |
D12 |
A |
+ 5В |
К |
GND |
Дві кнопки підключені до Arduino Nano на штифтах D2 і D3. Вони використовуються для використання двох зовнішніх переривань, одного для увімкнення світлодіода та іншого для вимкнення світлодіода. Кожна кнопка має висувний резистор 10k, підключений до землі. Отже, при натисканні кнопки це логіка ВИСОКО (1), а якщо не натискати - це логіка НИЗЬКО (0). Висувний резистор є обов’язковим, інакше на вхідних штифтах D2 і D3 будуть плаваючі значення.
LED також використовується для вказівки того, що переривання було викликано або кнопка була натиснута.
Програмування переривань Arduino
У цьому посібнику кількість збільшується від 0, що постійно відображається на (16x2) РК-дисплеї, підключеному до Arduino Nano, при кожному натисканні лівої кнопки (штифт переривання D3) світлодіод загоряється, а на дисплеї відображається Interrupt2, а коли права кнопка (штифт переривання D2) натискається, світлодіод вимикається і на дисплеї відображається Interrupt1.
Повний код із робочим відео наведено в кінці цього посібника.
1. Спочатку включається файл заголовка для РК-дисплея, а потім визначаються штифти РК-дисплея, які використовуються для підключення до Arduino Nano.
#включати
2. Усередині функції налаштування порожнечі () спочатку виведіть деяке вступне повідомлення на РК-дисплеї. Дізнайтеся більше про взаємодію РК із Arduino тут.
lcd.begin (16,2); lcd.setCursor (0,0); lcd.print ("СХЕМ ДАЙДЖЕСТУ"); lcd.setCursor (0,1); lcd.print ("ArduinoInterrupt"); затримка (3000); lcd.clear ();
3. Тоді в тій самій функції void setup () повинні бути вказані вхідні та вихідні штифти. Штифт D13 підключений до анода світлодіода, тому цей штифт повинен бути визначений як вихідний.
pinMode (13, ВИХІД);
4. Тепер головна важлива частина програмування - це функція attachInterrupt (), вона також включена в установку void ().
attachInterrupt (digitalPinToInterrupt (2), buttonPress1, RISING); attachInterrupt (digitalPinToInterrupt (3), buttonPress2, RISING);
Тут зазначено, що висновок 2 призначений для зовнішнього переривання, а функція buttonPress1 викликається, коли на виводі D2 є RISING (LOW to HIGH). А висновок 3 також призначений для зовнішнього переривання, а функція buttonPress2 викликається, коли на виводі D3 є RISING.
5. Усередині петлі порожнечі () число (i) збільшується з нуля та друкується на РК-дисплеї (16x2).
lcd.clear (); lcd.print ("ЛІЧИЛЬНИК:"); lcd.print (i); ++ i; затримка (1000);
У тій самій порожній петлі () використовується digitalWrite () на штифті D13, де підключений анод світлодіода. Залежно від значення змінної потужності світлодіод вмикається або вимикається
digitalWrite (13, вихід);
6. Найважливішою частиною є створення функції обробника переривань відповідно до імені, яке використовується у функції attachInterrupt () .
Оскільки використовуються два виводи переривання 2 і 3, тому потрібні два ISR. Тут у цьому програмуванні використовуються наступні ISR
buttonPress1 ():
button voidPress1 () { output = LOW; lcd.setCursor (0,1); lcd.print ("Переривання 1"); }
Ця функція виконується при натисканні кнопки на штифті D2 (RISING EDGE). Ця функція змінює стан виходу на LOW, викликаючи вимкнення світлодіода, і друкує “interrupt1” на РК-дисплеї.
buttonPress2 ():
void buttonPress2 () {output = HIGH; lcd.setCursor (0,1); lcd.print ("Interrupt2"); }
Ця функція виконується при натисканні кнопки на штифті D3. Ця функція змінює стан виходу на HIGH (ВИСОКИЙ), що призводить до того, що світлодіод вмикається, і друкує “interrupt2” на РК-дисплеї.
Демонстрація переривання Arduino
1. При натисканні кнопки PUSH на лівій стороні світлодіод загоряється, а на РК-дисплеї відображається Interrupt2.
2. При натисканні на КНОПКУ ПРАВА на правій стороні світлодіод вимикається, а на РК-дисплеї відображається Переривання1
Ось як переривання може бути корисним для запуску будь-якого важливого завдання між нормальним виконанням.