Оглавление:

Arduino - периодическое прерывание: 4 шага
Arduino - периодическое прерывание: 4 шага

Видео: Arduino - периодическое прерывание: 4 шага

Видео: Arduino - периодическое прерывание: 4 шага
Видео: Уроки Ардуино #12 - циклы 2024, Ноябрь
Anonim
Arduino - периодическое прерывание
Arduino - периодическое прерывание

Это руководство посвящено использованию периодического прерывания для синхронизации в программах Arduino. Это шаг для начинающего программиста Arduino, который знает, что Arduino может делать больше, но не совсем знает, как этого добиться.

Если есть проблемы с производительностью, я предполагаю, что вы используете одну или несколько функций delay (). Уловка состоит в том, чтобы избавиться от функции (-ов) delay () и заменить прерывание. Функция delay () заставляет Arduino ничего не делать в ожидании завершения delay (). Использование прерывания позволяет вашей программе делать другие вещи, ожидая окончания задержки. Обычно существует огромное количество неиспользованного мертвого времени, которое можно использовать для других целей при использовании delay (). Использование прерывания решает эту проблему.

Шаг 1: обработчик прерывания

1. Добавьте в свою программу обработчик прерывания. Просто скопируйте и вставьте где-нибудь выше setup ();

const unsigned long TIMER0_COUNT = 500; // интервал таймера 500 мсек

// Обработчик прерывания TIMER0 volatile bool time = false; ISR (TIMER0_COMPA_vect) {статическое длинное число без знака = 0; если (++ count> TIMER0_COUNT) {count = 0; время = правда; // время устанавливается на истину каждые TIMER0_COUNT мс} // (время необходимо очистить в основной подпрограмме)}

Шаг 2: Установите периодический временной интервал

2. Установите временной интервал. Эта процедура совмещает себя с прерыванием TIMER0, которое запускается каждые ~ 1 мс.

Ваш "интервал" - это количество обрабатываемых прерываний TIMER0. Каждый интервал составляет ~ 1 мс, поэтому вы действительно устанавливаете, сколько прерываний TIMER0 нужно подсчитать, прежде чем активировать интервал. IOW, установите переменную TIMER0_COUNT на сколько миллисекунд вы хотите подождать. Например, используйте 500 для половины секунды. Используйте 3000 в течение 3 секунд.

Шаг 3: Инициализация прерывания

3. Добавьте код «инициализации TIMER0» в свой метод setup (). Опять же, просто скопируйте и вставьте в setup ().

// *** Инициализация TIMER0 ***

cli (); // выключить все прерывания TIMSK0 = 0; // отключаем таймер 0 для уменьшения джиттера OCR0A = 0xBB; // произвольное количество прерываний TIMSK0 | = _BV (OCIE0A); // вернуться к прерыванию sei (); // снова включаем прерывания

Шаг 4. Куда добавить код

4. Добавьте код «проверки времени» в свой метод loop (). Скопируйте и вставьте в loop ().

if (время) {

время = ложь; // здесь что-то делаем}

"Время = ложь;" линия важна. Без этой строки строки «сделай что-нибудь здесь» выполнялись бы каждый раз, когда программа выполняет loop ().

Конечно, вы подставляете свои собственные занятия в строку «сделай что-нибудь здесь». Начните с печати текста или мигания светодиода.

Готово!

Рекомендуемые: