これは MicroPython バージョン v1.27.0 のドキュメンテーションです。 このページの最新開発版 の方が、より新しい内容になっています。

クラス Counter -- パルスカウンター

Counter は入力信号を監視し、立ち上がりまたは立ち下がりエッジをカウントすることでパルスカウントを実現します。

最小限の使用例:

from machine import Pin, Counter

counter = Counter(0, Pin(0, Pin.IN))  # ピン0の Counter を作成し、カウントを開始
value = counter.value()               # 現在のパルスカウント値を取得

対応ポート: ESP32

コンストラクタ

class machine.Counter(id, ...)

指定した id に対応する Counter オブジェクト(シングルトン)を返します。 id の値は利用するポートやハードウェアによって異なります。一般にはは 0, 1 などの値が使われ、該当するハードウェアブロック #0, #1 などを示します。

追加の引数は、後述する init() メソッドに渡され、Counter インスタンスは再初期化されてリセットされます。

ESP32 では、この idPCNT ユニット に対応します。

メソッド

Counter.init(src, *, ...)

指定したパラメータで Counter を初期化し、リセットします。

  • src には入力ピンを machine.Pin オブジェクトとして指定します。特定のハードウェアブロックに固定されたピンがあるポートでは省略できます。

ポートでサポートされている可能性がある追加のキーワード指定のみのパラメータは次のとおりです:

  • edge にはカウントするエッジを指定します。 Counter.RISING (デフォルト)と Counter.FALLING のいずれかを指定します。 (ESP32 でサポート)

  • direction にはカウント方向を指定します。 Counter.UP (デフォルト)と Counter.DOWN のいずれかを指定します。 (ESP32 でサポート)

  • filter_ns には、パルスをカウントするために入力信号が安定していなければならない最小時間をナノ秒単位で指定します。実装では、この値以下でハードウェアがサポートする最長のフィルター時間を使います。デフォルトは 0 (フィルターなし)。 (ESP32 でサポート)

Counter.deinit()

Counter を停止し、割り込みを無効化してハードウェアリソースを解放します。ソフトリセットを行うと、すべての Counter オブジェクトを初期化解除します。

Counter.value([value])

カウンター値を符号付き整数として取得し、必要に応じて設定します。実装では、取得と設定をアトミックに(つまりカウントを取りこぼさずに)行うことが求められます。

このカウンター値は 小整数 の範囲を超える可能性があり、その場合 Counter.value() の呼出しによってヒープ領域の確保が発生することがあります。ただし、実装では内部状態に小整数のみを使うようにし、ユーザーが Counter.value() を呼び出すまではメモリ確保が発生しないようにするべきです。

たとえば ESP32 では、内部状態としてハードウェアカウンターのオーバーフロー回数(32000 カウントごと)を記録しているため、 2**30 * 32000 カウント(1MHz で約1年強)に達するまでは小整数の範囲を超えません。

一般的には Counter.value(0) を使ってカウンターをリセットし(つまり前回呼び出し以降のカウント数を測定)、この問題を回避することを推奨します。

定数

Counter.RISING
Counter.FALLING

パルスエッジの選択に使用。

Counter.UP
Counter.DOWN

カウント方向の選択に使用。