Промышленное производство
Промышленный Интернет вещей | Промышленные материалы | Техническое обслуживание и ремонт оборудования | Промышленное программирование |
home  MfgRobots >> Промышленное производство >  >> Manufacturing Technology >> Производственный процесс

Внутренние таймеры Arduino

Компоненты и расходные материалы

Arduino UNO
× 1
LED (общий)
× 1
Резистор 220 Ом
× 1

Об этом проекте

Обзор

Если вам нужно считать точное время, вам нужно использовать таймер, но обычно не так просто использовать внутренние таймеры Arduino, поэтому в этом уроке я попытаюсь объяснить, как их использовать простым способом.

Так важно использовать таймеры, потому что во время функции delay () вы ничего не можете сделать, но с таймером вы можете делать все, потому что, когда момент действительно наступает, он активирует прерывание.

Я использую TIMER0, потому что это самый простой таймер, возможно, в будущем я смогу объяснить другие таймеры.

Как это работает

Первое, что вам нужно увидеть, это техническое описание ATmega328P.

Это блок-схема счетчика, и глядя на нее, вы можете понять, как она работает.

Предварительный делитель принимает импульс от тактового цикла и затем передает его в логику управления, поэтому логика управления увеличивает регистр TCNTn на 1.

Теперь мы можем сравнить значение TCNTn с конкретным значением. Когда регистр TCNTn достигает этого значения, вы знаете, что прошло определенное время.

Этот метод называется режимом CTC для «Сброс таймера при сравнении». Значение регистра TCNTn сравнивается с регистром OCRn, когда происходит совпадение сравнения, TOVn генерирует прерывание.

Еще одна важная вещь - это предварительный делитель, с его помощью вы можете создавать разные деления тактовой частоты, на самом деле 16 МГц - это слишком много, но, благодаря предварительному делителю, вы можете создать несколько его долей. Это зависит от конфигурации регистра TCCR0B.

Еще одна важная вещь - определить значение регистра OCRn для подсчета определенного времени, вам понадобится немного математики.

Я знаю, что все это может показаться слишком сложным, но я уверен, что приведенный ниже код проясняет каждый вопрос.

В этом случае мы активируем запрос прерывания каждые 0,001 секунды.

  TCCR0A | =(1 < 

Важно установить предварительный делитель в конце, потому что после этой инструкции таймер начинает отсчет, если вам нужно его остановить, вы должны сбросить все биты TCCR0B.

Ниже приведен пример.

Код

  • Внутренний таймер
Внутренний таймер Arduino
 / * Эта программа включает и выключает светодиод на выводе 13 каждую 1 секунду с использованием внутреннего таймера * / int timer =0; bool state =0; void setup () {pinMode (13, OUTPUT); TCCR0A =(1 < =1000) {state =! state; таймер =0; } digitalWrite (13, состояние); } ISR (TIMER0_COMPA_vect) {// Это таймер запроса прерывания ++;} 

Схема


Производственный процесс

  1. Arduino Spybot
  2. FlickMote
  3. Самодельный телевизор B-Gone
  4. Основные часы
  5. Найди меня
  6. Arduino Power
  7. Tech-TicTacToe
  8. Четвероногий Arduino
  9. Джойстик Arduino
  10. Станок с ЧПУ