Translate

Pintu Akses Sederhana Versi 1b: Menambahkan Fitur Komunikasi Serial




Saat Sobat membaca postingan ini,aku harap sobat sudah membaca postingan sebelumnya yang berjudul Membuat Pintu Akses Sederhana Versi 1 Dengan AT89C2051 DanAt93C46.

Pada kesempatan kali ini aku ingin menambahkan fasilitas komunikasi serial sesuai standar RS-232. Seperti sobat ketahui pada rangkaian sudah dilengkapi dengan rangkaian yang mendukung untuk tujuan itu. Pada postingan sebelumnya fasilitas ini belum dibahas untuk mengurangi panjang tulisan.

Sebelum kita menambahkan fasilitas komunikasi serial pada panel pintu akses, ada baiknya sobat semua memahami garis besar keuntungan yang bisa diperoleh dengan penambahan fasilitas ini, antara lain:

1.    Yang jelas panel pintu akses sederhana yang dibuat bisa terhubung ke komputer atau PC. Dengan bisa terhubung ke komputer tentu banyak hal bisa dilakukan terutama dalam hal pengoperasian yang berkaitan dengan manajemen akses.
2.    Seperti diketahui panel yang dibuat juga sudah dilengkapi dengan sakelar DIP yang berguna untuk menetapkan nomor identitas dari sebuah panel. Dengan identitas yang dapat diatur dan berbeda satu sama lain maka berarti panel yang buat dapat dihubungkan pada sebuah jaringan di mana terdiri dari beberapa panel akses sejenis dan semuanya terhubung pada sebuah system monitoring yang dikendalikan melalui system aplikasi manajemen akses yang dijalankan pada PC.
3.    Manajemen akses itu sendiri apa sih? Tentu beberapa dari sobat ada yang bertanya seperti itu. Manajemen akses adalah sebuah aplikasi yang dijalankan pada sebuah PC yang berguna untuk mengatur dan memonitoring satu atau lebih panel pintu akses. Bahkan bukan hanya panel akses saja, sebuah system manajemen akses yang kompleks memiliki kemampuan tidak saja mengelola pintu akses tetapi juga alarm system, kamera dan lain-lain sesuai kebutuhan.
4.    Berkaitan dengan panel pintu akses sederhana yang kita buat maka system manajemen akses dapat digunakan untuk mengelola panel dalam hal pemrograman kartu RFID baik menambah atau menghapus. Pengelolaan juga meliputi monitoring transaksi yaitu merekam semua aktifitas yang berkaitan dengan penggunaan sebuah panel seperti buka dan tutup pintu termasuk jika ada fasilitas alarm. Lebih dari itu system manajemen akses juga bisa mengendali panel dari jarak jauh.
5.    Mengenai manajemen akses yang dioperasikan pada PC, aku akan buatkan meski sederhana dan dibuat menggunakan Visual Basic. Tapi aku harap sobat bisa menunggu pada kesempatan postingan selanjutnya yang tentu berkaitan dengan topik pintu akses sederhana.

Nah, sekarang kita lanjutkan mengenai topik penambahan fasilitas komunikasi pada panel pintu akses sederhana yang kita buat. Penambahan ini berkaitan dengan penambahan aplikasi perangkat lunak yang akan dijalankan pada mikrokontroler karena secara hardware atau perangkat keras memang sudah tersedia namun tanpa aplikasi perangkat lunak semua itu tidaklah berfungsi.

Agar panel pintu akses sederhana kita dapat berkomunikasi maka perlu ditambahkan beberapa baris yang berkaitan dengan fasilitas komunikasi serial. Agar sobat tidak bingung di mana harus melakukan perubahan baris perintah maka aku tuliskan seluruh baris perintahnya namun aku bedakan dari warna tulisannya. Warna tulisan biru menunjukkan baris perintah yang ada pada versi sebelumnya dan warna hitam adalah perintah tambahan atau penggantinya.

$mod51

NomorUnit   data  p1
PinProgram  bit   p1.4
DIO         bit   p1.5
CLK         bit   p1.6
RST         bit   p1.7
DoorSensor  bit   p3.2
DoorExit    bit   p3.3
WiegandData0      bit   p3.4
WiegandData1      bit   p3.5
DoorRelay   bit   p3.7

DataHeksa   data  08h

Parameter di atas adalah versi terdahulu. Untuk keperluan komunikasi serial kita perlu menambahkan beberapa parameter berikut:

RegSerial   data  0dh
DataSerial  data  10h
Bendera           data  20h
      Fail              bit   Bendera.0
      BitSerial         bit   Bendera.1
      BitTambah         bit   Bendera.2
      BitHapus          bit   Bendera.3
      BitPulseOpen      bit   Bendera.4
      BitBypass         bit   Bendera.5

RegStack    data  30h

Selanjutnya untuk awal program sobat perlu menginisialisasikan beberapa register. Pada register TH1 dan TL1 ditetapkan kecepatan data serial pada 1200 bps. Kecepatan ini dipilih untuk tujuan agar kestabilan data tetap terjaga pada jarak antara panel dan PC lebih jauh.

org   0h
      mov   sp, #RegStack-1
      mov   pcon, #0
      mov   scon, #50h
      mov   tmod, #20h
      mov   tl1, #0e8h
      mov   th1, #0e8h
      mov   ie, #10h
      setb  tr1
      ajmp  AppDefault

Komunikasi serial dari PC ke Panel dimulai pada alamat perintah berikut ini:

org   23h
      push  acc
      push  b
      push  0
      push  1
      push  2
      push  dpl
      push  dph
      mov   a, sbuf
      clr   ri
      jb    BitTambah, SerialData
      jb    BitHapus, SerialData
      jb    BitSerial, KodeSerial1
      xch   a, b
      mov   a, NomorUnit
      anl   a, #0fh
      xrl   a, b
      jnz   KeluarSerial
      setb  BitSerial
      ajmp  KeluarSerial

KodeSerial1:
      cjne  a, #'A', KodeSerial2
      setb  BitTambah
      ajmp  SetSerial

KodeSerial2:
      cjne  a, #'D', KodeSerial3
      setb  BitHapus

SetSerial:
      mov   RegSerial, #DataSerial
      ajmp  KeluarSerial

KodeSerial3:
      mov   a, Bendera
      anl   a, #1
      mov   Bendera, a
      cjne  a, #'P', KodeSerial4
      setb  BitPulseOpen
      ajmp  KeluarSerial

KodeSerial4:
      cjne  a, #'B', KodeSerial5
      setb  BitBypass
      ajmp  KeluarSerial

KodeSerial5:
      cjne  a, #'U', KeluarSerial

ResetSerial:
      mov   a, Bendera
      anl   a, #1
      mov   Bendera, a

KeluarSerial:
      pop   dph
      pop   dpl
      pop   2
      pop   1
      pop   2
      pop   b
      pop   acc
      reti

SerialData:
      mov   r0, RegSerial
      mov   @r0, a
      cjne  r0, #DataSerial+2, SerialBerikut
      ajmp  ProsesSerial

SerialBerikut:
      inc   RegSerial
      ajmp  KeluarSerial

ProsesSerial:
      mov   dptr, #0
      mov   r2, #32
      jb    BitTambah, TambahKartu

HapusKartu:
      mov   r0, #DataSerial
      mov   r1, #3

HapusBerikut:
      inc   dptr
      acall AT93C46_READ
      xch   a, b
      mov   a, @r0
      inc   r0
      xrl   a, b
      jnz   Hapuskan
      djnz  r1, HapusKartu
      mov   a, dpl
      dec   a
      dec   a
      dec   a
      dec   a
      mov   dpl, a
      acall AT93C46_EWEN
      mov   a, #255
      acall AT93C46_WRITE
      acall   AT93C46_EWDS
      ajmp  ResetSerial

Hapuskan:
      inc   dptr
      djnz  r1, Hapuskan
      djnz  r2, Hapuskan
      ajmp  ResetSerial

TambahKartu:
      acall AT93C46_READ
      mov   r1, #3
      cpl   a
      jz    Tambahkan

TambahBerikut:
      inc   dptr
      djnz  r1, TambahBerikut
      inc   dptr
      djnz  r2, TambahKartu
      ajmp  ResetSerial

Tambahkan:
      acall AT93C46_EWEN
      mov   a, #9

LoopPenambahan:
      acall AT93C46_WRITE
      inc   dptr
      mov   a, @r0
      inc   r0
      djnz  r1, LoopPenambahan
      acall   AT93C46_EWDS
      ajmp  KeluarSerial


Nah, aplikasi serial dari PC ke panel selesai sampai disini. Namun beberapa bit yang mungkin aktif dalam proses di atas akan dikerjakan pada baris-baris berikut. Sementara komunikasi dari panel ke PC menggunakan subrutin KirimSerial seperti berikut ini:

KirimSerial:
      clr   ea
      mov   sbuf, a
      jnb   ti, $
      clr   ti
      setb  ea
      ret

AppDefault:
      acall ResetChip
      jnb   PinProgram, DefaultUnit
      ajmp  AppMulai

DefaultUnit:
      mov   r5, #20

Default1:
      mov   r6, #200

Default2:
      mov   r7, #250
      clr   DoorRelay

TungguPinProgram:
      jb    PinProgram, AppMulai
      djnz  r7, TungguPinProgram
      djnz  r6, Default2
      djnz  r5, Default1
      clr   DoorRelay
      jnb   PinProgram, $
      acall AT93C46_EWEN
      acall AT93C46_ERAL
      acall AT93C46_EWDS
      setb  DoorRelay

AppMulai:
      jnb   PinProgram, AppProgram
      jb    BitBypass, AppMulai
      jb    BitPulseOpen, AppBukaPintu
      jnb   DoorSensor, AppMulai
      jnb   DoorExit, AppBukaPintu
      jnb   WiegandData0, AppBacaKartu
      jnb   WiegandData1, AppBacaKartu
      ajmp  AppMulai

Pada AppMulai di atas, sobat perlu menambahkan 2 baris perintah untuk memeriksa BitBypass dan BitPulseOpen yang mungkin saja aktif pada saat terjadi interupsi serial dari PC.

SubProgram:
      clr   DoorRelay
      ajmp  AppProgram

SubBukaPintu:
      ajmp  AppBukaPintu

SubBacaKartu:
      ajmp  AppBacaKartu

AppProgram:
      jb    PinProgram, AppMulai
      jnb   WiegandData0, ProgramKartu
      jnb   WiegandData1, ProgramKartu
      ajmp  AppProgram

ProgramKartu:
      mov   r1, #DataHeksa
      acall Wiegand
      acall CekWiegand
      jnz   PrgMemori
      ajmp  AppProgram

PrgMemori:
      mov   dph, #0
      mov   dpl, #0
      mov   r7, #32

PrgIsiMemori:
      acall AT93C46_READ
      mov   r6, #3
      cpl   a
      jnz   PrgIsiMemoriBerikut
      setb  DoorRelay
      mov   r0, #DataHeksa
      acall AT93C46_EWEN
      mov   a, #9

PrgSimpanKartu:
      acall AT93C46_WRITE
      inc   dptr
      mov   a, @r0
      inc   r0
      djnz  r6, PrgSimpanKartu
      acall AT93C46_EWDS
      acall Pulsa1Detik
      ajmp  SubProgram

PrgIsiMemoriBerikut:
      inc   dptr
      djnz  r6, PrgIsiMemoriBerikut
      inc   dptr
      djnz  r7, PrgIsiMemori
      ajmp  AppProgram

AppBukaPintu:
      clr   DoorRelay
      acall Pulsa5Detik
      setb  DoorRelay
      jnb   BitPulseOpen, ResponBukaPintu
      clr   BitPulseOpen
      ajmp  AppMulai

Pada rutin AppBukaPintu juga memerlukan penambahan beberapa baris perintah untuk memeriksa dan mereset BitPulseOpen. Jika perintah membuka pintu bukan merupakan perintah dari PC maka panel akan mengirimkan informasi dengan rutin ResponBukaPintu.

ResponBukaPintu:
      mov   a, NomorUnit
      anl   a, #0fh
      acall KirimSerial
      mov   a, #'P'
      acall KirimSerial
      ajmp  AppMulai

AppBacaKartu:
      acall Wiegand
      acall CekWiegand
      jnz   BacaMemori
      ajmp  AppMulai

BacaMemori:
      mov   dph, #0
      mov   dpl, #0
      mov   r7, #32

BacaIsiMemori:
      acall AT93C46_READ
      cpl   a
      jnz   BacaMemoriBerikut
      mov   r6, #4
      ajmp  CekIsiBerikut

Pada rutin BacaIsiMemori ada perubahan sebanyak 2 baris menggantikan perintah sebelumnya AJMP AppMulai.

BacaMemoriBerikut:
      mov   r0, #DataHeksa
      mov   r6, #3

CekIsiMemori:
      inc   dptr
      acall AT93C46_READ
      xch   a, b
      mov   a, @r0
      xrl   a, b
      jnz   CekIsiBerikut
      djnz  r6, CekIsiMemori
      mov   a, NomorUnit
      anl   a, #0fh
      acall KirimSerial
      mov   a, dpl
      dec   a
      dec   a
      dec   a
      dec   a
      mov   dpl, a
      mov   r6, #4

ResponBacaKartu:
      acall AT93C46_READ
      acall KirimSerial
      inc   dptr
      djnz  r6, ResponBacaKartu
      setb  BitPulseOpen
      ajmp  AppBukaPintu

Sobat perlu menambahkan beberapa perintah di atas yang menginformasikan bahwa akses diterima. Sementara jika kartu yang digunakan ditolak juga akan diinformasikan melalui komunikasi serial ke PC dengan penambahan beberapa baris berikut:

CekIsiBerikut:
      inc   dptr
      djnz  r6, CekIsiBerikut
      djnz  r7, BacaIsiMemori
      mov   a, NomorUnit
      anl   a, #0fh
      acall KirimSerial
      mov   a, #1
      acall KirimSerial
      mov   r0, #DataHeksa
      mov   r6, #3

ResponKartuSalah:
      mov   a, @r0
      inc   r0
      acall KirimSerial
      djnz  r6, ResponKartuSalah
      ajmp  AppMulai

Pulsa5Detik:
      mov   r5, #50
      ajmp  PulsaReg6

Pulsa1Detik:
      mov   r5, #10

PulsaReg6:
      mov   r6, #200

PulsaReg7:
      mov   r7, #250
      djnz  r7, $
      djnz  r6, PulsaReg7
      djnz  r5, PulsaReg6
      ret

CekWiegand:
      mov   r0, #DataHeksa
      mov   r7, #3

CekIsiWiegand:
      mov   a, @r0
      jnz   CekWiegandOK
      inc   r0
      djnz  r7, CekIsiWiegand

CekWiegandOK:
      ret

$include (c:\tesasm\wiegand.txt)
$include (c:\tesasm\93C46_8.txt)

end

Nah, program kita sudah selesai dan panel pintu akses sederhana sudah memiliki fasilitas komunikasi serial. Banyak hal memang bisa dilakukan dengan menambah beberapa perintah kepada mikrokontroler. Dari rangkaian yang sama nanti akan aku kembangkan dengan beberapa fasilitas lain yang mungkin dapat membuat panel kita lebih bergengsi terutama dari sisi fasilitas.

Dengan panel di atas kita bisa mendapatkan fasilitas yang lebih dibandingkan dengan produk pintu akses sejenis yang ada di pasaran. Sobat boleh membandingkannya, karena aku sudah melakukan itu.

Sebagai tambahan, ada kepuasan tersendiri manakala perangkat kita bisa berfungsi dengan baik dan tahan lama meski dengan harga yang sangat murah dalam pembuatannya.

Pada kesempatan berikutnya akan aku posting-kan juga sebuah aplikasi Manajemen Akses Sederhana yang dibuat menggunakan Visual Basic.



Udah ya, makasih udah baca postingan aku. Semoga bisa bermanfaat, sukur-sukur bisa diterapkan di rumah sobat semua.

Salam....


Tidak ada komentar:

Posting Komentar