Dual Tone Multiple Frequency
Dual Tone Multiple Frequency
Setelah beralih ke teknologi digital, cara meminta nomor sambungan telepon tidak lagi
dengan cara memutar piringan angka tapi dengan cara memencet tombol-tombol angka.
Cara ini dikenal sebagai Touch Tone Dialing, sering juga disebut sebagai DTMF (Dual
Tone Multiple Frequency).
Gambar 1
Kombinasi nada DTMF
Beberapa pabrik membuat IC khusus untuk keperluan DTMF, diantaranya yang banyak
dijumpai adalah MC145436 buatan Motorola, MT8870, MT8880 dan MT8888 buatan
Mitel Semiconductor.
MC145436 dan MT8870 merupakan penerima DTMF, menerima sinyal dari saluran
telepon kalau ternyata sinyal yang diterima tadi merupakan kombinasi nada yang sesuai
dengan ketentuan DTMF, mengeluarkan kode biner sesuai dengan kombinasi nada
tersebut.
MT8880 dan MT8888 merupakan penerima dan pengirim DTMF, selain bisa berfungsi
sebagai penerima DTMF, bisa pula dipakai untuk membangkitkan nada DTMF sesuai
dengan angka biner yang diterimanya.
Saluran data (data bus) dan sinyal-sinyal kontrol MT8880 dirancang sesuai dengan
karakteristik mikrokontroler buatan Motorola (misalnya MC68HC11), sedangkan
MT8888 disesuaikan dengan mikrokontroler buatan Intel (termasuk AT80C51). Tapi
untuk AT89C2051 yang memang tidak punya saluran data (data bus) perbedaan kedua IC
itu tidak ada artinya, mengingat saluran data dan sinyal kontrolnya disimulasikan lewat
program.
Gambar 2
IC-IC DTMF buatan Mitel
Rangkaian penerima DTMF yang dibangun dengan AT89C2051 dan MT8870 terlihat
pada Gambar 3. AT89C2051 dilengkapi Xtal Y2 (12 MHz) ditambah kapasitor C3 dan
C4 membentuk rangkaian oscilator, dilengkapi pula dengan rangkaian reset yang
dibentuk dengan C5 dan R4, kedua rangkaian ini merupakan rangkaian baku
AT89C2051.
TOE (Tristate Ouput Enable - kaki 10 MT8870) merupakan input untuk mengatur data
di D0..D3, jika TOE=0 rangkaian output D0..D3D0..D3 tidak digabungkan
dengan jalur data peralatan lainnya, kaki TOE bisa saja dihubungkan ke ‘1’. akan
mengambang (high impedance state) sehingga data tidak bisa diambil. Jika Dalam
Gambar 3 TOE di kendalikan dengan kaki P1.6 AT89C2051.
Program untuk membaca data DTMF melalui rangkaian Gambar 3 terlihat pada Potongan
Program 1, bisa diterangkan sebagai berikut :
• Baris 1 dan 2 menyatakan hubungan kaki P1.6 dan P1.7 sesuai rangkaian Gambar 3.
• Baris 8 dipakai untuk membuang bagian Akumulator A yang tidak terpakai dan hanya
menyisakan A0..A3 sebagai data yang diterima dari MT8870.
• Baris 10 menunggu sampai nada DTMF bersangkut sudah tidak ada lagi.
03: ;
04: BacaMT8870:
11: RET
• mula-mula ditentukan dulu nilai RS0 (kaki 11) sesuai dengan register yang dipilih
• kaki R/W (kaki 9) dipakai untuk menentukan arah data, R/W=’1’ menandakan proses
pengambilan data dari MT8880 (bagian kiri Gambar 5)
• Perpindahan data antar mikrokontroler dan MT8880 terjadi pada saat sinyal PH2 (kaki
12) berubah dari ‘1’ menjadi ‘0’.
o Dalam proses pengambilan data, data bisa diambil setelah sinyal PH2 berubah dari ‘1’
ke ‘0’
o Dalam proses pengiriman data, data sudah dipersiapkan oleh mikrokontroler sebelum
sinyal PH2 berubah dari ‘1’ ke ‘0
Gambar 5
Diagram waktu pengambilan/pengiriman data dari/ke MT8880
Nilai-nilai komponen ini langsung diambil dari lembaran data (data sheet) MT8880 yang
sudah disesuaikan dengan karakteristik sinyal DTMF pada umumnya.
Jika dikehendaki, IRQ (Interrupt Request to MPU - kaki 13 MT8880) bisa dipakai
sebagai output yang menandakan MT8880 mempunyai data DTMF baru yang bisa
diambil. Dalam keadaan tidak ada nada DTMF kaki IRQ=’1’, jika sinyal yang masuk
MT8870 mengandung nada DTMF dan nada itu lamanya melebihi konstanta waktu yang
ditentukan oleh C2 dan R3, IRQ akan menjadi ‘0’ memberitahu mikrokontroler bahwa
ada data di D0..D3 (kaki 14 sampai dengan 17 MT8870) yang bisa di ambil. Sinyal
IRQ akan tetap bertahan =’0’ manakala nada DTMF masih ada. Sinyal IRQ ini biasa
dipakai sebagai sinyal ‘interupsi’ bagi mikrokontroler.
Adanya data DTMF baru bisa pula dipantau dari Register Status. Setiap kali ada data
baru bit 2 dari Register Status menjadi ‘1’, dan bit 2 akan kembali menjadi ‘0’ pada saat
mikrokontroler membaca isi Register Status.
Dalam Gambar 6 kaki IRQ MT8880 tidak dipakai, dengan demikian adanya data DTMF
baru akan dipantau dari bit 2 Register Status.
Kaki IRQ MT8880 bisa dipakai dengan cara menghubungkannya ke kaki INT0/P3.2
(kaki 6 AT89C2051, bisa juga dihubungkan ke kaki 7 – INT1/P3.3) yang digambarkan
dengan garis putus dalam Gambar 6. Dengan cara ini adanya data DTMF baru dipantau
oleh rangkaian interupsi di dalam IC AT89C2051, begitu ada data DTMF baru dari
MT8880 AT89C2051 akan menjalankan program layanan interupsi yang harus
diletakkan di memori program nomor 3.
Gambar 6
Rangkaian penerima/pengirim DTMF dengan MT8880
• Baris 1 sampai 3 dipakai untuk menyatakan hubungan kaki P1.4, P1.5 dan P1.6
sesuai dengan rangkaian Gambar 6.
• Pada semua subrutin, PH2 mula-mula dibuat =’1’ (baris 12 dan 30), dalam sub-rutin
pengiriman data setelah data yang akan dikirim ke MT8880 siap, PH2 di-‘nol’-kan di
baris 17. Dalam sub-rutin pengambilan data setelah data di ambil, PH2 di-‘nol’-kan di
baris 34.
• Di bagian awal sub-rutin AmbilDTMF, sebelum mengambil data DTMF terlebih
dulu menunggu bit 2 dari Register Status bernilai ‘1’ yang menandakan data di Register
Data adalah data yang benar (baris 20 dan 21), selama MT8880 belum menerima data
DTMF baru, AT89C2051 akan menunggu terus di kedua baris tersebut.
04: ;
05: KirimDTMF:
08: KirimKontrol:
10: KirimKe8880:
16: CLR PH2 ; PH2 dari '1' menjadi '0', data diambil MT8870
17: RET
18: ;
19: AmbilDTMF:
22: BacaDTMF:
25: ;
26: LihatStatus:
28: AmbilDari8880:
35: RET
• mula-mula ditentukan dulu nilai RS0 (kaki 11) sesuai dengan register yang dipilih
• kaki RD (kaki 12) dipakai untuk mengambil data dari MT8888, dalam keadaan normal
RD=’1’, selama proses pengambilan data RD menjadi ‘0’ dan data diambil dari MT8888
setelah RD berubah dari ‘0’ menjadi ‘1’ (bagian kiri Gambar 7)
• kaki WR (kaki 9) dipakai untuk mengirim data ke MT8888, dalam keadaan normal
WR=’1’, selama proses pengiriman data WR menjadi ‘0’ dan data akan diterima oleh
MT8888 pada saat WR berubah dari ‘0’ menjadi ‘1’ (bagian kanan Gambar 7)
Sinyal RD dan WR inilah yang membedakan MT8880 dan MT8888 (dalam
MT8880 kedua sinyal sinyal itu diganti dengan PH2 dan R/W), perbedaan ini
tidak mengakibatkan perbedaan rangkaian, tapi mengakibatkan perubahan
program pengendali.
Gambar 7
Diagram waktu pengambilan/pengiriman data dari/ke MT8888
• Baris 1 sampai 3 dipakai untuk menyatakan hubungan kaki P1.4, P1.5 dan P1.6
sesuai dengan rangkaian Gambar 6.
• KirimDTMF dan KirimKontrol bekerja dengan WR=’0’ (baris 11), setelah data
siap (baris 12 dan 13) WR di-‘satu’-kan di baris 15 agar data tersebut diambil oleh
MT8888.
• AmbilDTMF dan LihatStatus bekerja dengan RD=’0’ (baris 28), setelah data
MT8888 diambil (baris 30 dan 31) RD di-‘satu’-kan di baris 32.
04: KirimDTMF:
07: ;
08: KirimKontrol:
10: KirimKe8888:
16: RET
17: ;
18: AmbilDTMF:
21: BacaDTMF:
22: CLR RS0 ; Register Data dipilih dengan RS=0
24: ;
25: LihatStatus:
27: AmbilDari8888:
33: RET
Register Kontrol
Kapasitas Register MT8880/MT8888 hanya 4 bit, namun ada 7 hal yang diatur melalui
Register Kontrol, dengan demikian Register Kontrol dibagi menjadi dua bagian, seperti
terlihat dalam Gambar 8. Saat pertama kali menyimpan data ke Register Kontrol selalu
diterima oleh Bagian I Register Kontrol, jika RSEL (bit 3) = ‘1’ maka pengiriman data
berikutnya akan diterima oleh Bagian II Register Kontrol.
Gambar 8
Susunan bit dalam Register Kontrol
Register Status
Register Status dipakai untuk memantau keadaan dari MT8880/MT8888, kegunaan dari
masing-masing bit dalam Register Kontrol dibahas di bawah.
Gambar 9
Susunan bit dalam Register Status
• Nada DTMF dibangkitkan dan dihentikan secara manual dengan cara berikut:
o TOUT dirubah menjadi ‘1’, menunggu beberapa saat sesuai dengan periode nada
yang dikehendaki
• Nada DTMF dibangkitkan secara mode burst seperti terlihat di Gambar 10. Pemakaian
mode burst ini diatur sebagai berikut :
o Setelah nada DTMF burst dikirim, TDRE (bit 2 di Register Status) menjadi ‘1’. Jadi
sebelum mengirim nada DTMF harus menunggu sampai nilai TDRE menjadi ‘1’.
o TDRE kembali menjadi ‘0’ dengan sendirinya setelah isi Register Status dibaca.
Meskipun tidak dipakai dalam pemakaian yang sesungguhnya, nada pada kaki TONE bisa
dipilih berupa nada tunggal atau nada gabungan, hal ini diatur lewat Register Kontrol
sebagai berikut :
• Dalam pemakaian normal S/D (bit 2 di Register Kontrol bagian II) bernilai ‘0’, nada
yang dibangkitkan adalah gabungan dari 2 frekuensi standard DTMF. Kalau S/D bernilai
‘1’ maka nada yang dibangkitkan terdiri dari 1 frekuensi standard DTMF saja.
• Kalau S/D bernilai ‘1’, C/R (bit 3 di Register Kontrol bagian II) dipakai untuk
menentukan kelompok frekuensi mana yang disalurkan ke kaki TONE. C/R=’0’ maka salah
satu dari frekuensi 697 Hz, 770 Hz, 852 Hz, 941 Hz yang disalurkan, sedangkan kalau
C/R=’1’ maka salah satu dari frekuensi 1209 Hz, 1336 Hz, 1477 Hz. 1633 Hz yang
disalurkan
Keadaan di RDRF bisa diteruskan ke kaki IRQ/CP (kaki 15) sebagai sinyal permintaan
interupsi ke mikrokontroler, hal ini dilakukan dengan cara men-‘satu’-kan IRQ (bit 2 di
Register Kontrol bagian I). Dalam keadaan ini kaki IRQ/CP=’0’ kalau RDRF bernilai ‘1’
dan IRQ/CP=’1’ kalau RDRF bernilai ‘0’.
RDRF kembali menjadi ‘0’ dengan sendirinya setelah isi Register Status dibaca.
Selain dipakai untuk memantau nada DTMF, MT8880/MT8888 bisa dipakai untuk
memantau nada panggil dan nada sibuk dari saluran telepon, hal ini diatur lewat CP/DTMF
(bit 1 di Register Kontrol bagian I) sebagai berikut :
• CP/DTMF=’0’ MT8880/MT8888 menjadi pemantau nada DTMF, kaki IRQ/CP (kaki 15)
dipakai membangkitkan sinyal interupsi ke mikrokontroler.
• CP/DTMF=’1’ kaki IRQ/CP (kaki 15) akan menyalurkan gelombang kotak yang diterima
dari nada panggil dan nada sibuk.
Sebelum dipakai, dalam waktu 100 mili-detik setelah dihidupkan, keadan awal dari
MT8880/MT8888 harus diatur dulu dengan menjalankan Potongan Program 4, yang
disusun menurut petunjuk dari lembaran data MT8880/MT8888, dalam lembaran data
tersebut tidak ada penjelasan mengapa harus dipersiapkan dengan cara tersebut, tapi
maksud dari Potongan Program tersebut adalah me-‘nol’-kan isi semua register, termasuk
Register Kontrol Bagian I dan Bagian II serta Register Status.
• Data berikutnya yang dikirim ke Register Kontrol akan diterima oleh Bagian I, bukan
oleh Bagian II
• Membangkitkan nada DTMF biasa, yakni nada yang dibentuk dari campuran 2
frekuensi standar DTMF
02: CLR A
04: CLR A
Mode burst adalah mode yang dipakai dalam peralatan telepon tertentu, dalam pemakaian
umum yang dipakai adalah mode manual, sub-rutin yang dianjurkan untuk pengiriman
nada DTMF secara manual diperlihatkan dalam Potongan Program 5 yang bisa dijelaskan
sebagai berikut :
• Nomor yang akan dikirimkan sebagai nada DTMF sebelumnya sudah disimpan di
akumulator A, dan nada ini dibangkitkan di baris 1. Sesuai dengan keadaan awal yang
diatur dengan Potongan Program 4 saat ini Kaki TONE (kaki 8) tidak menyalurkan nada.
• Kaki TONE akan menyalurkan nada selama WaktuTunda (baris 5), besarnya waktu tunda
tergantung pada keperluan, bisa sekitar setengah detik.
01: KirimNadaDTMF:
03: MOV A,#01 ; kalau bekerja dengan mode IRQ : MOV A,#%0101
06: MOV A,#00 ; kalau bekerja dengan mode IRQ : MOV A,#%0100
09: RET
Menerima data DTMF dengan mekanisme interupsi
• Kaki IRQ MT8880 dihubungkan ke kaki INT0/P3.2 (digambarkan dengan garis putus
dalam Gambar 6).
• Mengaktipkan mekanisme interupsi lewat kaki INT0/P3.2 dengan instruksi SETB EX0
dan instruksi SETB EA, kedua instruksi ini dijalankan pada awal program setelah
AT89C2051 di-reset.
• Dengan dua persiapan di atas, data DTMF baru di MT8880/MT8888 dipantau oleh
rangkaian interupsi di dalam IC AT89C2051, begitu ada data DTMF baru AT89C2051
akan menjalankan program layanan interupsi yang harus diletakkan di memori program
nomor 3 (baris 1 Potongan Program 6).
• Rutin layanan interupsi INT0 yang sesungguhnya terlihat pada Potongan Program 7.
Rutin ini bisa diletakkan dimana saja, sehingga dalam Potongan Program 7 tidak
diperlukan instruksi ORG. Sebagai rutin layanan interupsi, Potongan Program 7 diakhiri
dengan instruksi RETI (baris 12).
• Hasil pembacaan data DTMF disimpan di memori data yang dinamakan sebagai
PenampungDTMF (baris 9), pemakaian memori data ini dipersiapkan di baris 2.
01: .data
02: PenampungDTMF DS 1
03: .code
04: MelayaniINT0:
06: PUSH A
08: LCALL BacaDTMF ; Ambil data DTMF tanpa lihat Reg Status
12: RETI