Таймер Arduino: играйте со временем в своих проектах
Некоторое время Прежде чем раскрыть более подробную информацию о функции Millis () de Arduino, мы углубимся в таймер Arduino, чтобы начать с этой функции. временем Кроме MCU и Millis используются и другие функции.
- 1 Что такое таймер Arduino?
- 1. 1 Функции.
Что такое таймер Arduino?
El Arduino таймер или таймер — это реализованный в материале (в микроконтроллере, с использованием кварцевого кристалла, который генерирует тактовые импульсы и определяет «ритм» без необходимости использования внешних оборудования или в интегральных схемах, которые могут управлять временем благодаря внутренним часам 555). Например, он выполняет задачи через определенные промежутки времени времени , точное измерение времени независимо от кода изосети.
Komo Arduino UNO оснащен чипом MCU с частотой 16 МГц, который может выполнять 16, 000, 000 16 XNUMX операций в секунду. Команды требуют выполнения x-кругов, и не все из них в одном тактовом круге. Например, xnumx требует больше тактов в этой архитектуре AVR.
Представьте себе использование функции задержки (). Она блокирует выполнение программы микроконтроллером Arduino до тех пор, пока вы не укажете времени а затем продолжит выполнение программы, но таймер не будет заблокирован. Это синхронизируется, поскольку MCU продолжает выполнять другие команды в то же самое время. Это является основным преимуществом.
Таймеры ассоциируются с прерываниями Arduino, потому что через них выполняются определенные задачи. Другими словами, таймеры Arduino — это функции, которые активируются определенными время функции прерывания. Поэтому также важно знать эти прерывания.
Метод.
Таймеры Arduino могут работать двумя способами
- ШИМ-сигнал: вы можете проверить контакт Arduino (см.~).
- CTC (сбрасывает таймер при идентификации): считает. время При достижении цены, указанной в счетчике и в регистраторе таймера, происходит прерывание.
Сколько у него таймеров? Типы таймеров
Плита Arduino UNO имеет три таймера, в то время как другие верхние плиты имеют больше таймеров.
- Таймер 0: 8-битный, считывает от 0 до 255 (256 возможных цен), используется такими функциями, как Delay (), Millis () и Micros (). Не рекомендуется изменять его во избежание повторного запуска программы.
- Таймер 1: соответствует таймеру 0, используется сервисной библиотекой UNO (таймер 5 в MEGA).
- Таймер 2: 16 бит может принимать значения от 0 до 65, 525 65, 536 (потенциальная цена XNUMX XNUMX); используется для TONE (), если не используется, свободен для приложений.
- Таймеры 3, 4 и 5 (только для Arduino Mega): все 16-битные.
Как работает таймер Arduino?
Для использования таймеров Arduino очень важно знать, как все работает с этим MCU на этой макетной плате.
- Тактовая частота: это количество циклов в секунду, которое может быть сгенерировано, если частота Arduino составляет 16 МГц или что то же самое, тактовый сигнал колеблется 16, 000, 000 XNumx Xnumx времени (циклов) в секунду.
- Продолжительность: обозначается символом t, измеряется в секундах и является обратной величиной окружности. Например, t = 1/c, что дает 1/16000000 = 0. 0000000625. время Это требуется для завершения каждого цикла. Частота обратно пропорциональна длительности, поэтому f = 1/t.
- Цикл: каждое повторение сигнала, генерируемого устройством. времени На Arduino это будет 16 м в секунду. Или, что то же самое, в данном случае, когда прошло 16 миллионов циклов, прошла 1 секунда. Поэтому мы можем сказать, что цикл длится 625 нс.
- Выше акне: тактовый сигнал имеет прямоугольную форму, края могут быть направлены вверх или вниз. Акне — это линейный сигнал со следующими модификациями.
- От 0 (низкий) до 1 (высокий): восходящий акне.
- От 1 (высокий) до 0 (низкий): нисходящий акне.
Край важен, потому что таймер Arduino считает круги от края сигнала. a) Да, этот счетчик увеличивается с каждым циклом, и при достижении цены регистрации происходит перерыв. b) Нет, этот счетчик не считает круги от края сигнала.
Поэтому, зная это, мы можем сказать, что если у вас есть микроконтроллер Arduino с частотой 16 МГц и вы используете 8-битный таймер, отпуск будет происходить каждые 16 мс (256/16000000) или каждые 4 мс с 16 битами (65536/16000000). Поэтому, если 16-битный регистратор установлен на максимум 65535, отпуск произойдет через 4 мс, и работа будет выполнена.
Когда счетчик достигает максимальной цены, он снова возвращается к 0. Это означает, что счетчик переполняется и измеряет с начала.
Вы также можете проверить скорость таймера с помощью пределителя, который принимает значения 1, 8, 64, 256 и 1024, и изменить расписание следующим образом
Время скорости (Гц) = тактовая частота Arduino
Для 1 рефлекторного контроллера частота составляет 2 МГц для 8, 250 кГц для 64 и увеличивается до 16 МГц. Помните, что существует таймерный компаратор счетчика, который сравнивает цену и известность счетчика и выполняет действия до тех пор, пока они не сравняются. Таким образом, частота прерываний задается следующими типами.
+1 Регистратор счетчика имеет индекс 0, т.е. он начинает отсчет с 0, а не с 1.
Частота прерывания (Гц) = часы Arduino/частота (цена регистратора + 1).
К счастью, вам не нужно изменять запись таймера Arduino, так как библиотека, используемая в коде, поддерживает это. Однако если вы ее не используете, вам придется ее подкорректировать.
Примеры в Arduino IDE
Чтобы понять все это немного лучше, приведем два скетч-кода для Arduino IDE, которые дадут вам некоторый опыт использования таймера: первый — код для мигания светодиода, подключенного к выводу 8 на Arduino; второй — код для мигания светодиода, подключенного к выводу 8 на Arduino.
#define ledpin 8 void setup()< pinMode(ledPin, OUTPUT); // Configurar Timer1 TCCR1A = 0; //Registro control A a 0, pines OC1A y OC1B deshabilitados TCCR1B = 0; //Limpia el registrador TCCR1B |= (1<
void loop()< >ISR (Timer1_ovf_vect)//interrupcióndeltimer1< TCNT1 = 0xC2F7; // Reniciar Timer1 digitalWrite(ledPin, digitalRead(ledPin) ^ 1); //Invierte el estado del LED > Запланируйте мигающий или немигающий светодиод каждую секунду, как в предыдущем случае, но на этот раз используя CTC. Т.е. сравните.
#define ledpin 8 void setup()< pinMode(ledPin, OUTPUT); // Configuración Timer1 TCCR1A = 0; //Registro de control A a 0 TCCR1B = 0; //Limpiar registro TCNT1 = 0; //Inicializar el temporizador OCR1A = 0x3D08; //Carga el valor del registro de comparación: 16MHz/1024/1Hz -1 = 15624 = 0X3D08 TCCR1B |= (1 void loop() < >ISR (Timer1_compa_vect) //interrupción< digitalWrite(ledPin, digitalRead(ledPin) ^ 1); //Invierte el estado del LED >
Статья следует инструкциям по редактированию. Чтобы сообщить об ошибке, нажмите здесь.
Полный корень статьи: свободный оборудование ‘Arduino’ Таймер Arduino: играйте со временем в своих проектах