Зовнішні переривання - програмування мікроконтролерів

У цій статті я розповім Вам про зовнішні переривання Arduino.

Взагалі, переривання - це сигнал, що передається микроконтроллеру, який повідомляє йому про те, що необхідно перервати виконання програми і виконати кілька інструкцій з високим пріоритетом. Такі інструкції називаються оброблювачем переривання.







Переривання - це дуже потужний інструмент, просто необхідний, коли Вам потрібно щоб процесор керував чомусь (наприклад світлодіодами, дисплеєм, моторами і т.д.) і при цьому завжди був готовий виконати якусь команду. наприклад після натискання кнопки.

Існує кілька типів переривань. Основні з них, це переривання по таймеру і зовнішні переривання. Зовнішні переривання - це переривання виконуються при зміні стану будь-якого Піна нашого мікроконтролера. На них я і зупинюся детальніше.

Отже, зазвичай мікроконтролери можуть обробляти до двох зовнішніх переривань. Такі як Arduino Mega, Leonardo, Due можуть обробляти більшу кількість переривань, але принцип роботи з ними залишається таким же. Я розповім про роботу з перериваннями на прикладі Arduino Uno.

Для роботи з зовнішніми перериваннями Arduino Uno використовуються Піни 2 і 3. Відповідно мікроконтролер визначає їх як 0 (нульове) і 1 (перше) зовнішнє переривання.

Для виклику переривань використовується стандартна конструкція Arduino IDE:

attachInterrupt (interrupt, function, mode)

При виклику даної функції необхідно вказати наступні параметри:

1) Номер переривання - тобто пін, з якого ми зчитуємо умова виникнення переривання. Відповідно номер може бути 0 або 1 (тобто Піни 2 і 3).







2) Функція обробника переривання - тут ми вказуємо функцію, яка буде викликана, при виникненні події переривання.

3) Тип переривання - тут вказується подія, яке буде очікувати мікроконтролер для запуску обробника переривання. Тип переривання набуває таких значень:

HIGH - запускає обробник при отриманні +5 В або логічної 1;

LOW - запускає обробник при отриманні 0В або логічного 0;

RISING - запускає обробник при отриманні висхідного фронту сигналу (зміни напруги від 0 до +5 В);

FALLING - запускає обробник при отриманні спадного фронту сигналу (зміни напруги від +5 до 0);

CHANGE - запускає обробник при змінах сигналу, як від +5 до 0, так і навпаки.

Крім цього, для роботи з перериваннями є інші функції:

З функціями дозволу і заборони виконання всіх переривань потрібно працювати дуже вибірково, особливо при роботі з підключаються бібліотеками, так як заборона всіх переривань може привести до неправильної роботи функцій зав'язаних на внутрішні таймери і так далі. Я зупинюся на цьому в статті про своє невеликому проекті, де я використав зовнішні переривання і TFT дисплей.

І ще одне теоретичне відступ. При роботі з зовнішніми перериваннями, якщо Ви збираєтеся зчитувати натискання кнопок, актуальна проблема боротьби з дребезгом контактів. Якщо ви вже працювали з кнопками, то знаєте, що при натисканні кнопки виникає кілька змін стану, які не сприймаються людиною, а мікроконтролер їх прекрасно зауважує. Зазвичай в простих проектах цю проблему вирішують з використанням невеликих затримок, які не особливо впливають на час виконання програми, але дозволяють кнопці стабілізуватися. При роботі з зовнішніми перериваннями такий підхід вже не працює, тому брязкіт контатктов потрібно усувати не в програмному, а апаратним способом. Для цього завдання прекрасно підходить інвертується тригер Шмідта. Я використовую мікросхему 74HC14N, яка включає в себе вісім таких тригерів. Отже, розберемося як він підключається і як все це працює. Тригер Шмідта працює дуже просто, при подачі на вхід +5 на виході він видає 0 і навпаки, тобто інвертує отриманий сигнал. Тепер зберемо схему як показано на малюнку.







Схожі статті