class Counter – darbe sayacı

Counter sınıfı, tek girişli bir darbe sayacı olarak yapılandırılmış i.MX RT QENC (kuadratür enkoder / sayaç) donanım bloğunu sarmalar. Kaynak pin üzerindeki her yükselen kenar, bir donanım konum sayacını artırır (veya azaltır); ROLL_OVER / ROLL_UNDER / RESET / INDEX / MATCH olaylarına yazılım geri çağırmaları (callback) eklenebilir.

Yalnızca OpenMV Cam RT1062 (mimxrt portu) üzerinde mevcuttur. STM32 tabanlı OpenMV kameralarında, bunun yerine giriş yakalama için yapılandırılmış pyb.Timer kullanın. OpenMV Cam AE3 (alif portu) üzerinde sunulmaz.

Örnek kullanım:

from machine import Pin, Counter

counter = Counter(0, Pin("P0", Pin.IN))
counter.value(0)
# ... wait some time ...
print("pulses:", counter.value())

Yapıcılar

class machine.Counter(id: int, src: Pin | None = None, *, direction: int | Pin = UP, filter_ns: int = 0, max: int | None = None, min: int = 0, reset: Pin | None = None, match: int | None = None, match_pin: Pin | None = None)

id ile tanımlanan QENC sayaç bloğunu oluşturur (veya bu blok için tekil örneği getirir). RT1062 birden fazla QENC bloğuna sahiptir (id bunlardan birini seçer); aynı argümanlar, mevcut bir örneği yeniden yapılandırmak için init() tarafından da kabul edilir.

src – yükselen kenarları sayılan giriş pini.

direction (yalnızca anahtar sözcük) – sabit bir yön ayarlamak için ya UP / DOWN ya da çalışma zamanında yönü mantık seviyesi ile seçen bir Pin (düşük = yukarı say, yüksek = aşağı say).

filter_ns (yalnızca anahtar sözcük) – bir darbenin sayılması için gereken nanosaniye cinsinden minimum giriş kararlılık süresi. Sürücü, bu değere eşit veya bundan küçük olan en uzun donanım filtresini kullanır. 0 (varsayılan) filtrelemeyi devre dışı bırakır.

max / min (yalnızca anahtar sözcük) – konum sayacının modulo aralığı. Sayaç max değerini geçtiğinde min değerine sarmalanır ve cycles sayacı artar (aşağı sayarken azalır). Hem max hem de min değerlerini 0 olarak geçmek aralığı devre dışı bırakır.

reset (yalnızca anahtar sözcük) – yükselen kenarı konum sayacını başlangıç değerine yeniden yükleyen bir Pin (cycles sayacını değiştirmeden).

match (yalnızca anahtar sözcük) – bir IRQ_MATCH kesmesinin tetiklendiği sayaç değeri. Devre dışı bırakmak için None geçin.

match_pin (yalnızca anahtar sözcük) – konum sayacı match değerine eşit olduğunda yüksek, aksi halde düşük sürülen bir Pin.

Metotlar

init(src: Pin | None = None, *, direction: int | Pin = UP, filter_ns: int = 0, max: int | None = None, min: int = 0, reset: Pin | None = None, match: int | None = None, match_pin: Pin | None = None) None

Sayacı verilen parametrelerle yeniden başlatır ve konum ile cycles sayaçlarını sıfırlar. Yapıcı ile aynı anahtar sözcük argümanlarını kabul eder.

deinit() None

Sayacı durdurur, bekleyen tüm kesmeleri devre dışı bırakır ve QENC donanım kaynaklarını serbest bırakır. Bir yazılımsal sıfırlama, tüm Counter örneklerini otomatik olarak serbest bırakır.

value() int
value(value: int, /) int

İşaretli konum sayacını alır veya ayarlar.

Argüman verilmediğinde, geçerli sayımı döndürür.

Tek bir value argümanı ile, konum sayacını atomik olarak value değerine ayarlar ve önceki sayımı döndürür. Yaygın deyim counter.value(0), bir ölçüm penceresinin başında sayacı sıfırlar.

cycles() int
cycles(value: int, /) int

Konum sayacının max / min değerlerini kaç kez geçtiğini izleyen, işaretli 16 bitlik bir tamsayı olan cycles sayacını alır veya ayarlar.

Argüman verilmediğinde, geçerli cycles sayımını döndürür.

Tek bir value argümanı ile, cycles sayacını (konum sayacına dokunmadan) value değerine ayarlar ve önceki sayımı döndürür.

irq(handler: Callable[[Counter], None] | None = None, trigger: int = 0, hard: bool = False) None

Desteklenen QENC olaylarından biri tetiklendiğinde çağrılacak bir geri çağırma (callback) kaydeder. İşleyici, tek argümanı olarak Counter nesnesini alır; belirli olay, işleyici içinde irq.flags() aracılığıyla tanımlanabilir.

trigger, bir veya daha fazla IRQ_* sabitinden oluşan bir bit maskesidir:

  • IRQ_RESETreset pini etkinleştirildi.

  • IRQ_INDEXindex hattında bir geçiş.

  • IRQ_MATCH – konum sayacı match değerine ulaştı. Match, tetiklendikten sonra otomatik olarak devre dışı bırakılır ve IRQ yeniden kurularak yeniden etkinleştirilmelidir.

  • IRQ_ROLL_OVER – konum sayacı max değerinden min değerine sarmalandı.

  • IRQ_ROLL_UNDER – konum sayacı min değerinden max değerine sarmalandı.

hard=True, bir donanım kesme işleyicisi kaydeder (daha düşük gecikme, ancak işleyici bellek ayırmamalıdır). Varsayılan, zamanlanmış bir geri çağırmadır. Kesmeyi devre dışı bırakmak için handler=None geçin.

Sabitler

UP: int

Yükselen kenarları pozitif olarak saymak için direction argümanına geçin.

DOWN: int

Yükselen kenarları negatif olarak saymak için direction argümanına geçin.

IRQ_RESET: int

reset pin olayı için irq() tetikleme bayrağı.

IRQ_INDEX: int

İndeks giriş olayı için irq() tetikleme bayrağı.

IRQ_MATCH: int

Konum eşleşmesi olayı için irq() tetikleme bayrağı.

IRQ_ROLL_OVER: int

Bir sayaç roll-over olayı (max -> min) için irq() tetikleme bayrağı.

IRQ_ROLL_UNDER: int

Bir sayaç roll-under olayı (min -> max) için irq() tetikleme bayrağı.