Sabtu, 07 April 2012

MIKROKONTROLER SEBAGAI PENGONTROL SELEKTOR SUARA


December 5th, 2011 No comments

Pendahuluan

Pada tulisan kali ini saya akan memberikan salah satu contoh pemakaian mikrokontroler PIC16F84 untuk digunakan sebagai pemilih ( selektor ) masukan suara.  Jika anda pernah membuat amplifier misalnya, dan memiliki dua atau lebih sumber suara misalnya dari sebuah CD Player, Tape dan Tuner.  Maka kita dapat memilih suara yang akan dikuatkan ( amplifikasi ) apakah dari CD Player, Tape maupun Tuner. Hal ini secara sederhana dapat dilakukan dengan menggunakan sebuah saklar.
Nah kali ini fungsi saklar sederhana tersebut akan digantikan dengan menggunakan saklar dari sebuah relay yang dikontrol oleh mikrokontroler.  Agar lebih menarik, maka akan diberikan juga tampilan menggunakan sebuah LCD ( Liquid Crystal Display ).  Dalam hal ini LCD akan dapat menampilkan tulisan fungsi yang sedang dipilih seperti ‘TAPE’ atau ‘TUNER’. Ataupun tulisan apa saja sesuai dengan keinginan anda.

Cara Kerja Alat
            Cara  kerja alat adalah sangat sederhana saja. Pada dasarnya hanya mengontrol kerja relay berdasarkan tombol mana yang ditekan.  Pada prototype yang saya buat, baru menggunakan 2 buah relay ( dapat dikembangkan dikemudian hari ). Oleh karena itu kita akan menganggap bahwa masukan suara ada 2 jenis yaitu yang berasal dari TAPE dan yang berasal dari TUNER.
Berikut akan diberikan diagram rancangan alat untuk memilih sumber suara ini secara sederhana.

diagram alat
Gambar 1  Diagram Alat
            Dari gambar diatas terlihat bahwa ada 2 sumber suara yaitu dari TAPE dan dari TUNER.  Pemilihan sumber suara tersebut akan ditentukan oleh tombol  mana yang ditekan.  Jika yang ditekan adalah tombol TAPE, maka sumber suara yang terpilih adalah TAPE dan Relay1 akan aktif ( terhubung dengan amplifier ) dan pada LCD akan tertulis tulisan ‘TAPE’. Jika tombol TUNER ditekan, maka sumber suara dari TUNER akan terhubung ke amplifier melalui Relay 2 dan pada LCD akan tertulis tulisan ‘TUNER’.

Rangkaian Programmer PIC16F84
Karena yang akan kita pakai sebagai pengontrol utama adalah sebuah mikrokontroler PIC16F84, maka ada baiknya apabila kita singgung terlebih dahulu cara memprogram mikrokontroler tersebut.  Jika anda telah membuat rangkaian PIC to Breadboard, maka dapat dipakai juga untuk memprogram mikrokontroler PIC16F84.
Ataupun anda dapat membuat sebuah programmer sederhana untuk mikrokontroler ini. Ini adalah salah satu kelebihan mikrokontroler ini yang dapat diprogram dengan menggunakan alat yang sederhana saja.  Adapun rangkaian untuk memprogram mikrokontroler ini adalah :

programmer pic16f84a
Gambar 2  Rangkaian Programmer PIC16F84
            Rangkaian diatas merupkan rangkaian untuk memprogram mikrokontroler PIC16F84.  Adapun pada bagian kiri adalah terminal yang dihubungkan dengan konektor DB-9 (Female) yang nantinya dihubungkan dengan serial port pada komputer ( COM1 atau COM2 ). Ingat bahwa nama-nama pin pada DB-9 dengan DB-25 letaknya tidak sama.  Apabila pada komputer anda yang tersisa adalah yang menggunakan DB-25 maka anda dapat membeli alat konverter DB-25 ke DB-9 yang banyak dijual di toko komputer.
Adapun Software yang digunakan untuk memprogram mikrokontroler ini masih sama dengan yang  digunakan pada PIC to Breadboard yaitu Picprog. Berikut diberikan contoh gambar programmer mikrokontroler PIC16F84 yang sudah dibuat penulis.
contoh programmer

Gambar  3 Programmer PIC16F84
Liquid Crystal Display ( LCD )
LCD telah lama dipakai sebagai penampil untuk alat-alat elektronika.  Dengan menggunakan LCD maka kesan alat akan menjadi lebih professional. Bandingkan jika hanya menggunakan penampil tujuh segmen saja, mungkin masih terlihat sederhana.  Namun menggunakan LCD tidaklah semudah menggunakan penampil tujuh segmen.

Contoh LCD
Gambar 4  Contoh LCD 2 baris
            Hal ini dikarenakan pada LCD juga terdapat kontroler terintegrasi.  Nah tugas kita adalah berkomunikasi dengan kontroler yang telah ditanam pada LCD tersebut agar LCD mau menampilkan tulisan seperti yang kita kehendaki.  Secara umum kontroler yang dipakai adalah buatan Hitachi HD44780, yang mana walaupun banyak pabrikan yang membuat LCD ini namun karena sama-sama menggunakan kontroler yang sama menjadikannya saling kompatibel.
Pena-pena LCD
            LCD memiliki pena-pena sebanyak 14 sampai 16 pin. Pena-pena tersebut memiliki kegunaan masing-masing. Pengantar-mukaan dapat menggunakan sistim 8 bit maupun menggunakan sistim 4 bit.  Jika menggunakan sistim 4 bit, maka kita akan menghemat 4 port mikrokontroler.  Adapun kegunaan masing-masing pena adalah sebagai berikut.

Tabel 1  Nama dan Kegunaan Pena pada LCD
                                    Pena                     Nama Pena           Fungsi
1                        Gnd                        Ground untuk LCD
2                        Vcc                        +5 Volt untuk LCD
3                        Vref                          Teg. Pengatur brightness
4                          RS                           Bit pemilih instruksi / data
5                        R/W                         Bit pemilih Read / Write
6                         E                             Bit enable
7                         D0                           Data Bit 0
8                                                          D1                            Data Bit 1
9                                                           D2                           Data Bit 2
10                                                       D3                            Data Bit 3
11                                                       D4                            Data Bit 4
12                                                       D5                            Data Bit 5
13                                                       D6                            Data Bit 6
14                                                       D7                            Data Bit 7
15                                                       Back Light ( + )  – optional
16                                                       Back Light ( – )   – optional

Pena no 15 dan 16 hanya ada pada LCD yang dilengkapi dengan Back Light ( lampu belakang ) sehingga LCD dapat terbaca pada kondisi gelap.  Beberapa LCD tidak terdapat fasilitas back light tersebut, sehingga pena no 15 dan 16 tidak ada.

Prinsip Menggunakan LCD
Untuk dapat menggunakan LCD, maka harus tahu prinsip menggunakan LCD tersebut. Apabila anda membeli LCD yang baru jangan lupa untuk meminta data sheet-nya, karena pada data sheet tersebut terdapat keterangan-keterangan yang berguna bagaimana cara menggunakan LCD tersebut.  Berikut akan diberikan prinsip penggunaan LCD secara umum.
Modul LCD memiliki 3 jalur kontrol yang bernama RS, R/W dan E.  RS digunakan untuk memberitahukan kepada LCD apakah data yang diberikan adalah kata-instruksi  ( instruction word) atau kata-data  ( data word ). Jika akan mengirim instruksi maka RS harus dibuat 0, sedangkan untuk mengirimkan data maka RS harus berlogika 1.
Logika pada RS
Instruksi                             0
Data                                    1
Sementara   jalur R/W digunakan untuk memilih operasi Read atau Write. Read artinya membaca data dari LCD sedangkan Write artinya menuliskan data ke LCD.  Dalam kasus ini kita hanya akan menuliskan data ke LCD, sehingga jalur ini dapat dibuat rendah ( logika 0 ) terus.  Terakhir adalah jalur E ( Enable ), dimana jika dia berlogika tinggi ( 1 ) maka proses penulisan ke LCD akan diaktifkan.
Kata instruksi yang dikirimkan ke LCD akan memberitahukan apa yang harus dilakukan oleh kontroler LCD.  Berikut diberikan beberapa kata-instruksi untuk mengatur tampilan pada LCD.

Tabel 2  Kata Instruksi
Operasi                      Kata Instruksi                     Kegunaan
Set Fungsi                  0×38                               Mode 8-bit, 5×7 pada saat inisialisasi saja
Display On/Off          0x0C                                   Display On tanpa kursor
0x0F                                    Display On kursor kedip di kiri
Hapus Display           0×01                                     Hapus display ( blank = kosong )
Entry Mode Set          0×06                                    Mode penaikan ( Increment )


Alamat Karakter
Sebelum menuliskan sebuah tulisan ke LCD, maka kita harus tahu alamat karakter pada display LCD.  Berikut alamat karakter pada LCD secara umum.
LCD 1 baris
  1. LCD 1 baris



b. LCD 2 baris


Jadi pada LCD 1 baris, alamat awal adalah 0×80 dan berisi 8 karakter saja sedangkan karakter ke 9 memiliki alamat 0xC0 dan seterusnya.  Sedangkan pada LCD 2 baris alamat awal pada baris pertama adalah 0×80 sedangkan alamat awal pada baris ke dua adalah 0xC0.

Rangkaian Lengkap
            Rangkaian lengkap berisi hubungan antara mikrokontroler PIC16F84 dengan LCD dan sistim relay. Pada proyek saat ini hanya akan menggunakan 2 buah relay saja walaupun dapat ditingkatkan menjadi 3 relay untuk 3 sumber suara.  Adapun port-port yang dipilih untuk berhubugan dengan saklar dan relay adalah sebagai berikut.
Bagian Masukan :
Tombol TAPE – RA0
Tombol TUNER – RA3
Bagian Keluaran :
Relay TAPE  – RB0
Relay TUNER – RB1
Rangkaian akan diberikan secara terpisah menjadi 3 bagian yaitu : sistim minimum mikrokontroler PIC16F84, bagian LCD dan bagian relay dan switch.
  1. Sistim minimum mikrokontroler PIC16F84


Sistim Min Mikrokontroler

Gambar 5  Sistim minimum PIC16F84
Contoh Sis Min
Gambar 6  Foto sistim minimum PIC16F84

  1. Rangkaian bagian LCD
Rangkaian LCD

1  :  GND                    7 :  -                        13  :  RB6
2  :  +5V                      8 :  -                        14  :  RB7
3  :   Vref                     9 :  -
4  :   RA2                  10  :  -
5  :   GND                  11 :  RB4
6  :   RA1                   12 :  RB5

Hubungan antara LCD dengan mikrokontroler PIC16F84 hanya menggunakan 6 jalur I/O saja yaitu RA2 , RA1 dan RB4..RB7.  Hal ini karena menggunakan sistim 4-bit sehingga hanya RB4 sampai RB7 saja yang dipakai sebagai jalur data ( 4-bit ). Sementara RA2 dihubungkan dengan RS dan RA1 dihubungkan dengan E ( Enable ).  Pena R/W dihubungkan terus dengan ground.

  1. Rangkaian Relay
Rangkaian relay merupkan rangkaian sederhana saja yaitu hanya untuk mengaktifkan relay menggunakan penguat transistor.  Rangkaiannya adalah sebagai berikut.
Rangkaian Relay

Gambar 7  Rangkaian Relay
Terakhir diberikan foto alat secara keseluruhan.
Gambar Alat


Gambar 8 Alat secara keseluruhan

Moh.Ibnu Malik,ST
Taman Aster Blok G2 No.35
Cikarang Barat Bekasi 17520
Email : moh_ibnumalik@yahoo.com
YM : moh_ibnumalik
HP : 081 293 295 12





Program
Berikut adalah program yang harus dimasukkan kedalam mikrokontroler PIC16F84.
;=======FUNC.ASM==============================================
list    p=16c84
radix   hex
;————————————————————

status       equ 0×03
porta         equ 0×05
portb         equ   0×06
count1      equ 0x0c
count2      equ 0x0d
bits            equ            0x0e
trisa           equ            0×85
trisb           equ            0×86
;————————————————————
;       persamaan bit
rp0 equ 5
;————————————————————
org     0×000
;
mulai
bsf status,rp0     ; ke bank 1
movlw  b’00000000′ ;RB sebagai outputs
movwf trisb
movlw  b’00011001′ ;RA0in,RA1out,RA2out,RA3in,RA4in
movwf trisa
bcf status,rp0     ; kembali ke bank 0

movlw   b’00000000′ ;semua keluaran rendah
movwf   portb
movlw   b’00011001′ ;inisialisasi porta
movwf   porta

call    del_5    ;beri waktu biar LCD berinisialisasi sendiri
call    initlcd  ;inisialisasi LCD
call    function ; tampilkan tulisan ‘Function :’

cek_tombol           ; cek penekanan tombol
btfss porta,0    ; tombol RA0 ditekan?
call    tape     ; ya,tampilkan tulisan ‘TAPE’
btfss porta,3    ; tidak,tombol RA3 ditekan ?
call    tuner    ; ya,tampilkan tulisan ‘TUNER’
goto cek_tombol  ; tidak, kembali ke cek tombol



;————————————————————

function
bcf porta,1     ;jalur E rendah
bcf porta,2     ;jalur RS rendah, set up untuk kontrol
call  del_125   ;tunda 125 mikrodetik

movlw 0×80      ;control word = alamat awal 0×80 (baris pertama)
call  send
bsf porta,2     ;RS=1, set up untuk data
call del_125    ;tunda 125 mikrodetik

movlw ‘  ‘ ;  beri spasi
call send

movlw ‘  ‘ ; beri spasi
call send

movlw ‘  ‘ ; beri spasi
call send

movlw ‘  ‘ ; beri spasi
call send

movlw ‘F’
call send

movlw ‘u’
call send

movlw ‘n’
call send

movlw ‘c’
call send

movlw ‘t’
call send

movlw ‘i’
call send

movlw ‘o’
call send

movlw ‘n’
call send

movlw ‘:’
call send
return
;——————–
tape
bsf portb,0     ; aktifkan relay RB0 (biar input terhubung ke ;ampli)
bcf portb,1     ; lumpuhkan relayRB1

bcf porta,1
bcf porta,2
call del_125

movlw 0xC0      ;menulis pada baris ke dua
call  send
bsf porta,2     ;RS=1, set up untuk data
call del_125    ;tunda 125 mikrodetik

movlw ‘  ‘ ;  beri spasi
call send

movlw ‘  ‘ ;  beri spasi
call send

movlw ‘  ‘ ;  beri spasi
call send

movlw ‘  ‘ ;  beri spasi
call send

movlw ‘T’
call send

movlw ‘A’
call send

movlw ‘P’
call send

movlw ‘E’
call send

movlw ‘  ‘
call send   ; mencegah tertulisnya kata ‘TAPER’


return

tuner

bcf portb,0  ; lumpuhkan relay RB0
bsf portb,1  ; aktifkan relay  RB1

bcf porta,1
bcf porta,2
call del_125

movlw 0xC0      ;menulis pada baris ke dua
call  send
bsf porta,2     ;RS=1, set up untuk data
call del_125    ;tunda 125 microdetik

movlw ‘ ‘ ;  beri spasi
call send

movlw ‘ ‘ ;  beri spasi
call send

movlw ‘ ‘ ;  beri spasi
call send

movlw ‘ ‘ ;  beri spasi
call send

movlw ‘T’
call send

movlw ‘U’
call send

movlw ‘N’
call send

movlw ‘E’
call send

movlw ‘R’
call send


return
;————————————————————
initlcd
bcf porta,1 ;jalur E line rendah
bcf porta,2 ;jalur RS rendah , set up untuk control
call    del_125 ;tunda 125 mikrodetik
movlw          0×38    ;8-bit, 5X7 mode
movwf         bits      ;0011 1000
call    flipbit ;output 4 MS bits (LS tidak pakai)
call    pulse   ;kirim  bits
call    del_125 ;tunda 125 mikrodetik
movlw          0×28    ;4-bit, 5×7 mode
movwf         bits      ;0010 1000
call    flipbit ;output 4 MS bits (LS tidak pakai)
call    pulse   ;masuk ke mode 4-bit
call   del_125
movlw          0×28    ;4-bit, 5×7 mode
call    send    ;send kirim kedua nibble
movlw   0x0c    ;display on tanpa kursor
call   send
movlw   0×01    ;hapus display
call   send
call    del_5   ;tunda 5 milidetik
return
;————————————————————
send
movwf   bits
call   flipbit
call   pulse
swapf   bits,f  ;tukar MS and LS nibble
call    flipbit ;
call   pulse
call   del_125
return
;————————————————————

flipbit
bcf portb,4
btfsc   bits,4
bsf portb,4
bcf       portb,5
btfsc    bits,5
bsf       portb,5
bcf       portb,6
btfsc    bits,6
bsf       portb,6
bcf       portb,7
btfsc    bits,7
bsf       portb,7
return
;————————————————————
del_125
movlw   0x2a    ;
movwf   count1  ;
repeat  decfsz  count1,f
goto    repeat
return          ;
;————————————————————
del_5
movlw   0×29     ; 40 desimal
movwf   count2   ; ke counter
delay
call    del_125  ; tunda  125 mikrodetik
decfsz  count2,f ; kerjakan 40 kali = 5 milidetik
goto     delay
return           ;counter 0, tundaan selesai
;————————————————————
pulse
bsf porta,1 ;pulse E line
nop                  ;delay
bcf       porta,1
return
;————————————————————
end

0 comments:

Posting Komentar