December 7th, 2011
2 comments
Pendahuluan
Dalam dunia industri sering terdengar istilah JIG. JIG adalah alat apa saja yang dapat membantu / mempermudah pekerjaan. Nah kali ini, saya akan menampilkan suatu alat yang dapat menjadi kontroler untuk dipergunakan sebagai JIG / alat bantu dalam proses pekerjaan baik untuk di industri maupun untuk di rumah.Kontroler ini akan menggunakan mikrokontroler PIC16F84/A sebagai pengendalinya. Dia akan memiliki layar tampilan berupa LCD ( Liquid Crystal Display ) 16 karakter x 2 baris sebagai sarana untuk berkomunikasi dengan pengguna.
Disamping itu, dia juga memiliki beberapa port I/O yang dapat kita program untuk dijadikan sebagai alat masukan atau alat keluaran. Secara normal sebagai alat masukan digunakan tombol push on standard dan untuk keluran dapat berupa LED atau relay ( hal ini tentu sesuai dengan kebutuhan ).
Mengapa LCD ?
Penggunaan LCD tentu dikarenakan beberapa hal. Diantaranya adalah bahwa dengan digunakannnya LCD, maka tampilan alat akan cenderung lebih professional, bila dibandingkan hanya menggunakan lampu led maupun peraga seven-segment biasa. Selain itu juga dengan digunakannya LCD, maka beragam tulisan / karakter dapat ditampilkan dengan mudah.
LCD saat ini telah banyak dipakai dalam beragam alat elektronika. Secara mudah dapat kita temukan pada telepon umum ( walaupun saat ini telpon umum sudah jarang dipakai orang ). Atau juga sebagai peraga pada beberapa produk printer dan lain-lain.
Pada edisi ini kita tidak akan membahas LCD-nya itu sendiri, hal ini karena pembahasan tentang LCD telah diberikan pada Elkom edisi sebelumnya. Pembahasan akan lebih menitik beratkan pada rangkaian menggunakan kontrol PIC16F84/A.
Rangkaian Lengkap
Rangkaian pengontrol JIG ini hanya menggunakan beberapa komponen elektronika saja. Yang paling utama tentu saja mikrokontroler PIC16F84/A dan LCD. Selebihnya hanya komponen-komponen pendukung seperti kristal / resonator dan beberapa komponen untuk catu daya.
Seperti telah dijelaskan diawal bahwa pada alat ini terdapat port I/O yang dapat diprogram baik untuk alat masukan atau alat keluaran. Dengan cara ini, maka beragam kontrol JIG dapat dibuat. Yang perlu dilakukan adalah menentukan terlebih dahulu port masukan dan port keluaran.
Sebagai contoh kita akan mengontrol sebuah relay ( yang terhubung dengan motor-misalnya ). Sebagai sarana untuk mengatur nyala-matinya relay itu, akan dipergunakan saklar push on dua buah. Sebuah saklar untuk mengaktifkan relay dan saklar lainnya untuk mematikan relay.
Gambar 1 Rangkaian pengontrol JIG
Hubungan antara mikrokontrole dengan LCD secara lengkap dapat dilihat pada listing program yang disertakan ( volex.asm ). Pada program ini adalah untuk mengontrol sebuah relay yang dapat terhubung ke sebuah motor. Untuk mengaktifkan relay ini, maka kita harus menekan tombol “START” sedangkan untuk mematikan relay ini, kita harus menekan tombol “STOP”.
Sesaat setelah kita menekan tombol START, maka pada LCD akan tampil tulisan “Mesin Bekerja” sedangkan sesaat setelah kita menekan tombol STOP maka pada LCD akan tampil tulisan “Mesin Berhenti”.
Gambar 2 Prototipe alat
Port A : RA0, RA3 dan RA4
Port B : RB0, RB1, RB2 dan RB3
Port-port ini dapat dihubungkan dengan alat masukan atau alat keluaran sesuai dengan alat yang hendak kita buat ( kita kontrol ). Pada contoh diatas tombol push on dihubungkandenganPORTA yaitu RA0 untuk tombol START dan RA4 untuk tombol STOP. Sedangkan relay dihubungkandenganPortB yaitu RB1.
Adapun listing program diatas adalah sebagai berikut.
;============================================================
; Program untuk contoh
; Mesin kontrol jig
; Saat Memberikan training di PT.VolexIndonesia
;————————————————————
; Pin-pin lcd
; 1= GND 2=+5V 3=Vref 4=RS 5=R/W 6=E
; 7= D0 8=D1 9=D2 10=D3 11=D4 12=D5
; 13=D6 14=D7 15=Backlight(+) 16=Backlight(-)
;————————————————————
; Hubungan LCD dengan Mikrokontroler
; RS dgn RA2 R/W dgn ground E dgn RA1
; D4 dgn RB4 D5 dgn RB5 D6 dgn RB6 D7 dgn RB7
;
;==============================================================
; cpu equates (memory map)
processor 16f84
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
PDel0 equ 0x0c
PDel1 equ 0x0d
PDel2 equ 0x0e
;————————————————————
; bit equates
rp0 equ 5
;————————————————————
org 0×000
;
start bsf status,rp0 ;switch to bank 1
movlw b’11001′ ;outputs
movwf trisa
movlw b’00000001′
movwf trisb
bcf status,rp0 ;switch back to bank 0
movlw b’11001′ ;all outputs low
movwf porta
movlw b’00000001′
movwf portb
call del_5 ;allow lcd time to initialize itself
call initlcd ;initialize display
call display_line1
call display_line2
call delay2s
call display_line2a
cek_tombol_start
btfsc porta,0
goto cek_tombol_start
start_on
bsf portb,1 ; led atau relay on
call display_line2b ; mesin bekerja
cek_tombol_stop
btfsc porta,4
goto cek_tombol_stop
stop_on
bcf portb,1 ; led atau relay off
call display_line2c ; mesin berhenti
goto cek_tombol_start
;————————————————————
display_line1
bcf porta,1 ;E line low
bcf porta,2 ;RS line low, set up for control
call del_125 ;delay 125 microseconds
movlw 0×80 ;control word = address first half
call send
bsf porta,2 ;RS=1, set up for data
call del_125 ;delay 125 microseconds
movlw ‘M’ ;define character
call send
movlw ‘E’
call send
movlw ‘S’
call send
movlw ‘I’
call send
movlw ‘N’
call send
movlw ‘ ‘
call send
movlw ‘K’
call send
movlw ‘O’
call send
movlw ‘N’
call send
movlw ‘T’
call send
movlw ‘R’
call send
movlw ‘O’
call send
movlw ‘L’
call send
movlw ‘J’
call send
movlw ‘I’
call send
movlw ‘G’
call send
return
display_line2
bcf porta,1
bcf porta,2
call del_125
movlw 0xC0
call send
bsf porta,2
call del_125
movlw ‘P’
call send
movlw ‘T’
call send
movlw ‘ ‘
call send
movlw ‘V’
call send
movlw ‘O’
call send
movlw ‘L’
call send
movlw ‘E’
call send
movlw ‘X’
call send
movlw ‘ ‘
call send
movlw ‘I’
call send
movlw ‘ ‘
call send
movlw ‘N’
call send
movlw ‘ ‘
call send
movlw ‘D’
call send
movlw ‘ ‘
call send
return
display_line2a
bcf porta,1
bcf porta,2
call del_125
movlw 0xC0
call send
bsf porta,2
call del_125
movlw ‘S’
call send
movlw ‘T’
call send
movlw ‘A’
call send
movlw ‘R’
call send
movlw ‘T’
call send
movlw ‘ ‘
call send
movlw ‘ ‘
call send
movlw ‘ ‘
call send
movlw ‘ ‘
call send
movlw ‘ ‘
call send
movlw ‘ ‘
call send
movlw ‘S’
call send
movlw ‘T’
call send
movlw ‘O’
call send
movlw ‘P’
call send
return
display_line2b
bcf porta,1
bcf porta,2
call del_125
movlw 0xC0
call send
bsf porta,2
call del_125
movlw ‘M’
call send
movlw ‘E’
call send
movlw ‘S’
call send
movlw ‘I’
call send
movlw ‘N’
call send
movlw ‘ ‘
call send
movlw ‘ ‘
call send
movlw ‘ ‘
call send
movlw ‘B’
call send
movlw ‘E’
call send
movlw ‘K’
call send
movlw ‘E’
call send
movlw ‘R’
call send
movlw ‘J’
call send
movlw ‘A’
call send
return
display_line2c
bcf porta,1
bcf porta,2
call del_125
movlw 0xC0
call send
bsf porta,2
call del_125
movlw ‘M’
call send
movlw ‘E’
call send
movlw ‘S’
call send
movlw ‘I’
call send
movlw ‘N’
call send
movlw ‘ ‘
call send
movlw ‘ ‘
call send
movlw ‘B’
call send
movlw ‘E’
call send
movlw ‘R’
call send
movlw ‘H’
call send
movlw ‘E’
call send
movlw ‘N’
call send
movlw ‘T’
call send
movlw ‘I’
call send
return
;————————————————————
initlcd bcf porta,1 ;E line low
bcf porta,2 ;RS line low, set up for control
call del_125 ;delay 125 microseconds
movlw 0×38 ;8-bit, 5X7 mode
movwf bits ;0011 1000
call flipbit ;output 4 MS bits (LS not used)
call pulse ;send bits
call del_125 ;delay
movlw 0×28 ;4-bit, 5×7 mode
movwf bits ;0010 1000
call flipbit ;output 4 MS bits (LS not used)
call pulse ;get into 4-bit mode
call del_125
movlw 0×28 ;4-bit, 5×7 mode
call send ;send both nybbles
movlw 0x0c ;display on, no cursor
call send
movlw 0×01 ;clear display
call send
call del_5 ;delay 5 milliseconds
return
;————————————————————
send movwf bits
call flipbit
call pulse
swapf bits,f ;swap MS and LS nybbles
call flipbit ;output what was LS nybble
call pulse
call del_125
return
;————————————————————
flipbit bcf portb,4 ;default
btfsc bits,4 ;test bit in “bits”
bsf portb,4 ;bit in “bits” set
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 ;approx 42×3 cycles (decimal)
movwf count1 ;load counter
repeat decfsz count1,f ;decrement counter
goto repeat ;not 0
return ;counter 0, ends delay
;————————————————————
del_5 movlw 0×29 ;decimal 40
movwf count2 ;to counter
delay call del_125 ;delay 125 microseconds
decfsz count2,f ;do it 40 times = 5 milliseconds
goto delay
return ;counter 0, ends delay
;————————————————————
pulse bsf porta,1 ;pulse E line
nop ;delay
bcf porta,1
return
delay2s
movlw .167 ; 1 set number of repetitions (C)
movwf PDel0 ; 1 |
PLoop0 movlw .41 ; 1 set number of repetitions (B)
movwf PDel1 ; 1 |
PLoop1 movlw .72 ; 1 set number of repetitions (A)
movwf PDel2 ; 1 |
PLoop2 clrwdt ; 1 clear watchdog
decfsz PDel2, 1 ; 1 + (1) is the time over? (A)
goto PLoop2 ; 2 no, loop
decfsz PDel1, 1 ; 1 + (1) is the time over? (B)
goto PLoop1 ; 2 no, loop
decfsz PDel0, 1 ; 1 + (1) is the time over? (C)
goto PLoop0 ; 2 no, loop
PDelL1 goto PDelL2 ; 2 cycles delay
PDelL2 clrwdt ; 1 cycle delay
return ; 2+2 Done
;————————————————————
end
;————————————————–
.png)
.png)
.png)
.png)
0 comments:
Posting Komentar