[TUTORIAL] Menggunakan Demultiplekser (Demux) 4051 pada Arduino
Pendahuluan
Demultiplekser (Demultiplexer atau disingkat Demux) memiliki prinsip kerja kebalikan dari multiplekser. Bagi pembaca yang belum memahami prinsip kerja dari multiplekser, silahkan baca artikel ini terlebih dahulu.
Demux dapat digunakan untuk memilih BEBERAPA jalur output dari SEBUAH input. Demux sangat berguna ketika kita memiliki keterbatasan jalur input, misalnya kekurangan pin out dari sebuah mikrokontroler. Sebagai contoh ketika kita ingin menyalakan beberapa LED secara bergantian, misalnya 8 LED. Jika kita menggunakan satu pin output untuk setiap LED, maka kita memerlukan sebanyak 8 pin output. Kondisi ini dapat memboroskan penggunaan pin. Karena operasinya secara bergantian, kita dapat menggunakan demux yang hanya memerlukan sebuah pin!
Gambar 1. Demux 1-ke-2
Amatilah Gambar 1. Gambar tersebut menunjukkan skemati demux 1-ke-2, dimana sebuah input dapat dipecah menjadi dua buah output. Output yang dipilih tergantung dari nilai pin Select (S0). Jika nilai S0 adalah 0 (LOW), maka sinyal Z akan diteruskan ke A, dan sebaliknya jika S0 bernilai 1(HIGH), maka sinyal Z akan diteruskan ke B.
Gambar 2. Demux 1-ke-4
Mari kita kembangkan ide ini untuk demux 1-ke-4. Amatilah Gambar 2. Output yang dipilih akan mengikuti Tabel Kebenaran berikut:
S1 | S0 | Pilihan Output |
---|---|---|
0 | 0 | A |
0 | 1 | B |
1 | 0 | C |
1 | 1 | D |
Menggunakan IC 4051 sebagai Demux
Seperti yang telah dibahas pada tutorial sebelumnya, IC 4051 dapat bertindak baik sebagai Multiplekser maupun sebagai Demultiplekser. Dalam penggunaannya, kita cukup membalikkan input dan output yang telah dilakukan pada percobaan sebelumnya. Berikut skematik IC 4051 ketika digunakan sebagai Demux:
Gambar 3. Pin IC 4051 dan konfigurasinya sebagai Demux
Pemrograman Arduino
Mari kita mengambil salah satu contoh penggunaan demux, yaitu membuat dua buah LED yang hidup dan padam secara bergantian (flip-flop). Amatilah Gambar 4, dengan keterangan koneksi sesuai dengan Tabel berikut:
Pin IC 4051 | Pin Arduino |
---|---|
VCC | 5V |
GND | GND |
VEE | GND |
E | GND (active LOW) |
z | 9 |
S0,S1,S2 | 5,6,7 |
y0-y1 | output ke LED |
Gambar 4. Skematik LED Flip-flop
Unggahlah program berikut ke Arduino kita:
//sesuikan posisi pin select int s0 = 5; int s1 = 6; int s2 = 7; //gunakan pin 9 sebagai output int outputPin = 9; void setup() { //mode pin select sebagai output pinMode(s0, OUTPUT); pinMode(s1, OUTPUT); pinMode(s2, OUTPUT); //mode pin out sebagai output pinMode(outputPin, OUTPUT); //berikan nilai LOW di awal digitalWrite(outputPin, LOW); } void loop() { //memilih y0 sebagai output digitalWrite(s0,LOW); digitalWrite(s1,LOW); digitalWrite(s2,LOW); digitalWrite(outputPin, HIGH); delay(1000); digitalWrite(outputPin, LOW); //memilih y1 sebagai output digitalWrite(s0,HIGH); digitalWrite(s1,LOW); digitalWrite(s2,LOW); digitalWrite(outputPin, HIGH); delay(1000); digitalWrite(outputPin, LOW); }
Jalankan program di atas, dan jika kedua LED menyala dan padam secara bergantian, maka program kita telah sukses.
Pada program di atas, kita menggunakan pin 9 sebagai output dari Arduino, dan memecah output tersebut ke y0 dan y1. Semua pin Select (S0, S1, dan S2) digunakan sebagai output. Masing-masing pin Select akan diberi nilai menggunakan fungsi digitalWrite. Nilai 0 merupakan LOW, sedangkan nilai 1 merupakan HIGH. Ubah-ubahlah nilai S0, S1, dan S2 untuk memilih output mana yang digunakan berdasarkan tabel berikut:
S2 | S1 | S0 | output y ke- |
---|---|---|---|
0 | 0 | 0 | 0 |
0 | 0 | 1 | 1 |
0 | 1 | 0 | 2 |
0 | 1 | 1 | 3 |
1 | 0 | 0 | 4 |
1 | 0 | 1 | 5 |
1 | 1 | 0 | 6 |
1 | 1 | 1 | 7 |
Catatan: 0 berarti LOW dan 1 berarti HIGH pada Arduino
Untuk pengembangan lebih lanjut, kita dapat memanfaatkan kedelapan output pada IC 4051. Agar kita dapat memprogram dengan lebih mudah, kita dapat membuat konfigurasi pin Select untuk kedelapan output menjadi suatu fungsi. Amatilah contohnya berikut:
//sesuikan posisi pin select int s0 = 5; int s1 = 6; int s2 = 7; //gunakan pin 9 sebagai output int outputPin = 9; void setup() { //jadikan pin select sebagai output pinMode(s0, OUTPUT); pinMode(s1, OUTPUT); pinMode(s2, OUTPUT); //jadikan pin out sebagai output pinMode(outputPin, OUTPUT); digitalWrite(outputPin, LOW); } void loop() { //saat ini gunakan hanya 2 output //nyalakan LED 1 pada y0 inputMultiplekser(0); digitalWrite(outputPin, HIGH); delay(1000); digitalWrite(outputPin, LOW); //nyalakan LED 2 pada y1 inputMultiplekser(1); digitalWrite(outputPin, HIGH); delay(1000); digitalWrite(outputPin, LOW); } void inputMultiplekser(int y){ if (y==0){ digitalWrite(s0,LOW); digitalWrite(s1,LOW); digitalWrite(s2,LOW); } else if (y==1){ digitalWrite(s0,HIGH); digitalWrite(s1,LOW); digitalWrite(s2,LOW); } else if (y==2){ digitalWrite(s0,LOW); digitalWrite(s1,HIGH); digitalWrite(s2,LOW); } else if (y==3){ digitalWrite(s0,HIGH); digitalWrite(s1,HIGH); digitalWrite(s2,LOW); } else if (y==4){ digitalWrite(s0,LOW); digitalWrite(s1,LOW); digitalWrite(s2,HIGH); } else if (y==5){ digitalWrite(s0,HIGH); digitalWrite(s1,LOW); digitalWrite(s2,HIGH); } else if (y==6){ digitalWrite(s0,LOW); digitalWrite(s1,HIGH); digitalWrite(s2,HIGH); } else if (y==7){ digitalWrite(s0,HIGH); digitalWrite(s1,HIGH); digitalWrite(s2,HIGH); } //jika input bukan 0-7, maka jadikan y0 else { digitalWrite(s0,LOW); digitalWrite(s1,LOW); digitalWrite(s2,LOW); } }
Kalau kita jalankan program di atas, hasilnya akan sama dengan program sebelumnya.
Demikian tutorial kali ini. Semoga bermanfaat
Mari Gabung
Halo
, Ada yang ingin disampaikan? Jangan sungkan untuk gabung diskusi ini. Silahkan Login dulu atau Daftar baru.