このドキュメンテーションは、MicroPython の最新開発ブランチのためのものです。 リリースバージョンでは利用できない機能に言及することがあります。

特定のリリースのドキュメントをお探しの場合は、左側のドロップダウンメニューを使って、 望みのバージョンを選択します。

クラス TimerWiPy -- ハードウェアタイマーの制御

注釈

このクラスは WiPy 用に実装した非標準の Timer です。WiPy 上では単に machine.Timer として利用できますが、より一般的な machine.Timer クラスと区別するために、以下のドキュメントでは machine.TimerWiPy と表記しています。

ハードウェアタイマーは周期処理や時間イベントを扱います。タイマーは、おそらく MCU や SoC により最も柔軟で様々な種類のあるハードウェアであり、モデルごとに大きな違いがあります。MicroPython の Timer クラスは、指定した周期で(または少し経過後に1回だけ)コールバックを実行するベースライン操作を定義します。ボードによっては標準的でない動作を定義できます(したがって他のボードへの移植性はありません)。

コンストラクタ

class machine.TimerWiPy(id, ...)

指定の id で新しいタイマーオブジェクトを構築します。id に -1 を指定すると、(ボードがサポートしていれば)仮想タイマーを構築します。

メソッド

TimerWiPy.init(mode, *, width=16)

タイマーを初期化します。たとえば次のように使います:

tim.init(Timer.PERIODIC)             # 周期モードの 16 ビットタイマー
tim.init(Timer.ONE_SHOT, width=32)   # ワンショットの 32 ビットタイマー

キーワード引数:

  • mode は次のいずれかになります。

    • TimerWiPy.ONE_SHOT - タイマーは、設定したチャネルの周期が経過するまで1回だけ実行します。

    • TimerWiPy.PERIODIC - タイマーは、チャネルに設定した周波数で定期的に実行します。

    • TimerWiPy.PWM - ピンに PWM 信号を出力します。

  • width は 16 か 32 (ビット)でなければなりません。5Hz 未満の非常に低い周波数(または長い周期)には 32 ビットのタイマーを使うべきです。32 ビットモードは ONE_SHOT と PERIODIC のモードでのみ利用できます。

TimerWiPy.deinit()

タイマーを非初期化します。タイマーを停止し、タイマーのペリフェラルを無効にします。

TimerWiPy.channel(channel, **, freq, period, polarity=TimerWiPy.POSITIVE, duty_cycle=0)

チャネルの識別子のみを渡した場合、以前に初期化されたチャネルオブジェクトが返されます(以前のチャネルがなければ None が返されます)。

さもなければ、TimerChannel オブジェクトを初期化して返します。

動作モードは、そのチャネルを作成するのに使った Timer オブジェクトに設定されたものになります。

  • channel は、タイマーの幅が 16 ビットの場合は TIMER.A か TIMER.B でなければなりません。幅が 32 ビットの場合は TIMER.A | TIMER.B で なければなりません 。

キーワード専用の引数:

  • freq は周波数を Hz で設定します。

  • period は周期をマイクロ秒で設定します。

注釈

freq か period のどちらかを指定しなければならず、両方を指定することはできません。

  • polarity は PWM に適用され、デューティサイクルの極性を定義します

  • duty_cycle は PWM にのみ適用されます。これはパーセント (0.00〜100.00) です。WiPy は浮動小数点数をサポートしていないので、デューティサイクルは 0〜10000 の範囲で指定しなければなりません。10000 が 100.00 を、5050 が 50.50 を表します。

注釈

チャネルが PWM モードのとき、対応するピンは自動的に割り当てられるので、 Pin クラスでピンの代替機能を割り当てる必要はありません。PWM の機能をサポートするピンは次のとおりです:

  • タイマー 0 のチャネル A では GP24 。

  • タイマー 1 のチャネル A では GP25 。

  • タイマー 2 のチャネル B では GP9 。

  • タイマー 3 のチャネル A では GP10 。

  • タイマー 3 のチャネル B では GP11 。

クラス TimerChannel --- タイマーのチャネルを設定

タイマーチャネルは、タイマーを使用して信号を生成またはキャプチャするのに使います。

TimerChannel オブジェクトは、Timer.channel() メソッドをで作成します。

メソッド

timerchannel.irq(*, trigger, priority=1, handler=None)

このコールバックの動作は、タイマーチャネルの動作モードに大きく依存します:

  • モードが TimerWiPy.PERIODIC の場合、コールバックは設定した周波数または周期で定期的に実行されます。

  • モードが TimerWiPy.ONE_SHOT の場合、コールバックは設定したタイマーが満了したときに1回だけ実行されます。

  • モードが TimerWiPy.PWM の場合、コールバックはデューティサイクルの値に達したときに実行されます。

受け付けるパラメータは次のとおりです:

  • priority は割り込みの優先度です。1〜7 の範囲の値を取れます。値が大きいほど優先度が高くなります。

  • handler は、割り込みが発生したときに呼び出される省略可能な関数です。

  • trigger は、動作モードが TimerWiPy.PERIODIC または TimerWiPy.ONE_SHOT の場合は TimerWiPy.TIMEOUT でなければなりません。モードが TimerWiPy.PWM の場合、trigger は TimerWiPy.MATCH でなければなりません。

コールバックのハンドラはハード割り込みであり、実行時には 割り込みハンドラの作成 で説明されている制約が適用される点に注意してください。

コールバックオブジェクトを返します。

timerchannel.freq([value])

タイマーチャネルの周波数 (Hz) を取得または設定します。

timerchannel.period([value])

タイマーチャネルの周期(マイクロ秒)を取得または設定します。

timerchannel.duty_cycle([value])

PWM 信号のデューティサイクルを取得または設定します。これはパーセント (0.00〜100.00) です。WiPy は浮動小数点数をサポートしていないので、デューティサイクルは 0〜10000 の範囲で指定しなければなりません。10000 が 100.00 を、5050 が 50.50 を表します。

定数

TimerWiPy.ONE_SHOT
TimerWiPy.PERIODIC

タイマー操作モード。