Translate

Mengendalikan Keluaran Relay Dengan PC Pada Seri Mikrokontroler AT89



Aku masih ingat ketika kuliah dulu dan sedang mengambil mata kuliah mikroprosesor. Saat itu aku mempelajari tentang arsitektur mikroprosesor. Sebagai orang yang baru belajar tentu senang sekali melihat apa saja yang ada di dalam sebuah mikroprosesor. Arsitektur sebuah mikroprosesor sederhana di dalamnya memiliki pencacah program, matriks kendali, register dan akumulator (ALU, arithmetic logic unit). Beberapa mikroprosesor seperti Z80 dari Zilog, 8080, 8085 dan lain-lain memberikan pengalaman dan pengertian tentang sebuah sistem mikroprosesor.

Sebuah mikroprosesor tidak dapat berdiri sendiri, ia membutuhkan peranti lainnya untuk dapat berfungsi yaitu ROM (read only memory) untuk menyimpan program dan data, RAM (random access memory) untuk menyimpan data dan hasil proses serta peranti I/O untuk berinteraksi dengan perangkat lainnya di luar sistem mikroprosesor itu sendiri. Bayangkan! Contoh sederhana yang pernah aku buat adalah sistem minimum mikroprosesor 8085 di mana untuk melengkapinya dengan gerbang I/O menggunakan sebuah PPI (programmable Peripheral Interface) 8255 dan ketika menginginkan sistem dapat berkomunikasi secara serial menggunakan USART (universal synchronous asynchronous receiver transmitter) 8251.

Sebagai gambaran saja, untuk membuat sistem minimum seperti di atas setidaknya kita memerlukan 5 komponen utama seperti uP 8085, E2PROM 2864, SRAM 6264, PP1 8255 dan USART 8251. Belum 3 komponen pendukungnya seperti 74LS373, 74LS245 dan 74LS139. Total ada 8 komponen belum termasuk regulator dan komponen lainnya seperti resistor, kapasitor, kristal dan diode. Tapi seru juga sih....

Sekarang sudah banyak mikrokontroler yang bisa menggantikan sistem minimum seperti di atas. Ambil contoh adalah seri AT89 bahkan memiliki gerbang I/O lebih banyak jika menggunakan AT8951.

Wah jadi membahas masa lalu ya. Sekarang kita kembali ke topik bahasan membuat perangkat keluaran relay yang dapat dikendalikan menggunakan PC. Pada tulisan yang lalu mengenai pewaktu 8 saluran ada sedikit fitur yang diselipkan agar keluaran relaynya dapat dikendalikan dengan PC. Namun agar lebih segar maka aku buatkan lagi dengan AT89C2051 seperti gambar berikut:



Rangkaian di atas diperlukan sebagai langkah awal persiapan perangkat keras meski tidak memperlihatkan komponen relaynya. Keluaran ULN2803 dapat digunakan untuk keperluan apa saja tidak harus relay.

Setelah rangkaian siap, masukkan program berikut ini ke mikrokontroler AT89C2051 agar simulasi keluaran yang dikendalikan melalui PC dapat dijalankan.

$mod51

BufSerial   data  8h
RegStack    data  10h
SerialSiap  bit   p3.7

org   0h

Inisialisasi:
      mov   sp, #RegStack-1
      mov   pcon, #0
      mov   scon, #50h
      mov   tmod, #20h
      mov   ie, #90h
      mov   tl1, #0fdh
      mov   th1, #0fdh
      setb  tr1
      ajmp  Mulai

org   23h
      jnb   ri, $
      clr   ri
      mov   a, sbuf
      cjne  a, #'<', ProsesSerial
      mov   r0, #BufSerial
      reti

ProsesSerial:
      cjne  a, #'>', PeriksaSerial
      cjne  r0, #BufSerial+8, ResetSerial
      clr   SerialSiap
      reti

ResetSerial:
      mov   r0, #0
      reti

PeriksaSerial:
      cjne  r0, #0, SimpanSerial
      reti

SimpanSerial:
      mov   @r0, a
      inc   r0
      reti

Mulai:
      jb    SerialSiap, $
      mov   r0, #BufSerial
      mov   r1, #8

      ProsesKeluaran:
            mov   a, @r0
            cjne  a, #'0', Logika1
            clr   c
            ajmp  GeserKeluaran

      Logika1:
            cjne  a, #'1', SalahKarakter
            setb  c

      GeserKeluaran:
            rlc   a
            inc   r0
            djnz  r1, ProsesKeluaran
            mov   p1, a

      SalahKarakter:
            mov   r0, #0
            setb  SerialSiap
            ajmp  Inisialisasi
end

Nah, langkah persiapan perangkat keras dan lunak untuk kemudi keluaran sudah selesai. Saatnya membuat aplikasi berbasis Visual Basic untuk dioperasikan pada PC. Setelah aplikasi Visual Basic siap ikuti langkah berikut untuk pembuatan aplikasinya. Kita akan membuat tampilan aplikasi seperti berikut ini:



Pertama kita akan menamai pekerjaan ini dengan prjRelay. Selanjutnya untuk form yang dibuat akan dinamai frmRelay dengan property caption “Simulasi Remote Relay”. Untuk BorderStyle dipiliah 1 – Fixed Single. Setelah form selesai selanjutnya kita akan mengisinya dengan beberapa obyek dan tool.

Tambahkan obyek CommandButton untuk perintah ON dalam bentuk array sebanyak 8 buah untuk masing-masing relay dengan nama cmdON(0) sampai dengan cmdON(7). Begitu juga dengan untuk perintah OFF sebanyak 8 buah dengan nama cmdOFF(0) sampai(7). Aplikasi juga akan dilengkapi dengan perintah untuk meng-ON-kan seluruh relay secara bersamaan dengan nama cmdAllON dan untuk meng-OFF-kan semua dengan nama cmdAllOFF. Nah untuk tombol perintah selesai.

Untuk memberikan indikator status relay dapat kita gunakan obyek shape yang dibuat secara array juga yaitu shpRelay(0) sampai shpRelay(7) dengan property shape adalah 3 – Circle.

Pada perintah semua relay ditambahkan dengan label dengan nama lblIndikator dan property caption bertuliskan “ALL” dengan property BackStyle 0 – Transparent.

Paling kanan aku secara iseng menambahkan sebuah obyek image dengan nama imgControl. Pada property Picture Sobat bisa memilih gambar apa saja bahkan foto juga bisa.

Terakhir adalah menyiapkan komponen komunikasi serial. Pada keyboard ketiklah Ctrl+T atau pilih dari menubar Project dan pilih Component untuk menampilkan jendela Components. Pilihlah pada Control dengan menandai pada Microsoft Comm Control 6.0 lalu Apply dan OK. Pada tabulasi Toolbox General akan muncul ikon bergambar telepon, dengan mouse klik 2 kali untuk menambahkan pada form kita. Sekarang kita sudah mempunyai tool MSComm1 yang mengendalikan komunikasi secara serial biarkan tetap pada property default-nya.

Setelah Option Explicit kita perlu menetapkan variabel yang akan digunakan yaitu No as Integer dan Relay as String.

Option Explicit

Dim No%, Relay$

Berikut adalah pernyataan perintah yang akan dilaksanakan pada tombol-tombol CommandButton. Untuk subrutin cmdAllON dan cmdAllOFF kita menggunakan perintah looping For – Next untuk memanipulasi seluruh tombol cmdON dan cmdOFF serta shpRelay. Sementara untuk masing-masing cmdON dan cmd OFF kita memanfaatkan indeks saja. Semua perintah nantinya akan dilaksanakan pada Sub Kirim yang dibuat.

Private Sub cmdAllOFF_Click()
    For No = 0 To 7 Step 1
        cmdON(No).Enabled = True: cmdOFF(No).Enabled = False: shpRelay(No).FillColor = vbBlack
    Next No
    Kirim
End Sub

Private Sub cmdAllON_Click()
    For No = 0 To 7 Step 1
        cmdON(No).Enabled = False: cmdOFF(No).Enabled = True: shpRelay(No).FillColor = vbGreen
    Next No
    Kirim
End Sub

Private Sub cmdOFF_Click(Index As Integer)
    cmdON(Index).Enabled = True: cmdOFF(Index).Enabled = False: shpRelay(Index).FillColor = vbBlack
    Kirim
End Sub

Private Sub cmdON_Click(Index As Integer)
    cmdON(Index).Enabled = False: cmdOFF(Index).Enabled = True: shpRelay(Index).FillColor = vbGreen
    Kirim
End Sub

Pada Private Sub Form Load kita perlu mempersiapkan kondisi awal dengan menon-aktifkan seluruh cmdOFF dan mengaktifkan gerbang serial. Pada imgKontrol aku menambahkan sebuah property ToolTipText yang akan tampil jika penunjuk mouse melintasinya.

Private Sub Form_Load()
    On Error Resume Next
    For No = 0 To 7 Step 1
        cmdOFF(No).Enabled = False
    Next No
    MSComm1.PortOpen = True
    imgKontrol.ToolTipText = "Klik di sini untuk ON dan OFF"
End Sub

Berikut adalah Sub Kirim yang dibuat yang berisi pernyataan untuk mengirim data ke perangkat secara serial. Data diawali dengan karakter “<” kemudian dilanjutkan dengan 8 karakter angka “0” atau “1” dan diakhiri dengan “>”.

Private Sub Kirim()
    On Error Resume Next
    Relay = "<"
    For No = 0 To 7 Step 1
        If shpRelay(No).FillColor = vbGreen Then
            Relay = Relay & "0"
        Else
            Relay = Relay & "1"
        End If
    Next No
    MSComm1.Output = Relay & ">"
End Sub

Nah, imgKontrol juga bisa dimanfaatkan untuk perintah togle ON dan OFF untuk seluruh relay.

Private Sub imgKontrol_Click()
    If shpRelay(0).FillColor = vbBlack Then
        cmdAllON_Click
    Else
        cmdAllOFF_Click
    End If
End Sub

Sepertinya mudah bukan? Aplikasi sederhana yang aku buat ini selain bisa dijadikan sebuah permainan dalam bentuk pengendalian keluaran relay juga bisa dimanfaatkan untuk apa saja. Jadi iseng tapi bisa dimanfaatkan.



Udah ya, makasih udah baca postingan aku. Semoga bisa bermanfaat dan jika mungkin bisa diterapkan oleh sobat semua.

Salam....

2 komentar:

  1. mas sigit q pengen bikin skema diatas, outputnya bukan relay tapi dot matrix mohon bantuannya bagaimana skematiknya kalau ada contoh sorce code nya
    q mau belajar mikrokontoler dengan hyper terminal windows
    trims atas bantuannya salam

    BalasHapus
  2. Perihal dot matrix bisa dilihat di

    http://electronicdesignportal.blogspot.com/2012/09/membuat-peraga-sederhana-dengan-led.html

    Untuk komunikasi dengan PC menggunakan hyperterminal ga masalah. Untuk perintah ke unit tinggal ketik aja langsung. Tinggal tentukan formatnya aja di proggram mikrokontroler supaya dikenali.

    BalasHapus