12 Oktober 2008

Anti Interlokal & Pemantau nada 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 dari artikel Teknik Interface (3) - Dual Tone Multiple Frequency.

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

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

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


Powered by: Budhy Sutanto dari alds.stts.edu

Ikuti Blog ini

Langganan

Mau dapet Update-an Blog ini lewat e-mail? Masukkin aja alamat Email kamu disini:

Dikirim Oleh FeedBurner