Senin, 03 Desember 2012

Block Interlokal menggunakan Detector DTMF

Melindungi telepon rumah agar tidak disalahgunakan oleh orang yang tidak berwenang, merupakan idaman semua pemilik telepon. Pada jaman telepon analog dulu banyak dijual alat anti interlokal, tapi setelah menginjak jaman telepon digital alat semacam itu justru jarang dijumpai lagi, hal ini disebabkan diperlukan tehnologi yang lebih tinggi untuk membuat alat tersebut.
Alat Anti Interlokal dan Pemantau nada DTMF ini disambungkan di antara pesawat telepon dan saluran telepon melalui konektor JP1 dan JP2. JP1 dihubungkan ke pesawat telepon dan JP2 dihubungkan ke saluran telepon dari Telekom.
Alat ini memantau sinyal yang ada di saluran telepon, nada DTMF yang ada di saluran telepon dikenali dan diubah bentuk menjadi kode biner. Kode biner yang diterima diubah menjadi kode ASCII dan ditampilkan di Tampilan LCD SED-1200, di samping itu kode biner tersebut diperiksa untuk menentukan apakah nomor telepon yang dituju adalah nomor telepon lokal, jika tidak maka hubungan antara pesawat telepon dan saluran telepon diputus.

 Gambar 1 Rangkaian Lengkap

Pembahasan rangkaian

Rangkaian alat ini terlihat di Gambar 1, ditinjau dari fungsinya bisa dibagi menjadi tiga bagian. Bagian pertama adalah AT89C2051 sebagai pusat pengendali alat, bagian kedua adalah Tampilan LCD SED-1200 sebagai penamping nomor telepon, dan bagian ketiga adalah sisa rangkaian yang berfungsi sebagai rangkaian interface saluran telepon.

Rangkaian Mikrokontroler

Bagian pertama merupakan rangkaian baku AT89C2051, rangkaian reset dibentuk dengan kapasitor C3 dan resistor R3, rangkaian oscilator dibentuk dengan kristal Y1 (12 MHz) dan kapasitor C1 dan C2. Resistor R6 (2K2) berfungsi untuk membuat kaki INT0/P3.2 (kaki 6 AT89C2051) menjadi ‘0’.

Rangkaian Tampilan LCD SED1200

Tampilan LCD SED-1200 di bagian kedua dikendalikan langsung dengan jalur-jalur Port 1 (P1.0 ..P1.7) dari AT89C2051, sebagian dari jalur-jalur ini dipakai juga untuk IC MT8870. Cara mengendalikan SED1200 sudah dibahas dalam artikel Teknik Interface (2) - Epson SED1200 LCD Module.
Dalam rangkaian ini, data mengalir dari AT89C2051 ke SED1200 dan dari MT8870 ke AT89C2051, aliran data ini semuanya melalui D0..D3 yang terhubung ke P1.0..P1.3 (kaki 12 sampai 15 AT89C2051). Jalur SELECT yang dikendalikan oleh kaki P1.5 (kaki 17 AT89C2051) untuk mengaktipkan SED1200 atau MT8870, SELECT=’0’ membuat SED1200 siap menerima data dari D0..D3, sedangkan SELECT=’1’ menghubungkan jalur data MT8870 ke D0..D3.

Rangkaian Interface Saluran Telepon

Rangkaian interface saluran telepon terdiri atas 3 bagian, yakni
· bagian penerima nada DTMF yang intinya adalah IC MT8870
· bagian pendeteksi gagang telepon dibentuk dengan diode bridge D3, Zener diode 12 V (D4), Opto Isolator ISO1 4N35 dan resistor R8,
· bagian pemutus saluran telepon dibentuk dengan resistor R9, tansistor NPN (Q1), dan relay K1 yang Normally Close (NC).
Rangkaian penerima nada DTMF dihubungkan ke saluran telepon lewat kapasitor C4, hal ini dimaksud untuk membendung arus searah dan hanya arus bolak-balik saja yang masuk ke MT8870. Zener Diode D1 dan D2 berfungsi untuk membatasi sinyal bolak balik yang masuk tidak lebih dari ± 3.3 Volt, mengingat sinyal bel merupakan sinyal bolak-balik yang amplitudonya puluhan Volt dan bisa merusak MT8870. Resistor R4 dan R5 dipakai untuk menentukan penguatan sinyal, karena kedua resistor ini nilainya sama (100 Kohm) maka faktor penguatannya 1. Konstanta waktu yang ditentukan dengan C5 dan R7Y2 (3.579545 MHz) dipakai sebagai pembentuk frekuensi standar untuk mengenali frekuensi-frekuensi DTMF. dipakai untuk menentukan waktu minimum nada DTMF sebelum nada itu dikenali sebagai nada DTMF yang benar. Kristal
Cara kerja MT8870 bisa dipelajari di Datasheet MT8870.
Rangkaian pendeteksi gagang telepon mendeteksi letak gagang telepon. Rangkaian ini dihubungkan langsung ke saluran telepon mengingat rangkaian ini tugasnya memantau tegangan searah di saluran telepon. Saat gagang telepon tidak diangkat tegangan searah di saluran telepon bisa mencapat 48 Volt, tegangan tersebut turun menjadi sekitar 6 Volt begitu gagang telepon diangkat.
Dipakai diode bridge untuk memudahkan pemasangan kabel antara alat ini dan sistem telepon (kabel bisa dipasang terbalik), diode Zener 12 V (D4) dipakai untuk mendeteksi tegangan searah, saat gagang telepon diangkat tegangan saluran yang hanya sekitar 6 Volt tidak akan mampu menembus diode Zener yang dipasang secara berlawanan arah, sehingga tidak ada arus yang mengalir melalui diode di dalam Opto Isolator 4N35 (ISO1) akibatnya transistor dalam ISO1 tidak mengalirkan arus dan tegangan di kaki INT0/P3.2 (kaki 6 AT89C2051) menjadi ‘0’ lewat tahanan R6. Tegangan saluran telepon yang 48 Volt pada saat gagang tidak diangkat akan mengakibatkan transistor dalam ISO1 mengalirkan arus dan tegangan di kaki INT0/P3.2 menjadi ‘1’.
Saat gagang telepon diangkat, tegangan INT0/P3.2 berubah dari ‘1’ menjadi ‘0’, perubahan tegangan ini merupakan siinyal permintaan interupsi bagi AT89C2051. Begitu menerima permintaan interupsi ini AT89C2051 akan menjalankan program layanan interupsi yang harus diletakkan di memori program nomor 3.
Rangkaian pemutus saluran telepon merupakan rangkaian relay yang dikendalikan dengan P3.1 (kaki 3 AT89C2051), relay yang dipakai adalah relay normally close (NC), yakni kontak relay sudah terhubung meskipun kumparannya tidak dialiri arus, saat P3.11’ transistor NPN (Q1) akan mengalirkan arus kumparan relay sehingga kontak relay terlepas dan saluran telepon terputus. menjadi ‘

Pembahasan alat

Di samping rangkaian di atas, kerja alat ini sepenuhnya ditangani dengan perangkat lunak, Gambar 2 memperlihatkan diagram alir program yang membentuk alat ini.
Terlihat dari Gambar 2, pada alat kecil ini sesungguhnya bekerja dua buah program yang berlainan, program pertama (bagian kiri dari gambar) merupakan program utama, program ini dijalankan begitu AT89C2051 mendapat catu daya dan bekerja terus tanpa henti. Program yang kedua adalah program layanan interupsi INT0 (bagian kanan dari gambar), program ini dijalankan pada saat gagang telepon diangkat, setelah selesai mengerjakan program ini AT89C2051 akan kembali mengerjakan program utama.
Gambar 2 Diagram alir
 Persiapan
Bagian pertama dari program utama merupakan Persiapan,
· pertama-tama relay dimatikan untuk menjamin saluran telepon tidak diputus oleh alat ini (baris 2 Potongan Program 1)
· diatur tata kerja SED1200 dan menghapus layar tampilan LCD (baris 3)
· setelah itu AT89C2051 sendiri diatur agar bisa menerima permintaan interupsi dari INT0, sehingga begitu gagang telepon diangkat AT89C2051 bisa menanggapinya dengan program layanan interupsi di memori program nomor 3
o mekanis permintaan interupsi dari kaki INT0 diaktipkan di baris 5
o yang dianggap sebagai permintaan interupsi adalah perubahan tegangan ‘1’ menjadi ‘0’ di kaki INT0 (baris 6)
o sistem interupsi AT89C2051 diaktipkan di baris 7
Gambar 3 Proses pengambilan data DTMF dari MT8870

Potongan Program 1 Mempersiapkan tata kerja alat
01:DTMFmonitor:
02: CLR Relay ; Matikan RELAY - saluran terhubung
03: ACALL SiapkanSED1200
04:
05: SETB EX0 ; pakai interupsi INT0
06: SETB IT0 ; Falling edge triggered
07: SETB EA ; aktipkan sistem interupsi AT89C2051

Baca data DTMF

Berikutnya alat ini menunggu angka dari tombol telepon yang dipencet, selama tidak ada nada DTMF ATM89C2051 akan menunggu terus di sini, memang pada saat ini tidak ada pekerjaan lain yang perlu dilakukan.
· Baris 2 Potongan Program 2 dipakai untuk menghubungkan ‘jalur data’ P1.0..P1.3 ke saluran data MT8870 D0..D7, dan melepas hubungannya ke SED1200
· Proses pengambilan data DTMF dari MT8870 digambarkan di Gambar 3, hal ini dimaksud agar AT89C2051 hanya satu kali saja mengambil dari MT8870 setiap kali ada tombol yang dipencet
o Pada saat tidak ada tombol dipencet kaki StD dari MT8870 yang terhubung ke P3.7 AT89C2051 (sinyal ini dinamakan sebagai NewData) =’0’. AT89C2051 menunggu ada tombol yang dipencet dengan instruksi JNB NewData,* (baris 3), artinya selama P.3.7 masih =’0’ AT89C2051 yang berputar terus di baris 3.
o Setelah ada data DTMF baru, Port 1 dipastikan menjadi input (baris 4) dan data dari MT8870 diambil di baris 5, karena yang dipakai hanya data dari P1.0..P1.3 maka bagian yang dipakai dibuang di baris 6.
o Untuk memastikan data dari MT8870 hanya diambil satu kali saja, AT89C2051 menunggu sinyal NewData menjadi ‘0’ dengan instruksi JB NewData,* di baris 7.

Gambar 3 Proses pengambilan data DTMF dari MT8870
Potongan Program 2 Menunggu tombol angka telepon dipencet
01:BacaMT8870:
02: SETB SELECT ; MT8870 yang aktip, SED1200 non aktip
03: JNB NewData,* ; Selama StD='0', tunggu dulu di sini
04: MOV P1,#$FF ; Membuat Port 1 menjadi input
05: MOV A,P1 ; Ambil data dari MT8870
06: ANL A,#$0F ; Yang diperlukan hanya A0..A3 saja
07: JB NewData,* ; Tunggu sampai nada DTMF sirna

Menyimpan dan menampilkan angka

Angka yang diterima dari MT8870 ditampung dulu di PanampungPanampung ditampilkan ke SED-1200, hal ini digambarkan dalam Gambar 4. Mengingat SED1200 bisa menampilkan 20 huruf/angka maka kapasitas Penampung dibuat 20 byte (Potongan Program 3). yang dibentuk di RAM, kemudian seluruh isi
· Assembler Directive (Pengatur Kerja Assember) .data (baris 1) menyatakan baris-baris berikut adalah variabel yang akan disimpan di RAM
· Baris 2 menyatakan Ram yang dipakai mulai nomor $30 (heksadesimal 30)
· Assembler Directive (Pengatur Kerja Assember) ds (baris 3) menyatakan Penampung adalah variabel yang membutuhkan tempat sebesar 20 byte
Gambar 4 Nomor telepon ditampung dan ditampilkan bersama ke SED1200

Gambar 4 Nomor telepon ditampung dan ditampilkan bersama ke SED1200
Potongan Program 3 Membentuk Memori Penampung sebanyak 20 byte
01: .data ; berikut ini dibentuk di RAM
02: ORG $30 ; mulai dari memori nomor $30
03:Penampung DS 20 ; sediakan 20 byte untuk Panampung
Tampilan angka di SED1200 dibuat seperti tampilan angka di kalkulator, yakni sebelum menampilkan satu angka baru, angka-angka lama di tampilan digeser dulu satu posisi ke kiri, setelah itu angka baru diisikan di posisi paling kanan seperti digambarkan di Gambar 5. Proses ini dilakukan dengan Potongan Program 4 :
· Di baris 2 isi akumulator A yang berisi angka baru dari MT8870 disimpan dulu ke R6, karena dalam baris-baris berikutnya A akan aktip dipakai.
· R0 dan R1 dipakai sebagai register indirect untuk mengalamati angka-angka yang digeser ke kiri. Dibaris 3 dan 4, R0 diisi dengan alamat byte pertama dari Penampung, dan R1 diisi dengan alamat byte kedua dari Penampung.
· Jumlah byte yang dipindahkan sebanyak 19, hal ini diatur di baris 5 dan baris 11
· Pemindahan data dilakukan di baris 7 sampai dengan baris 9
· Tadi yang disimpan di R6 dikembalikan ke A (baris 13) dan dijadikan ASCII di baris 14 kemudian di baris 15 disimpan ke posisi paling kanan
Isi Penampung secara keseluruhan ditampilkan ke LCD di baris 16
 
Gambar 5 Cara menyimpan angka baru

Potongan Program 4 Penyimpanan angka baru dan ditampilkan ke LCD
01:IsikanAngka:
02: MOV R6,A ; Simpan dulu angka yang didapat
03: MOV R1,#Penampung+1 ; data di Penampung+1
04: MOV R0,#Penampung ; akan dipindahkan ke Penampung+0
05: MOV R7,#19 ; digeser 19 kali
06:Pindah:
07: MOV A,@R1 ; Ambil data
08: MOV @R0,A ; Simpan ke posisi sebelumnya
09: INC R0 ; alamat berikutnya
10: INC R1
11: DJNZ R7,Pindah ; sudah 19 kali? Belum pindah lagi
12:
13: MOV A,R6 ; ambil kembali angka yang didapat
14: ADD A,#$30 ; jadikan kode ASCII
15: MOV @R0,A ; simpan ke posisi paling kanan
16: ACALL TampilkanPenampung

Memeriksa nomor telepon interlokal

Tugas program berikutnya adalah mengenali apakah nomor pembicaraan yang diminta adalah nomor telepon lokal, jika nomor lokal maka AT89C2051 meneruskan tugas menunggu tombol nomor telepon dipencet, jika ternyata nomor telepon interlokal maka relay normally close diaktipkan dan saluran telepon diputus, setelah itu progam kembali mengerjakan program dari bagian paling awal.
Nomor telepon lokal atau bukan dibedakan dengan jumlah digit yang dipencet, jika ditekan lebih dari 7 digit dianggap sebagai nomor interlokal. Untuk keperluan ini dipakai bantuan dari variabel Counter. Potongasn Program 5 dijelaskan sebagai berikut :
· Setiap ada angka baru, nilai Counter dinaikkan satu (baris 1)
· Kalau nilai counter masih <7>A masih <7.
· Program masuk ke baris 7 kalau ternyata nomor yang diminta adalah nomor interlokal, saat itu relay diaktipkan sehingga saluran telepon putus. Untuk memastikan hubungan ke kantor telepon benar-benar sudah terputus relay diaktipkan sekitar 2 detik lamanya, waktu tunggu 2 detik ini ditentukan di baris 7 sampai 13.
· Setelah itu AT89C2051 diarahkan menjalakan DTMFmonitor, yakni bagian pertama dari program setelah reset.
Potongan Program 5 Memeriksa nomor telpon, apakah nomor lokal?
01: INC Counter ; tambah lagi satu angka dipencet
02: MOV A,Counter
03: CJNE A,#8,*+3 ; sudah 8 digit?
04: JC BacaMT8870 ; belum, bukan nomor interlokal
05:;
06: SETB Relay ; aktipkan relay, saluran terputus
07: MOV R5,#20
08: MOV R6,#0
09: MOV R7,#0
10:Sebentar:
11: DJNZ R7,Sebentar
12: DJNZ R6,Sebentar
13: DJNZ R5,Sebentar
14: SJMP DTMFmonitor ; kembali seperti saat RESET

Rutin layanan interupsi INT0

Begitu gagang telepon diangkat, AT89C2051 akan menanggapi dengan rutin layanan interupsi INT0 di memori program nomor 3, seperti terlihat di Potongan Program 6.
· Baris 1 meletakkan rutin layanan interupsi ini di memori program nomor 3, yakni tempat yang disediakan untuk rutin layanan interupsi INT0.
· Baris 2 memanggil sub-rutin HapusDisplay yang bertugas menghapus isi Penampung dan me-‘nol’-kan Counter.
· Setelah menjadikan instruksi RETI di baris 3, AT89C2051 akan kembali menjalankan Program Utama.
Potongan Program 6 Rutin Layanan Interupsi INT0
01: ORG ROM+3
02: LCALL HapusDisplay ; Rutin layanan interupsi INT0
03: RETI

Created by wandi



1 komentar:

  1. Bos...program'y kurang jelas..
    dah ane coba tp error

    BalasHapus

free counters