Zephyrnet Logosu

RP2040 MicroPython'da Doğru Döngü Sayımı

Tarih:

RP2040, iyi tanımlanmış bir veri sayfasına ve harika bir fiyat etiketine sahip muhteşem bir küçük çiptir. Hatta iki SDK bile sunuluyor: biri C'yi, diğeri MicroPython'u temel alıyor. Daha deneyimli MCU uzmanları muhtemelen C varyantına yönelecektir, ancak Python, hızlı bir proje veya kavram kanıtı hazırlarken belirli bir hız sağlar. Belki de bu yüzden [Jeremy Bentham] MicroPython'a RP2040 tabanlı araç hız göstergesi.

Bunu zorlaştıran iki şey, MicroPython'un oldukça genel olmaya çalışmasıdır; bu, düşük seviyeli donanımla konuşmak için biraz bilgisayar korsanlığına ihtiyaç duyulduğu ve MicroPython'un doğru döngü sayımı konusunda bir üne sahip olmadığı anlamına gelir. Bu durumda düşük seviyeli donanım PWM çevre birimidir. Temel mekanizmayı ayrıntılarıyla anlatıyor C versiyonunda daha fazla ayrıntı. RP2040'ta PWM modülü bir girişteki darbe kenarlarını sayabilir. Ancak yakalanan süreyi hesaplamak için oyunu doğru şekilde başlatıp durdurmanız gerekir. Buradan itibaren sadece kenarların zamana bölünmesi kalıyor. Bunun için DMA sistemi devreye alınır. PWM sayacı devredildiğinde bir DMA isteği tetiklenebilir. Diğer PWM kanalı bir zamanlayıcı görevi görür ve zamanlayıcının süresi dolduğunda DMA isteği sayacı kapatır. Bu, hızlı sinyaller için harika çalışır ancak yavaş sinyaller (1kHz'in altında) için hatalıdır. Böylece, bir periyottaki kenarların sayısını saymak yerine kenarlar arasındaki zamanın yakalandığı karşılıklı veya zaman aralığı sistemi dahil edilir.

Burada ilginç olan, donanım ayrıntılarının pico_devices.py'ye nasıl düzgün bir şekilde sarıldığıdır. MicroPython'un uctypes modülü DMA ve PWM gibi MMIO cihazlarına erişim sağlar. kod GitHub'da mevcut. Elbette, [Jeremy] daha önce yaptığı gibi RP2040'ı hacklemeye yabancı değil Pico W için kendi WiFi sürücüsünü kullandı.

spot_img

En Son İstihbarat

spot_img