Arduino gyver timer

GyverLibs/GyverTimers

Use Git or checkout with SVN using the web URL.

Work fast with our official CLI. Learn more.

Launching GitHub Desktop

If nothing happens, download GitHub Desktop and try again.

Launching GitHub Desktop

If nothing happens, download GitHub Desktop and try again.

Launching Xcode

If nothing happens, download Xcode and try again.

Launching Visual Studio Code

Your codespace will open once ready.

There was a problem preparing your codespace, please try again.

Latest commit

Git stats

Files

Failed to load latest commit information.

README.md

Настройка и контроль прерываний по аппаратным таймерам ATmega328p, ATmega2560

  • Поддерживаются все три таймера на ATmega328 и шесть таймеров на ATmega2560;
  • Настройка периода (мкс) и частоты (Гц) прерываний:
    • 8 бит таймеры: 61 Гц — 1 МГц (16 384 мкс.. 1 мкс);
    • 16 бит таймеры: 0.24 Гц — 1 МГц (4 200 000 мкс.. 1 мкс);
  • Автоматическая корректировка настройки периода от частоты тактирования (F_CPU);
  • Функция возвращает точный установившийся период/частоту для отладки (частота ограничена разрешением таймера);
  • Поддержка многоканального режима работы: один таймер вызывает 2 (ATmega328) или 3 (ATmega2560, таймеры 1, 3, 4, 5) прерывания с настраиваемым сдвигом по фазе 0-360 градусов;
  • Настраиваемое действие аппаратного вывода таймера по прерыванию: высокий сигнал, низкий сигнал, переключение. Позволяет генерировать меандр (одно- и двухтактный);
  • Контроль работы таймера: старт/стоп/пауза/продолжить/инициализация;
  • Библиотеку можно найти по названию GyverTimers и установить через менеджер библиотек в:
    • Arduino IDE
    • Arduino IDE v2
    • PlatformIO
  • Скачать библиотеку .zip архивом для ручной установки:
    • Распаковать и положить в C:\Program Files (x86)\Arduino\libraries (Windows x64)
    • Распаковать и положить в C:\Program Files\Arduino\libraries (Windows x32)
    • Распаковать и положить в Документы/Arduino/libraries/
    • (Arduino IDE) автоматическая установка из .zip: Скетч/Подключить библиотеку/Добавить .ZIP библиотеку… и указать скачанный архив
  • Читай более подробную инструкцию по установке библиотек здесь
  • Рекомендую всегда обновлять библиотеку: в новых версиях исправляются ошибки и баги, а также проводится оптимизация и добавляются новые фичи
  • Через менеджер библиотек IDE: найти библиотеку как при установке и нажать «Обновить»
  • Вручную: удалить папку со старой версией, а затем положить на её место новую. «Замену» делать нельзя: иногда в новых версиях удаляются файлы, которые останутся при замене и могут привести к ошибкам!

Остальные примеры смотри в examples!

1000 гц), вернет реальный период в мкс Timer0.setFrequency(250); // Задать частоту прерываний таймера в Гц, вернет реальную частоту в герцах Timer1.setFrequencyFloat(50.20); // Задать частоту более точно, в дробных числах, актуально для низких частот и таймера 1 // С этого момента таймер уже перенастроен и гоняет с выьранной частотой / периодом // Подключить прерывание таймера, с этого момента прерывания начнут вызываться Timer0.enableISR(); // Подключить стандартное прерывание, канал А, без сдига фаз Timer2.enableISR(CHANNEL_B); // Подключить прерывание таймера 2, канал B Timer1.enableISR(CHANNEL_A); // Подключить прерывание канала А Timer1.enableISR(CHANNEL_B); // Подключить второе прерывание таймера 1 // Прерывание уже начнет вызываться // Если вдруг прерывание нужно отключить, не останавливая таймер Timer1.disableISR(CHANNEL_B); // С этого момента прерывание B больше не будет вызываться // Если нужно приостановить таймер ПОЛНОСТЬЮ, аппаратно Timer2.pause(); // С этого момента таймер стоит на месте, содержимое счетчика остается нетронутым // Теперь таймер можно вернуть в строй Timer2.resume(); // Таймер продолжил считать с того же места // Если нужно полностью остановить таймер и сбросить содержимое счетчика Timer1.stop(); // Таймер стоит, счетчик сброшен // Возвращаем таймер в строй Timer1.restart(); // Таймер перезапущен, начал считать с начала // Если нужно вернуть стандартные Arduino — настройки таймера Timer0.setDefault(); // Теперь таймер работает в станлартном режиме > // векторы прерываний ISR(TIMER1_A) < >ISR(TIMER1_B) < >ISR(TIMER2_B) < >ISR(TIMER0_A) < >void loop() < >«>

  • v1.1 — исправлена ошибка в расчёте периодов
  • v1.2 — код разбит на h и cpp
  • v1.3 — поправлен незначительный баг
  • v1.4 — исправлена таблица частот и периодов
  • v1.5 — исправлен restart и resume
  • v1.6 — phase shift вынесен отдельным методом
  • v1.7 — поправлена документация
  • v1.8 — исправлен баг с макс периодом
  • v1.9 — исправлен баг с возвращаемым 2х периодом
  • v1.10 — добавлен флаг ready

Баги и обратная связь

При нахождении багов создавайте Issue, а лучше сразу пишите на почту alex@alexgyver.ru
Библиотека открыта для доработки и ваших Pull Request‘ов!

При сообщении о багах или некорректной работе библиотеки нужно обязательно указывать:

  • Версия библиотеки
  • Какой используется МК
  • Версия SDK (для ESP)
  • Версия Arduino IDE
  • Корректно ли работают ли встроенные примеры, в которых используются функции и конструкции, приводящие к багу в вашем коде
  • Какой код загружался, какая работа от него ожидалась и как он работает в реальности
  • В идеале приложить минимальный код, в котором наблюдается баг. Не полотно из тысячи строк, а минимальный код

About

Настройка и контроль прерываний по аппаратным таймерам ATmega328p, ATmega2560

Источник

GyverLibs/GyverTimer

Use Git or checkout with SVN using the web URL.

Work fast with our official CLI. Learn more.

Launching GitHub Desktop

If nothing happens, download GitHub Desktop and try again.

Launching GitHub Desktop

If nothing happens, download GitHub Desktop and try again.

Launching Xcode

If nothing happens, download Xcode and try again.

Launching Visual Studio Code

Your codespace will open once ready.

There was a problem preparing your codespace, please try again.

Latest commit

Git stats

Files

Failed to load latest commit information.

README.md

Пполноценный таймер на базе системных millis() / micros()
ВНИМАНИЕ, БИБЛИОТЕКА УСТАРЕЛА! ИСПОЛЬЗУЙ TimerMs

  • Миллисекундный и микросекундный таймер
  • Два режима работы:
    • Режим интервала: таймер «срабатывает» каждый заданный интервал времени
    • Режим таймаута: таймер «срабатывает» один раз по истечении времени (до следующего перезапуска)
  • Служебные функции:
    • Старт
    • Стоп
    • Сброс
    • Продолжить

Совместима со всеми Arduino платформами (используются Arduino-функции)

  • Библиотеку можно найти по названию GyverTimer и установить через менеджер библиотек в:
    • Arduino IDE
    • Arduino IDE v2
    • PlatformIO
  • Скачать библиотеку .zip архивом для ручной установки:
    • Распаковать и положить в C:\Program Files (x86)\Arduino\libraries (Windows x64)
    • Распаковать и положить в C:\Program Files\Arduino\libraries (Windows x32)
    • Распаковать и положить в Документы/Arduino/libraries/
    • (Arduino IDE) автоматическая установка из .zip: Скетч/Подключить библиотеку/Добавить .ZIP библиотеку… и указать скачанный архив
  • Читай более подробную инструкцию по установке библиотек здесь
  • Рекомендую всегда обновлять библиотеку: в новых версиях исправляются ошибки и баги, а также проводится оптимизация и добавляются новые фичи
  • Через менеджер библиотек IDE: найти библиотеку как при установке и нажать «Обновить»
  • Вручную: удалить папку со старой версией, а затем положить на её место новую. «Замену» делать нельзя: иногда в новых версиях удаляются файлы, которые останутся при замене и могут привести к ошибкам!

Остальные примеры смотри в examples!

  • v2.0 — улучшенный алгоритм работы таймера
    • Кратные интервалы
    • Защита от пропусков
    • Защита от переполнения millis()
    • Убраны дефайны
  • v2.1 — возвращены дефайны
  • v2.2 — улучшена стабильность
  • v3.0
    • Логика работы разделена на интервал и таймаут
    • Добавлен общий класс GTimer (для миллисекундного и микросекундного таймера)
    • Добавлена возможность остановить и продолжить счёт таймера
  • v3.2
    • Добавлен isEnabled
    • Возможность не запускать таймер при создании

Баги и обратная связь

При нахождении багов создавайте Issue, а лучше сразу пишите на почту alex@alexgyver.ru
Библиотека открыта для доработки и ваших Pull Request‘ов!

При сообщении о багах или некорректной работе библиотеки нужно обязательно указывать:

  • Версия библиотеки
  • Какой используется МК
  • Версия SDK (для ESP)
  • Версия Arduino IDE
  • Корректно ли работают ли встроенные примеры, в которых используются функции и конструкции, приводящие к багу в вашем коде
  • Какой код загружался, какая работа от него ожидалась и как он работает в реальности
  • В идеале приложить минимальный код, в котором наблюдается баг. Не полотно из тысячи строк, а минимальный код

About

Полноценный таймер на базе системных millis() / micros()

Источник

Работа по таймеру в Arduino. GyverTimer [12.11.19]

ОБНОВЛЕНИЯ

  • v3.2
    • Добавлен isEnabled
    • Возможность не запускать таймер при создании
  • v2.0 – улучшенный алгоритм работы таймера
    • Кратные интервалы
    • Защита от пропусков
    • Защита от переполнения millis()
    • Убраны дефайны
  • v2.1 – возвращены дефайны
  • v2.2 – улучшена стабильность
  • v3.0
    • Логика работы разделена на интервал и таймаут
    • Добавлен общий класс GTimer (для миллисекундного и микросекундного таймера)
    • Добавлена возможность остановить и продолжить счёт таймера

ТЕОРИЯ

Я думаю все знают классический алгоритм создания таймера на millis() – счётчике аптайма:

БИБЛИОТЕКА

GyverTimer v3.2

  • Миллисекундный и микросекундный таймер
  • Два режима работы:
    • Режим интервала: таймер “срабатывает” каждый заданный интервал времени
    • Режим таймаута: таймер “срабатывает” один раз по истечении времени (до следующего перезапуска)
  • Служебные функции:
    • Старт
    • Стоп
    • Сброс
    • Продолжить

Поддерживаемые платформы: все Arduino (используются стандартные Wiring-функции)

УСТАНОВКА

  • Библиотеку можно найти и установить через менеджер библиотек по названию GyverTimer в:
    • Arduino IDE (Инструменты/Управлять библиотеками)
    • Arduino IDE v2 (вкладка “Library Manager”)
    • PlatformIO (PIO Home, вкладка “Libraries”)
  • Про ручную установку читай здесь

ДОКУМЕНТАЦИЯ

Конструктор

Класс GTimer позволяет работать как с миллисекундным, так и с микросекундным таймером. В общем виде пример выглядит так:

Где type это MS (мс, миллисекундный таймер) или US (мкс, микросекундный), period — период в мс или мкс соответственно.

Настройки по умолчанию

  • При создании таймера можно ничего не указывать : GTimer myTimer; , тогда таймер будет сконфигурирован как миллисекундный и не запустится
  • Если указать только тип таймера (MS/US) GTimer myTimer(MS); , таймер настроится на выбранный режим (мс/мкс) и не запустится
  • Если указать тип таймера и интервал GTimer myTimer(US, 5000); , таймер настроится на выбранный режим (мс/мкс) и запустится в режиме интервала

Режимы работы

Таймер может работать в режиме интервалов и в режиме таймаута:

  • Интервалы. Запуск — метод setInterval(время) с указанием времени. В режиме интервалов таймер срабатывает (метод isReady() возвращает true ) каждый раз при достижении указанного периода и автоматически перезапускается. Удобно для периодических действий
  • Таймаут. Запуск — метод setTimeout(время) с указанием времени. В режиме таймаута таймер срабатывает (метод isReady() возвращает true ) только один раз при достижении указанного периода и автоматически отключается. Для повторного запуска нужно вызвать .setTimeout() с указанием периода, или просто .start() — запустит таймер на новый круг с прежним периодом

Важный момент: сравнение времени происходит в методе isReady() , без его вызова таймер ничего не считает! Нужно вызывать isReady() всегда, когда требуется счёт времени.

Управление таймером

Для управления состоянием таймера есть следующие методы:

  • start() — запускает (перезапускает) таймер с последним установленным временем
  • stop() — останавливает таймер
  • resume() — продолжает отсчёт таймера с момента остановки
  • reset() — сбрасывает таймер (отсчёт периода/таймаута начинается заново)
  • isEnabled() — возвращает true , если таймер работает (если он не stop() или не вышел таймаут)

Источник

Adblock
detector