Bagaimana cara mengontrol tiga LED dengan dua pin UC menggunakan komponen pasif saja?

8

Saya hanya memiliki 2 (3-negara) pin yang tersedia pada mikrokontroler dan perlu mengontrol 3 LED merah, UC beroperasi pada 5V. Saya hanya bisa menggunakan komponen pasif sebagai tambahan.

Cano64
sumber
Tentukan "kontrol". Apakah Anda perlu semua LED menyala penuh pada saat yang sama, atau hanya satu per satu, atau yang lainnya? Mengapa Anda mengatakan bahwa Anda hanya dapat menggunakan komponen pasif?
Joe Hass
Google "charlieplexing".
John U
1
@ JohnU: Charlieplexing tidak melakukan apa pun yang berguna dengan kurang dari tiga pin. Dua pin hanya memberi Anda dua LED.
Dave Tweed
Jelas, expander port I2C atau bahkan beberapa register shift sederhana akan memungkinkan Anda untuk mengontrol jumlah LED yang sewenang-wenang. Mengapa ini dikesampingkan?
Dave Tweed
1
@DaveTweed - Tindakan googling itu kemungkinan besar akan informatif;)
John U

Jawaban:

10

Untuk mengontrol empat LED:

skema

mensimulasikan rangkaian ini - Skema dibuat menggunakan CircuitLab

Untuk mendapatkan kedua LED pada pin tertentu menyala, ganti pin pada beberapa ratus Hz.

Perhatikan bahwa pengaturan ini mensyaratkan bahwa tegangan maju LED kurang dari Vcc / 2.

Perhatikan juga bahwa resistor menghabiskan daya sepanjang waktu, bukan hanya ketika LED menyala.

Dave Tweed
sumber
Memiliki R1 yang hanya terhubung ke D1 dan R2 hanya ke D2, dll. Akan sangat mengurangi penarikan arus diam ketika LED mati, asalkan penurunan tegangan LED bergabung ke VDD.
supercat
@ supercat: Ya, tapi itu jarang benar dari LED merah yang ditentukan OP. Lihat diagram Will .
Dave Tweed
Tambahkan LED tambahan antara node R1-D1 dan D2-D2 dan sembunyikan di suatu tempat.
supercat
@supercat: Lihat jawaban Spehro .
Dave Tweed
6

Solusi ini tergantung pada kenyataan bahwa 5V tidak akan menyalakan tiga LED secara seri. Jika perlu, Anda dapat menambahkan silikon dioda secara seri dengan satu atau lebih LED untuk meningkatkan penurunan tegangan maju total.

skema

mensimulasikan rangkaian ini - Skema dibuat menggunakan CircuitLab

  • Jika pin A dan pin B adalah tristate, semua LED mati.
  • Jika pin A digerakkan rendah, D1 aktif.
  • Jika pin A digerakkan tinggi dan pin B digerakkan rendah D2 aktif.
  • jika pin B didorong tinggi, D3 aktif.

Untuk memiliki lebih dari satu LED menyala pada suatu waktu, Anda harus multiplex: menyalakannya satu per satu, cukup cepat sehingga tampaknya menyala terus menerus.

Dave Tweed
sumber
Apakah ada keuntungan dari ini dibandingkan metode Michael Karas?
Will
Yang ini bekerja dengan drop tegangan maju lebih rendah pada LED. Solusinya hanyalah dua salinan versi satu-pin / dua-LED ini.
Dave Tweed
Ahh jadi dengan ini jika Anda memiliki 2 resistor pada Anda menjatuhkan beberapa tegangan melalui 1 dan beberapa di yang lain, dan harus membakar lebih sedikit di resistor?
Will
1
@ Akan: Mm, tidak. Dengan skema ini, hanya satu LED menyala pada satu waktu, dan hanya satu resistor pada satu waktu menjatuhkan tegangan. Ketika kedua pin tristate, tidak ada arus sama sekali, karena diblokir oleh penurunan maju kumulatif dari tiga LED secara seri.
Dave Tweed
Jika Anda menggunakan pin b, Anda dapat menggerakkan 2 LED dengan skema Anda, bukan?
Will
3

Dengan dua pin Anda benar-benar dapat mengontrol empat LED. Untuk mengontrol dua LED, letakkan resistor dari pin MCU untuk membatasi arus dan ikatkan pada dua LED - katoda satu LED dan anoda LED lainnya. Ujung anoda bebas dari LED pertama terhubung ke VCC papan MCU melalui resistor lain. Ujung katoda gratis dari LED kedua terhubung ke GND (melalui resistor lain). Sekarang LED akan menyala bergantian ketika pin MCU diatur tinggi atau rendah. Pasang pin MCU kedua dengan cara yang sama dan Anda sekarang memiliki kendali atas total empat LED.

Untuk memberikan tampilan kontrol independen dari masing-masing LED dalam pasangan dari salah satu pin port memerlukan sedikit kerja perangkat lunak sebagai berikut.

Jika LED1 adalah yang memiliki anoda ke pin port dan LED2 adalah yang dengan katoda ke port pin maka lakukan hal berikut untuk menetapkan empat status untuk dua LED.

LED2  LED1    Action
OFF   OFF     Set the port pin to tristate level.
OFF   ON      Set the port pin low.
ON    OFF     Set the port pin high.
ON    ON      Toggle the port pin high and low at a frequency over about 120 Hz. 

Ulangi tindakan yang sama untuk pin port lain dan Anda akan terlihat seperti Anda memiliki empat LED independen dari dua pin port.

Skema ini bekerja dengan baik untuk LED yang memiliki drop tegangan maju yang lebih dari setengah level VCC. LED merah dengan 2.1 VF tidak akan berfungsi dengan baik jika VCC 5V misalnya. Di sisi lain LED hijau dengan 2.5V VF akan bekerja dengan baik pada sistem dengan VCC 3.3V.

Michael Karas
sumber
3
Apakah ini kontrol total? Bagaimana Anda menghidupkan atau mematikan semuanya?
stanri
Satu LED menyala saat arus mengalir keluar dari pin, LED lainnya menyala ketika arus mengalir ke pin. Jadi matikan mereka berdua Anda hanya tri-state pin port, tidak ada arus akan masuk atau keluar dari itu, jadi tidak ada LED. Saat ini tidak dapat mengalir masuk dan keluar pada saat yang sama sehingga Anda tidak dapat memiliki kedua LED pada saat yang bersamaan. Tetapi Anda dapat menciptakan efek keduanya dengan menggerakkan pin tinggi lalu rendah kemudian tinggi kemudian rendah kemudian tinggi lalu rendah dll
Will
2

2 leds satu pin, ditarik dengan buruk

Jadi seperti ini tidak ada arus yang mengalir ketika mereka mati, dan Anda dapat mengendarai sebanyak / sedikit tegangan maju yang Anda butuhkan

Akan
sumber
Ini sama dengan solusi Michael Karas. Ini mengharuskan V_f dari LED lebih besar dari Vcc / 2, atau Anda tidak dapat mematikannya sepenuhnya.
Dave Tweed
+1 untuk berupaya menghadirkan solusi Michael Karas dengan menyalin skema CircuitLabs Dave Tweed dan menggambar garis tangan bebas di dalamnya dengan MS Paint (atau sejenisnya).
Ricardo
Dan itu di cat :)
Will
1
Ah, saya mengerti apa yang Anda bicarakan, Dave. Saat ini berjalan r1 d1 d2 r2 dan tidak ada yang masuk / kami dari pin
Will
2

EDN menerbitkan beberapa Ide untuk Desain terkait di sini

Ini salah satunya: -

masukkan deskripsi gambar di sini

Untuk nilai-nilai tipikal dengan D1 LED kuning (2.2V aktif), D2 LED merah (1.9V aktif), dan mati tegangan masing-masing 1.2V dan 1.1V, dan pada arus masing-masing 8mA, Vcc = 5.0V, optimal nilai adalah

R1 = 300 ohm R2 = 330 ohm R3 = 1.2K ohm

Diam saat ini adalah 2.7mA. Agar kedua LED tampak menyala, ganti pin output pada 100Hz atau lebih besar.

Saya menggunakan pemecah Excel di artikel asli, kode mungkin masih tersedia dari EDN.

The gelar tambahan kebebasan yang diberikan oleh resistor R3 dapat menghindari keterbatasan baik Dave Tweed dan sirkuit Michael Karas', meskipun untuk kasus spesifik 2 LED merah beroperasi dari suplai 5V, rangkaian Dave Tweed ini mungkin dapat diterima, tetapi memeriksa Vf hati-hati, itu tidak baik untuk beberapa LED merah, dan mungkin sedikit untuk yang lain jika pin port tidak menarik ke bawah atau ke atas.

Spehro Pefhany
sumber
Catatan: OP meminta sirkuit semua pasif . Juga, jika pin MCU-Z tinggi, inverter dipaksa ke mode operasi linier, yang umumnya akan membuang-buang daya.
Dave Tweed
@ DaveTweed Ya, postingan asli saya menentukan inverter ST, jadi saya telah mengedit untuk memperjelasnya. Ini tidak semua pasif, tapi itu sederhana dan nol Iq. Sirkuit kedua lebih tinggi Iq tetapi semua-pasif. Terima kasih atas komentarnya.
Spehro Pefhany
Saya tidak melihat bagaimana input Schmitt Trigger membantu; sebaliknya, saya akan berpikir bahwa itu akan memaksa rangkaian berosilasi. Memang, LED akan mati, tetapi inverter itu sendiri akan mengkonsumsi daya yang signifikan.
Dave Tweed
Yah, karena tidak memenuhi persyaratan asli dari tidak ada bagian aktif, saya akan menghapusnya, tapi saya yakin itu berfungsi dengan baik.
Spehro Pefhany
+1 untuk R3, bisa menjadi trik yang bermanfaat. Dan yang murah pada saat itu
Will