Saya menggunakan Atmel ATtiny13 yang memiliki 6-pin I / O. Saya ingin mengontrol sekitar 15 LED tetapi tidak yakin bagaimana menghubungkan semuanya. Tanpa multiplexing dalam bentuk apa pun, tampaknya saya hanya dapat mengontrol 6 LED dalam satu waktu. Apakah saya terbatas hanya 6 LED karena ukuran mikrokontroler?
microcontroller
led
multiplexer
JYelton
sumber
sumber
Jawaban:
Ada beberapa metode yang dapat digunakan untuk menggerakkan sejumlah besar LED dari beberapa pin IO.
Yang paling sederhana adalah multiplexing tampilan baris / kolom standar. Dengan teknik ini, Anda dapat mengendarai LED dengan n pin IO. Secara matematis, siklus kerjanya adalah:(n/2)2 n
Ini berarti bahwa teknik ini memiliki siklus tugas 100% ketika semua LED menyala (atau semua baris atau semua kolom identik) dan siklus tugas ketika garis diagonal perlu dinyalakan (atau semua baris berbeda ). Anda hanya dijamin 100% siklus kerja saat menyalakan setiap LED atau satu LED (atau nol LED, tapi itu tidak terlalu berarti).1/n
Sedikit lebih kompleks adalah Charlieplexing . Dengan teknik ini, Anda dapat mengarahkan LED dengan n IO pin. Hanya n - 1 LED yang dapat menyala bersamaan dengan teknik ini. Secara matematis, siklus kerjanya adalah:n2−n n n−1
di mana satu set simultan adalah sekelompok unik LED yang memiliki anoda umum atau katoda umum. (Ini belum terbukti, hanya saja saya tiba setelah merenungkan masalah sebentar. Jika siklus tugas penting bagi Anda, Anda akan ingin melihat lebih jauh ini.) Ini adalah perhitungan yang jauh lebih kompleks baik secara intelektual dan secara komputasi dari perhitungan yang setara untuk multiplexing standar. Secara efektif, Anda mendapatkan siklus kerja ketika semua LED menyala tetapi beberapa (hanya beberapa) pola n-1 atau lebih sedikit LED dapat memiliki siklus kerja 100%. Anda hanya dijamin 100% siklus kerja saat menyalakan 1 LED.1/n
Metode terakhir yang akan saya sebutkan adalah menggunakan shift register atau IO expander. Dengan dua pin (Baik antarmuka data mentah / jam, I2C, atau SPI searah), Anda dapat mengontrol sejumlah besar LED yang sewenang-wenang. Siklus tugas untuk pola apa pun adalah 100%, tetapi tingkat pembaruan berbanding terbalik dengan jumlah LED. Ini adalah metode yang paling mahal. Untuk 15 LED, mungkin akan lebih murah untuk hanya memutakhirkan ke mikro dengan banyak pin IO.
sumber
Contoh:
Six LED ada di 3 Pin:
sumber
Tanpa multiplexing (drive langsung) Anda dibatasi hingga 6 LED.
Dengan charlieplexing Anda dapat mengarahkan n * (n-1) LED dari n pin.
Dengan I / O ekspander atau register geser, Anda dapat mengendarai LED yang jumlahnya hampir tak terbatas.
Contoh: MCP23008 8-bit I2C I / O Expander
sumber
Seperti @ mjh2007 menyarankan dengan expander I2C. Tetapi ada beberapa yang secara khusus untuk menggerakkan LED yang akan menghindari perlunya resistor pembatas arus eksternal.
sumber
Ini adalah contoh dari charlieplexing yang saya buat.
Ini adalah simulator sinar mercusuar dan menggunakan serangkaian 12 LED yang dipadukan ke 4 GPIO untuk menyapu seberkas cahaya di sekitar disk. Ada video di sini .
Proyek ini berbasis PIC, saya menggunakan PIC12f683 yang juga merupakan 8pin uP dan dapat dianggap sebanding dengan AVR 8pin.
Intensitas LED didorong oleh interupsi yang menyediakan PWM 32 langkah pada sekitar 60Hz. Hanya dua LED yang diizinkan menyala setiap saat, memberikan tugas 50% untuk setiap LED karena hanya itulah yang saya butuhkan. Ini juga memberikan trade off dari refresh rate PWM terhadap resolusi.
Pengkodean untuk menggunakan charlieplexing sebenarnya cukup sederhana jika Anda tetap menggunakan metode "klasik" dengan hanya menyalakan satu LED pada satu titik waktu dengan kecepatan refresh yang sangat cepat. Saya mengerjakan PORT dan TRIS yang diperlukan (register khusus gambar) terlebih dahulu di atas kertas kemudian menyimpan hasilnya dalam array statis. Untuk menyalakan LED x PIC hanya perlu mencari nilai pada indeks array [x] dan menuliskannya langsung ke PORT (dengan sedikit masking untuk mempertahankan status pin lain yang tidak digunakan dalam charliplex)
Proyek saya hanya memiliki 12 LED bukan 15 atau maksimum 20 GPIO 5 akan memungkinkan karena saya ingin menyimpan satu cadangan GPIO untuk pengembangan di masa depan.
Pokoknya ... Saya hanya berpikir mungkin ada gunanya memiliki contoh kerja yang mirip dengan permintaan Anda.
Kode sumber lengkap dan skema tersedia di blog saya.
sumber
Pilihan lain adalah menggunakan LED Neopixel. Mereka memiliki IC kontrol bawaan dan Anda hanya perlu satu pin untuk mengontrol LED sebanyak yang Anda suka. Tentu saja Anda akan membutuhkan sumber daya LED terpisah yang memadai.
sumber