MicroPython:Библиотеки/machine.TimerWiPy

Материал из Онлайн справочника
Версия от 14:28, 20 октября 2020; Myagkij (обсуждение | вклад) (Новая страница: «{{MicroPython/Панель перехода}} {{Перевод от Сubewriter}} {{Myagkij-редактор}} =Класс TimerWiPy – управление а...»)
(разн.) ← Предыдущая версия | Текущая версия (разн.) | Следующая версия → (разн.)
Перейти к навигацииПерейти к поиску

Перевод: Максим Кузьмин
Проверка/Оформление/Редактирование: Мякишев Е.А.


Класс TimerWiPy – управление аппаратными таймерами[1]

Примечание: Этот класс – это нестандартная реализация класса Timer для WiPy. На WiPy он именуется machine.Timer, но в документации ниже он именуется machine.TimerWiPy, чтобы отличить его от более общего класса machine.Timer.


Аппаратные таймеры нужны для работы с периодами и событиями. Таймеры – это, возможно, самый универсальный и неоднородный тип оборудования в микроконтроллерах и SoC-системах. Таймеры, установленные в разные модели, могут очень сильно отличаться друг от друга. В MicroPython’овском классе Timer определена базовая операция периодического запуска функции обратного вызова через заданное время (или один раз после задержки). Но в то же время этот класс позволяет задавать более нестандартное поведение для отдельных плат (не портируемое на другие платы).

О важных ограничениях использования функций обратного вызова в классе Timer читайте тут.

Примечание: Внутри прерываний память выделять нельзя, и поэтому исключения, возбуждаемые внутри обработчиков (функций обратного вызова), будут малоинформативны. О том, как обойти это ограничение, читайте в описании метода micropython.alloc_emergency_exception_buf().


Конструкторы

• machine.TimerWiPy(id, ...) – конструирует новый объект Timer с заданным id. Если задать в id значение «-1», это сконструирует виртуальный таймер (если это поддерживается платой).

Методы

• TimerWiPy.init(mode, *, width=16) – инициализирует таймер.

Пример: tim.init(Timer.PERIODIC) # периодический

                                  # 16-битный таймер

tim.init(Timer.ONE_SHOT, width=32) # одноразовый

                                  # 32-битный таймер

Именованные аргументы: o В аргументе mode могут быть следующие значения:  TimerWiPy.ONE_SHOT – таймер сработает только один раз, когда истечет заданный период.  TimerWiPy.PERIODIC – таймер будет срабатывать с заданной периодичностью.  TimerWiPy.PWM – выводит ШИМ-сигнал на контакт. o width – здесь может быть 16 или 32 (бита). Для очень низких частот (меньше 5 Гц) или при использовании больших периодов нужно использовать 32-битный таймер. Режим 32 бит доступен только для режимов ONE_SHOT и PERIODIC. • TimerWiPy.deinit() – деинициализирует таймер. Останавливает таймер и отключает таймерный компонент. • TimerWiPy.channel(channel, **, freq, period, polarity=TimerWiPy.POSITIVE, duty_cycle=0) – если в этом методе задан аргумент channel (идентификатор канала), то он вернет ранее инициализированный объект TimerChannel (или None, если ранее никакого объекта TimerChannel инициализировано не было). В противном случае будет инициализирован и возвращен новый объект TimerChannel. Режимом работы будет тот, что был настроен в объекте Timer, который использовался для создания канала. o channel – если разрядность данных таймера составляет 16 бит, здесь должно быть TIMER.A или TIMER.B, а если 32 бита, то здесь должно быть TIMER.A | TIMER.B. Именованные аргументы: o freq – задает частоту (в герцах). o period – задает период (в микросекундах). Примечание: Нужно задавать либо freq, либо period, но никогда не оба аргумента одновременно. o polarity – этот аргумент нужен для ШИМ, и в нем задается полярность ШИМ-сигнала. o duty_cycle – это коэффициент заполнения ШИМ (этот аргумент нужен только для ШИМ). Это процентное значение (0.00-100.00). Поскольку WiPy не поддерживает числа с плавающей точкой, значение здесь должно быть задано в диапазоне 0-10000, где «10000» – означает 100.00%, 5050 – 50.50% и т.д. Примечание: Когда канал работает в ШИМ-режиме, соответствующий контакт присваивается автоматически, что избавляет от необходимости присваивать контакту альтернативную функцию при помощи класса Pin. ШИМ поддерживают следующими контактами: o GP24 – таймер 0, канал A. o GP25 – таймер 1, канал A. o GP9 – таймер 2, канал B. o GP10 – таймер 3, канал A. o GP11 – таймер 3, канал B.


См.также

Внешние ссылки