MicroPython:Библиотеки/pyb/Класс Timer: различия между версиями
Myagkij (обсуждение | вклад) (Новая страница: «{{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" | Пример использования класса 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) # очищаем функцию обратного вызова
Конструкторы
Методы
- Timer.init(*, freq, prescaler, period, mode=Timer.UP, div=1, callback=None, deadtime=0)
- Timer.deinit()
- Timer.callback(fun)
- Timer.channel(channel, mode, ...)
- Timer.counter([value])
- Timer.freq([value])
- Timer.period([value])
- Timer.prescaler([value])
- Timer.source_freq()
Класс TimerChannel – настройка канала для таймера
Таймерные каналы используются для генерирования/захвата сигнала при помощи таймера.
Объекты TimerChannel создаются при помощи метода Timer.channel().
Методы
- timerchannel.callback(fun)
- timerchannel.capture([value])
- timerchannel.compare([value])
- timerchannel.pulse_width([value])
- timerchannel.pulse_width_percent([value])