LED yang lebih baik melalui DMA
LED yang lebih baik melalui DMA

LED yang lebih baik melalui DMA

sementara pembaca hackaday biasa sudah tahu cara mengedipkan LED dengan mikrokontroler dan telah pindah ke proyek yang sedikit lebih menantang seperti memecahkan persamaan Navier-Stokes pada Majelis 6502, itu tidak berarti tidak ada ruang untuk pemula. [Rik] telah menerbitkan tutorial yang hebat tentang penyalahgunaan DMA untuk hal-hal cemara blimer. Mengapa ada orang yang mau belajar tentang teknik DMA? Untuk hal-hal cerah Blimer, tentu saja.

Tutorial ini mengasumsikan pengetahuan tentang multiplexing LED dan matriks LED, atau pada dasarnya sekelompok LED yang terhubung bersama pada XY Grid. Cara naif untuk menggerakkan 8 × 8 grid LED melampirkan delapan katoda ke pin GPIO pada mikrokontroler, melampirkan delapan anoda ke serangkaian pin GPIO, dan arus tenggelam sesuai kebutuhan. Hitungan pin dapat dikurangi dengan register shift, dan peredupan LED dapat diimplementasikan dengan PWM. Ini menyimpulkan kursus Arduino delapan minggu intensif kami.

Berkat mikrokontroler yang tidak terjebak pada 1980-an, teknik baru dapat digunakan untuk mendorong matriks LED ini. Sebagian besar mikrokontroler lengan yang lebih kuat dilengkapi dengan DMA, periferal untuk akses memori langsung. Alih-alih memiliki CPU melakukan semua pekerjaan, pengontrol DMA dapat hanya mengocok bit antara memori dan pin. Ini berarti proyek Blinker dan LED Glowier.

[Rik] Metode untuk DMAING LED termasuk menyiapkan array besar dalam kode, dengan benar menginisialisasi periferal DMA, dan memasang matriks LED ke beberapa pin. Teknik ini dapat diperluas ke animasi dengan 64 tingkat kecerahan, sesuatu yang akan memakan jumlah yang luar biasa dari daya pemrosesan (setidaknya untuk mikrokontroler) jika bukan karena pengontrol DMA.

Pengaturan yang digunakan dalam eksperimen ini adalah papan nukleo STM32F103 bersama dengan IDE OpenStM22. [Rik] telah merilis semua kode di GitHub, dan Anda tentu saja didorong untuk bermain-main.

Leave a Reply

Your email address will not be published. Required fields are marked *