MicroPython:Библиотеки/pyb/Класс Timer: различия между версиями

Материал из Онлайн справочника
Перейти к навигацииПерейти к поиску
(Новая страница: «{{MicroPython/Панель перехода}} {{Перевод от Сubewriter}} {{Myagkij-редактор}} =<ref>[]</ref>= <syntaxhighlight lang="python"...»)
 
Нет описания правки
 
(не показаны 4 промежуточные версии 1 участника)
Строка 3: Строка 3:
{{Myagkij-редактор}}
{{Myagkij-редактор}}


=<ref>[]</ref>=
=Класс Timer – управление внутренними таймерами<ref>[http://docs.micropython.org/en/latest/library/pyb.Timer.html docs.micropython.org - class Timer – control internal timers]</ref>=


Таймеры используются для самых разных задач, но в данный момент для них реализован только один простой сценарий: периодический вызов функции.


Каждый таймер состоит из счетчика, ведущего отсчет при помощи заданной частоты. Частота отсчитывания – это тактовая частота таймера (в Гц), поделенная на значение в делителе частоты. Когда значение в счетчике достигает заданного порога (периода), это запускает событие, после чего счетчик сбрасывается до нуля. При помощи метода callback() можно задать Python-функцию, которая будет запускаться при срабатывании таймера.


<syntaxhighlight lang="python" enclose="div">
Пример использования класса Timer для переключения светодиода с фиксированной частотой:
 
<syntaxhighlight lang="python">
tim = pyb.Timer(4)        # создаем объект Timer при помощи таймера 4
tim.init(freq=2)          # переключаем светодиод с частотой 2 Гц
tim.callback(lambda t:pyb.LED(1).toggle())
</syntaxhighlight>
 
Пример использования именованной функции в методе callback():
 
<syntaxhighlight lang="python">
def tick(timer):          # создаем функцию tick()
    print(timer.counter()) # показываем текущее значение
                          # счетчика таймера
tim = pyb.Timer(4, freq=1) # создаем объект «tim»
                          # при помощи таймера 4;
                          # он будет срабатывать с частотой 1 Гц
tim.callback(tick)        # задаем нашу функцию tick()
                          # как функцию обратного вызова
</syntaxhighlight>
 
Другие примеры:
 
<syntaxhighlight lang="python">
tim = pyb.Timer(4, freq=100)    # частота в герцах
tim = pyb.Timer(4, prescaler=0, period=99)
tim.counter()                  # читаем значение счетчика
                                # (с помощью этого метода
                                # его также можно задать)
tim.prescaler(2)                # задаем делитель частоты
                                # (с помощью этого метода
                                # его также можно прочесть)
tim.period(199)                # задаем период
                                # (с помощью этого метода
                                # его также можно прочесть)
tim.callback(lambda t: ...)    # задаем функцию обратного вызова
                                # для обновления прерываний
                                # («t» - это экземпляр «tim»)
tim.callback(None)              # очищаем функцию обратного вызова
</syntaxhighlight>
 
{{Примечание1
|1=Таймеры ''2'' и ''3'' используются, чтобы при помощи [[ШИМ]] задавать яркость [[светодиод]]ов ''3'' и ''4'' соответственно. Но эти таймеры будут использоваться для [[ШИМ]], только если яркость соответствующего [[светодиод]]а задается в диапазоне ''между «1» и «254»''. Если функция яркости [[светодиод]]ов не используется, то эти таймеры можно использовать для любых других целей. Аналогичным образом таймер ''5'' используется для управления [[сервопривод]]ом, а таймер ''6'' – для синхронизированных чтения/записи [[АЦП]]/[[ЦАП]]. Поэтому рекомендуем использовать в своих программах другие таймеры.}}
{{Примечание1
|1=Во время работы функции обратного вызова (прерывания) память выделять нельзя, и в результате исключения, вызываемые внутри функций обратного вызова, будут малоинформативны. О том, как обойти это ограничение, читайте в описании функции [http://docs.micropython.org/en/latest/library/micropython.html#micropython.alloc_emergency_exception_buf micropython.alloc_emergency_exception_buf()].}}
 
== Конструкторы ==
 
* [[MicroPython:Библиотеки/pyb/Класс Timer/pyb.Timer()|pyb.Timer(id, ...)]]
 
== Методы ==
 
* [[MicroPython:Библиотеки/pyb/Класс Timer/Timer.init()|Timer.init(*, freq, prescaler, period, mode=Timer.UP, div=1, callback=None, deadtime=0)]]
* [[MicroPython:Библиотеки/pyb/Класс Timer/Timer.deinit()|Timer.deinit()]]
* [[MicroPython:Библиотеки/pyb/Класс Timer/Timer.callback()|Timer.callback(fun)]]
* [[MicroPython:Библиотеки/pyb/Класс Timer/Timer.channel()|Timer.channel(channel, mode, ...)]]
* [[MicroPython:Библиотеки/pyb/Класс Timer/Timer.counter()|Timer.counter([value])]]
* [[MicroPython:Библиотеки/pyb/Класс Timer/Timer.freq()|Timer.freq([value])]]
* [[MicroPython:Библиотеки/pyb/Класс Timer/Timer.period()|Timer.period([value])]]
* [[MicroPython:Библиотеки/pyb/Класс Timer/Timer.prescaler()|Timer.prescaler([value])]]
* [[MicroPython:Библиотеки/pyb/Класс Timer/Timer.source_freq()|Timer.source_freq()]]
 
== Класс TimerChannel – настройка канала для таймера ==
 
Таймерные каналы используются для генерирования/захвата сигнала при помощи таймера.
 
Объекты TimerChannel создаются при помощи метода Timer.channel().
 
=== Методы ===
 
* [[MicroPython:Библиотеки/pyb/Класс Timer/Класс TimerChannel/timerchannel.callback()|timerchannel.callback(fun)]]
* [[MicroPython:Библиотеки/pyb/Класс Timer/Класс TimerChannel/timerchannel.capture()|timerchannel.capture([value])]]
* [[MicroPython:Библиотеки/pyb/Класс Timer/Класс TimerChannel/timerchannel.compare()|timerchannel.compare([value])]]
* [[MicroPython:Библиотеки/pyb/Класс Timer/Класс TimerChannel/timerchannel.pulse_width()|timerchannel.pulse_width([value])]]
* [[MicroPython:Библиотеки/pyb/Класс Timer/Класс TimerChannel/timerchannel.pulse_width_percent()|timerchannel.pulse_width_percent([value])]]


=См.также=
=См.также=

Текущая версия от 19:54, 23 мая 2023

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


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

Таймеры используются для самых разных задач, но в данный момент для них реализован только один простой сценарий: периодический вызов функции.

Каждый таймер состоит из счетчика, ведущего отсчет при помощи заданной частоты. Частота отсчитывания – это тактовая частота таймера (в Гц), поделенная на значение в делителе частоты. Когда значение в счетчике достигает заданного порога (периода), это запускает событие, после чего счетчик сбрасывается до нуля. При помощи метода callback() можно задать Python-функцию, которая будет запускаться при срабатывании таймера.

Пример использования класса Timer для переключения светодиода с фиксированной частотой:

tim = pyb.Timer(4)        # создаем объект Timer при помощи таймера 4 
tim.init(freq=2)          # переключаем светодиод с частотой 2 Гц
tim.callback(lambda t:pyb.LED(1).toggle())

Пример использования именованной функции в методе callback():

def tick(timer):           # создаем функцию tick()
    print(timer.counter()) # показываем текущее значение
                           # счетчика таймера
tim = pyb.Timer(4, freq=1) # создаем объект «tim»
                           # при помощи таймера 4;
                           # он будет срабатывать с частотой 1 Гц
tim.callback(tick)         # задаем нашу функцию tick()
                           # как функцию обратного вызова

Другие примеры:

tim = pyb.Timer(4, freq=100)    # частота в герцах
tim = pyb.Timer(4, prescaler=0, period=99)
tim.counter()                   # читаем значение счетчика
                                # (с помощью этого метода
                                # его также можно задать)
tim.prescaler(2)                # задаем делитель частоты
                                # (с помощью этого метода
                                # его также можно прочесть)
tim.period(199)                 # задаем период
                                # (с помощью этого метода
                                # его также можно прочесть)
tim.callback(lambda t: ...)     # задаем функцию обратного вызова
                                # для обновления прерываний
                                # («t» - это экземпляр «tim»)
tim.callback(None)              # очищаем функцию обратного вызова
Примечание

Таймеры 2 и 3 используются, чтобы при помощи ШИМ задавать яркость светодиодов 3 и 4 соответственно. Но эти таймеры будут использоваться для ШИМ, только если яркость соответствующего светодиода задается в диапазоне между «1» и «254». Если функция яркости светодиодов не используется, то эти таймеры можно использовать для любых других целей. Аналогичным образом таймер 5 используется для управления сервоприводом, а таймер 6 – для синхронизированных чтения/записи АЦП/ЦАП. Поэтому рекомендуем использовать в своих программах другие таймеры.

Примечание

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

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

Методы

Класс TimerChannel – настройка канала для таймера

Таймерные каналы используются для генерирования/захвата сигнала при помощи таймера.

Объекты TimerChannel создаются при помощи метода Timer.channel().

Методы

См.также

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