Pages - Menu

Sabtu, 07 April 2012

MEMBUAT ALAT PENGONTROL JIG DENGAN MIKROKONTROLER PIC16F84/A


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.

Rangkaian Pengontrol JIG

Gambar 1 Rangkaian pengontrol JIG
            Rangkaian pengontrol JIG dapat dibuat sendiri dengan menggunakan PCB lubang. Namun untuk lebih mudahnya kita dapat menggunakan DT-Proto 18 pin PIC. Dengan menggunakan DT-Proto 18 pin PIC, maka kita tinggal memasang saklar push on dan relay pada pcb lubang yang sudah disediakan.
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”.

Prototype JIG
Gambar 2  Prototipe alat
Port-port pada mikrokontroler yang bebas dapat dipakai untuk I/O ( Input / Output ) adalah sebagai berikut.
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
;————————————————–

Tidak ada komentar:

Posting Komentar