Berikut ini adalah tulisan lanjutan tentang Multiplexer yang telah saya tulis pada post sebelumnya. Bedanya, kalo pada post yang yang pertama saya membahas tentang Mux seri 74LS151, nah yang post kedua ini saya akan mencoba untuk membahas aplikasi dari Mux jenis CMOS seri CD4051..

Pin Out diagram CD4051

Berikut ini adalah aplikasi menggunakan Mux untuk menghemat port ADC pada mikrokontroller AVR ATMega32. Pada dasarnya, Mikrokontroller ATMega32 hanya memiliki 8 buah channel ADC 10bit, jadi kita hanya bisa memasang 8 buah sensor yang memiliki interface output berupa variasi tegangan.
Nah, dengan menggunakan multiplexer CD4051, kita bisa memasang hingga 8 buah sensor yang outputnya berupa variasi tegangan pada 1 port ADC mikrokontroller ATMega32..
Pada aplikasi ini, saya mencoba mengakses 16 buah sensor dengan output variasi tegangan (diwakilkan dengan Potensiometer) dengan menggunakan 2 buah Mux CD4051 yang diakses secara sinkron dan parallel kemudian hasil pembacaannya ditampilkan pada LCD teks 20*4.

Hasil Simulasi dengan Proteus

Keterangan Rangkaian :

– Output Mux A masuk ke Channel ADC 0 (PORTA.0)

– Output Mux B masuk ke Channel ADC 1 (PORTA.1)

– Selektor A ke PORTB.5

– Selektor B ke PORTB.6

– Selektor C ke PORTB.7

Keterangan Tampilan LCD :

1A        5A        1B        5B

2A        6A        2B        6B

3A        7A        3B        7B

4A        8A        4B        8B

Listing Program :

'Oleh : Pramudita J.I.  (joe4cva)
'Elektronika Dan Instrumentasi
'Universitas Gadjah Mada

$regfile = "m32def.Dat"
$crystal = 16000000

Config Lcdpin = Pin , Db4 = Portc.2 , Db5 = Portc.3 , Db6 = Portc.4 , Db7 = Portc.5 , E = Portc.7 , Rs = Portc.6
Config Lcdbus = 4
Config Lcd = 20 * 4
Cursor Off

Config Adc = Single , Prescaler = Auto , Reference = Avcc
Config Portb.5 = Output
Config Portb.6 = Output
Config Portb.7 = Output
Out1 Alias Portb.5
Out2 Alias Portb.6
Out3 Alias Portb.7
Reset Out1
Reset Out2
Reset Out3

Dim Sensor(8) As Word , Sensor2(8) As Word
Dim Data_out As Byte , Buff As Byte
Data_out = 0
Declare Sub Cek
Cls

Do
Gosub Cek
'MUX 1
Locate 1 , 1
Lcd Sensor(1) ; " "
Locate 2 , 1
Lcd Sensor(2) ; " "
Locate 3 , 1
Lcd Sensor(3) ; " "
Locate 4 , 1
Lcd Sensor(4) ; " "
Locate 1 , 6
Lcd Sensor(5) ; " "
Locate 2 , 6
Lcd Sensor(6) ; " "
Locate 3 , 6
Lcd Sensor(7) ; " "
Locate 4 , 6
Lcd Sensor(8) ; " "

'MUX 2
Locate 1 , 11
Lcd Sensor2(1) ; " "
Locate 2 , 11
Lcd Sensor2(2) ; " "
Locate 3 , 11
Lcd Sensor2(3) ; " "
Locate 4 , 11
Lcd Sensor2(4) ; " "
Locate 1 , 16
Lcd Sensor2(5) ; " "
Locate 2 , 16
Lcd Sensor2(6) ; " "
Locate 3 , 16
Lcd Sensor2(7) ; " "
Locate 4 , 16
Lcd Sensor2(8) ; " "
Loop

Sub Cek
Start Adc
Incr Data_out
If Data_out = 8 Then Data_out = 0
Out1 = Data_out.0
Out2 = Data_out.1
Out3 = Data_out.2
Buff = Data_out + 1
Sensor(buff) = Getadc(0)
Sensor2(buff) = Getadc(1)
End Sub
Return

Semoga Bermanfaat.. :D