[TUTORIAL] Menggunakan Multiplekser (Multiplexer) 4051 pada Arduino
Pendahuluan
Multiplekser (Multiplexer, atau biasa disingkat dengan mux) adalah adalah alat yang dapat memilih satu dari beberapa input digital/analog dan meneruskan sinyal yang dipilih tersebut menjadi hanya SEBUAH jalur output. Amatilah Gambar 1 berikut.
Gambar 1. Multiplekser 2-ke-1
Jumlah input dari Multiplekser tergantung dari jumlah pin Select yang digunakan. Pada Gambar 1, jika hanya terdapat sebuah pin Select (S0), maka kemungkinan nilai dari S0 adalah 0 (LOW) atau 1 (HIGH). Jika kita beri pin Select dengan nilai 0, maka input A yang akan dipilih, dan sebaliknya jika diberi nilai 1, maka input B yang akan dipilih.
Gambar 2. Multiplekser 4-ke-1
Mari kita kembangkan ide dasar ini. Amatilah Gambar 2. Jika kita memiliki dua pin Select, maka jumlah maksimum input akan menjadi empat. Mengapa demikian? Sebab kombinasi dari kedua nilai pin Select tersebut dapat tiperlihatkan sesuai dengan Tabel 1 berikut:
S1 | S0 | Pilihan Input |
---|---|---|
0 | 0 | A |
0 | 1 | B |
1 | 0 | C |
1 | 1 | D |
Untuk mempermudah, multiplekser yang memiliki pin Select sebanyak n akan memiliki maksimum input sebanyak 2n. Dengan demikian, jika jumlah pin Select adalah 3, maka maksimum input adalah 8, dan seterusnya.
Multiplekser bertindak seperti "saklar". Saklar ini dikontrol oleh nilai yang diberikan kepada pin Select. Amatilah Gambar 3.
Gambar 3. Sistem Kerja Multiplekser
Kebalikan dari multiplekser adalah Demultiplekser (demux). Demultiplekser memiliki satu input dan banyak output. Topik mengenai demultiplekser akan kita bahas pada tutorial berikutnya.
Menggunakan IC 4051
IC 4051 merupakan sebuah IC yang dapat bertindak baik sebagai Multiplekser maupun Demultiplekser. Jenis IC ini memiliki 8 analog (otomatis dapat bertindak sebagai digital) channel. Jika digunakan sebagai multiplekser, IC ini dapat memilih satu dari delapan input. Sebaliknya, jika digunakan sebagai demultiplekser, kita dapat memilih 8 ouput dari sebuah input. Amatilah salah satu contoh IC 4051 pada Gambar 4 berikut.
Gambar 4. IC 4051
Pada kasus dimana kita kekurangan pin ADC (misalnya menggunakan ESP8266 yang hanya memiliki sebuah ADC), maka kita dapat memanfaatkan IC ini sebagai multiplekser dengan input maksimal 8 channel. Jika Input lebih dari 8, maka kita bisa menggunakan IC jenis lain, misalnya 74HC4067 yang memiliki 16-channel. Konfigurasi dari pin IC 4051 diperlihatkan seperti pada Gambar 5.
Gambar 5. Konfigurasi Pin IC 4051
Jika digunakan sebagai multiplekser, skematik untuk mempermudah pemahaman dalam menggunakan IC 4051 diperlihatkan seperti pada Gambar 6.
Gambar 6. Input/Output IC 4051 sebagai Multiplekser
Pemrograman Arduino
Asumsi saat ini kita memiliki sebuah potensiometer sebagai pengganti semua jenis sensor analog. Konfigurasilah seperti berikut:
Pin IC 4051 | Pin Arduino |
---|---|
VCC | 5V |
GND | GND |
VEE | GND |
E | GND (active LOW) |
z | A0 |
S0,S1,S2 | 5,6,7 |
y0-y1 | input sensor |
Gambar 7. Multiplekser dengan sebuah input dari potensiometer
Amatilah Gambar 7. Tempatkan output potensiometer ke kaki y0, dan selanjutnya ketik dan unggahlah program berikut ke Arduino UNO:
//sesuikan posisi pin select int s0 = 5; int s1 = 6; int s2 = 7; //gunakan A0 sebagai input int analogPin = 0; //variabel untuk menyimpan nilai input int nilaiInput = 0; void setup() { //jadikan pin select sebagai output pinMode(s0, OUTPUT); pinMode(s1, OUTPUT); pinMode(s2, OUTPUT); //aktifkan komunikasi serial Serial.begin(9600); } void loop() { //memilih y0 sebagai input digitalWrite(s0,LOW); digitalWrite(s1,LOW); digitalWrite(s2,LOW); nilaiInput = analogRead(analogPin); Serial.println(nilaiInput); delay(200); }
Putar-putar dan lihatlah hasilnya pada Serial Monitor.
Pada koding di atas, 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 input mana yang digunakan berdasarkan tabel berikut:
S2 | S1 | S0 | 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
Gambar 8. Multiplekser dengan sebuah input dari potensiometer
Sekarang, mari kita kembangkan program kita. Amatilah Gambar 8. Asumsi saat ini kita memiliki DUA buah potensiometer yang diletakkan pada pin y0 dan y1. Unggahlah koding berikut:
//sesuikan posisi pin select int s0 = 5; int s1 = 6; int s2 = 7; //gunakan A0 sebagai input int analogPin = 0; //variabel untuk menyimpan nilai input int nilaiInput = 0; void setup() { //jadikan pin select sebagai output pinMode(s0, OUTPUT); pinMode(s1, OUTPUT); pinMode(s2, OUTPUT); //aktifkan komunikasi serial Serial.begin(9600); } void loop() { //memilih y0 sebagai input digitalWrite(s0,LOW); digitalWrite(s1,LOW); digitalWrite(s2,LOW); nilaiInput = analogRead(analogPin); Serial.println(nilaiInput); delay(200); //memilih y1 sebagai input digitalWrite(s0,HIGH); digitalWrite(s1,LOW); digitalWrite(s2,LOW); nilaiInput = analogRead(analogPin); Serial.println(nilaiInput); delay(200); }
Putar-putarlah kedua potensiometer tersebut, dan lihatlah hasilnya pada Serial Monitor. Pada Gambar 9, Penulis memutar potensiometer sehingga memiliki dua nilai pada posisi maksimum dan minimum (yaitu 0 dan 1023) semata-mata untuk memperlihatkan bahwa multiplekser telah bekerja secara bergantian untuk membaca input dua input sensor yang berbeda.
Gambar 9. Multiplekser telah bekerja untuk membaca dua input yang berbeda (y0 dan y1)
Untuk mempermudah penulisan program (agar konfgurasi pin Select tidak dilakukan berulang kali), maka kita dapat membuat konfigurasi pin Select ke dalam suatu fungsi. Selanjutnya, kita cukup memanggil fungsi tersebut secara berulang. Ketiklah program berikut dan lihatlah hasilnya pada Serial Monitor. Hasilnya akan sama dengan percobaan sebelumnya.
//sesuikan posisi pin select int s0 = 5; int s1 = 6; int s2 = 7; //gunakan A0 sebagai input int analogPin = 0; //variabel untuk menyimpan nilai input int nilaiInput = 0; void setup() { //jadikan pin select sebagai output pinMode(s0, OUTPUT); pinMode(s1, OUTPUT); pinMode(s2, OUTPUT); //aktifkan komunikasi serial Serial.begin(9600); } void loop() { //ambil input y0 inputMultiplekser(0); nilaiInput = analogRead(analogPin); Serial.println(nilaiInput); delay(200); //ambil input y1 inputMultiplekser(1); nilaiInput = analogRead(analogPin); Serial.println(nilaiInput); delay(200); } 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 saja y0 else { digitalWrite(s0,LOW); digitalWrite(s1,LOW); digitalWrite(s2,LOW); } }
Gambar 9. Percobaan menggunaan multiplekser
Demikian tutorial kali ini. Semoga bermanfaat
Komentar
Multiplexer
Permisi, numpang tanya, jadi multiplexer itu nggak bisa baca 8 analog input secara bersamaan ya, jadi input dibaca secara bergantian, berarti ada delay untuk si multiplexer dalam membaca inputnya satu persatu ya, kira kira berapa lama delaynya ya, ditentukan oleh arduino kah...???
, dan kira kira memungkinkan nggak untuk sebuah multiplexer outputnya (y0 - y7) digunakan sebagai input multiplexer lainnya (S0, S1, S2)...???, Satu lagi, bedanya fungsi multiplexer sama shift register untuk arduino apa ya...???. Itu aja, maaf kalau banyak nanya, lagi tertarik soalnya.
Terimakasih.
Tanya tentang multiplexer
Halo,
thankyou udah mampir, langsung aja dari yang pertama:
Tidak, dia harus di switch dulu mau pilih channel yang mana... kayak kita nonton tv tidak bisa nonton semua channel berbarengan.
Iya, dibacanya bergantian sesuai dengan pilihan channel berapa, untuk delay saat penggantian channel pastinya ada tetapi itu sangat kecil, hitungannya mikro detik, namun selain itu proses pembacaan atau penulisan melalui multiplexer juga menghasilkan delay tentunya, sesuai dengan jenis perangkat yang lagi diakses. Tapi umumnya delay ini tidak menyebabkan masalah, karena fungsi utama dari si multiplexer cuma mengalihkan satu pin itu ke banyak channel. Proses baca tulis tetap sama seperti baca tulis dari pin aslinya langsung.
Dalam satuan mikro detik, nanti bisa dihitung dengan fungsi micros() yang ada diarduino, jadi cara kerjanya micros sebelum fungsi yang mau diukur dijalankan dicatat dulu, terus jalankan fungsi, dan di bawahnya juga catat lagi nilai microsnya berapa, nanti tinggal dikurangi nilai mikros akhir dengan micros awal. Ketemu deh berapa tuh durasinya.
Of course yes, nested multiplexer tentunya dimungkinkan... more bisa cek librarinya untuk mempermudah di sini: https://github.com/maxpowel/Multiplexer
bedanya adalah jenis channelnya, kalau multiplexer dia bisa analog dan digital tapi kalau shift register dia cuma digital aja. Multiplexer juga lebih cepat daripada shift register, karena seperti namanya, shift register itu tv maka kalau mau nonton channel sembilan mesti teken dari channel satu dulu, terus dua, terus tiga .... sampai sembilan, tapi kalau multiplexer tinggal ambil remot teken sembilan udah. Kira2 begitu.
Oke, Semoga penjelasannya berguna
HTSL://HIGH THINKING SIMPLE LIVING . ME
MULTIPLEXING
ohh, gitu ya, berarti input multiplexer nggak perlu disupplay tegangan terus menerus untuk memilih chanel mana yang akan dipakai, cukup sekali suplay saja, chanel sudah aktif, atau mungkin chanel multiplaxer bisa aktif terus menerus aktif sesudah inputnya disupplay tegangan selama chanel lain belum ditentukan...???. untuk shift register, berarti untuk menyalakan led di chanel 3 shift register, led di chanel 1 dan 2 akan menyala sebelumnya ya....ehh, terus kalo shift register itu bisa nerima input dari sensor nggak ya...???. Terimakasih sebelumnya
Cara kerja multiplexer & shift register
Halo,
Untuk tegangan select yang diurus oleh pin select tentunya akan terus aktif selama pengoperasian, tapi ini tegangan sangat kecil dengan amper yang sangat kecil, jadi tidak akan boros kalau konsennya ke masalah daya. Channel yang tidak aktiv tentunya ya tidak aktif alias low.
Shift register led 1 dan 2 akan nyala seper sekian mikro detik, karena prosesnya adalah shifting, penggeseran, otomatis ya kena juga. Kalau shift register umumnya tidak diperuntukan untuk input/baca sensor, tetapi ada juga IC yang support untuk itu, namanya shiftin. Biasanya pakai IC model CD4021B, dan yang perlu dicatat adalah metode ini hanya support untuk melakukan pembacaan input digital.
HTSL://HIGH THINKING SIMPLE LIVING . ME
MULTIPLEXING
ohh, oke, terimakasih banyak ya kak, informasinya....