DUAL TONE MULTI FREKUENSI
Oleh: Budhy Susanto
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).
Dual Tone Multiple Frequency (DTMF) adalah
teknik mengirimkan angka-angka pembentuk nomor telpon yang di-kode-kan dengan 2
nada yang dipilih dari 8 buah frekuensi yang sudah ditentukan. 8 frekuensi
tersebut adalah 697 Hz, 770 Hz, 852 Hz, 941 Hz, 1209 Hz, 1336 Hz, 1477 Hz dan
1633 Hz, seperti terlihat dalam Gambar 1 angka 1 di-kode-kan dengan 697 Hz dan
1209 Hz, angka 9 di-kode-kan dengan 852 Hz dan 1477 Hz. Kombinasi dari 8
frekuensi tersebut bisa dipakai untuk meng-kode-kan 16 tanda, tapi pada pesawat
telepon biasanya tombol A B C dan D tidak dipakai.

Gambar 1 Kombinasi nada DTMF
Teknik DTMF meskipun mempunyai banyak
keunggulan dibanding dengan cara memutar piringan angka, tapi secara tehnis
lebih sulit diselesaikan. Alat pengirim kode DTMF merupakan 8 rangkaian
oscilator yang masing-masing membangkitkan frekuensi aneh di atas, ditambah
dengan rangkaian pencampur frekuensi untuk mengirimkan 2 nada yang terpilih.
Sedangkan penerima kode DTMF lebih rumit lagi, dibentuk dari 8 buah filter yang
tidak sederhana dan rangkaian tambahan lainnya.
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
Penerima DTMF dengan MT8870
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.
MT8870 dilengkapi dengan Xtal Y1 (3.579545
MHz), C2 dan R3 dipakai untuk menentukan waktu minimal untuk mengenali nada DTMF
yang diterima, rangkaian penguat sinyal DTMF dibentuk dengan R1, C1 dan R2.
Nilai-nilai komponen ini langsung diambil dari lembaran data (data sheet) MT8870
yang sudah disesuaikan dengan karakteristik sinyal DTMF pada umumnya.

Gambar 3 Rangkaian penerima DTMF dengan
MT8870
StD (Delayed
Steering - kaki 15 MT8870) merupakan output yang menandakan MT8870 mempunyai
data DTMF baru yang bisa diambil. Saat tidak ada nada DTMF kaki
StD=0, jika
sinyal yang masuk MT8870 mengandung nada DTMF dan nada itu lamanya melebihi
konstanta waktu yang ditentukan oleh C2 dan R3,
StD akan
menjadi 1 memberitahu AT89C2051 bahwa ada data di
D0..D3 (kaki
11 sampai dengan 14 MT8870) yang bisa di ambil. Sinyal
StD akan
tetap bertahan =1 manakala nada DTMF masih ada. Dalam Gambar 3
StD dipantau
lewat kaki P1.7
AT89C2051.
TOE (Tristate
Ouput Enable - kaki 10 MT8870) merupakan input untuk mengatur data di
D0..D3, jika
TOE=0
rangkaian output
D0..D3 akan mengambang (high impedance state) sehingga data tidak
bisa diambil. Jika
D0..D3 tidak digabungkan dengan jalur data peralatan lainnya, kaki
TOE bisa saja
dihubungkan ke 1. 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.
·
Selama sinyal
NEWDATA masih
0 AT89C2051 akan menunggu di baris 5
·
Lolos dari baris 5 (berarti kaki
StD MT8870
sudah 1), dibuat RD=1
(kaki TOE
MT8870)
agar
D0..D3
MT8870 tidak mengambang dan data MT8870 diambil melalui instruksi baris 7.
·
Baris 8 dipakai untuk membuang bagian Akumulator A yang tidak
terpakai dan hanya
menyisakan
A0..A3
sebagai data yang diterima dari MT8870.
·
Baris 9 kembali me-nol-kan kaki
TOE MT8870
agar D0..D3
mengambang kembali.
·
Baris 10 menunggu sampai nada DTMF bersangkut sudah tidak ada lagi.
Potongan Program 1 Membaca data MT8870
01: RD BIT P1.6
02: NEWDATA BIT P1.7
03: ;
04: BacaMT8870:
05: JNB NEWDATA,* ; Selama StD=0, tunggu
dulu di sini
06: SETB RD ; Aktipkan TOE MT8870
07: MOV A,P1 ; Ambil data dari MT8870
08: ANL A,#$0F ; Yang diperlukan hanya
A0..A3 saja
09: CLR RD ; Non-aktipkan TOE kembali
10: JB NEWDATA,* ; Tunggu sampai nada DTMF
sirna
11: RET
Penerima/pengirim DTMF dengan MT8880
MT8880
mempunyai 2 register dengan 4 fungsi, untuk membedakan 2 register ini MT8880
dilengkapi dengan jalur alamat (address bus)
RS0. Register
pertama (RS0=0)
dinamakan sebagai Register Data, angka DTMF yang diterima MT8880 didapat
dengan cara membaca isi register ini (Receive Data Register), sedangkan angka
DTMF yang ingin dikirim disimpan di register ini (Transmit Data Register).
Register kedua (RS0=1)
dinamakan sebagai Register Kontrol/Status, tata kerja MT8880 diatur
dengan cara mengirim data ke register ini, dan keadaan MT8880 bisa dipantau
dengan cara membaca isi register ini.

Gambar 4
Register-register MT8880
Diagram
waktu proses pengambilan/pengiriman data dari/ke MT8880 terlihat di Gambar 5,
diagram waktu tersebut ditafsirkan sebagai berikut :
·
selama proses berlangsung kaki
CS (kaki 10)
harus =0
·
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)
·
R/W=0
berarti pengiriman data ke MT8880 (bagian kanan 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
Gambar 6 merupakan rangkaian penerima/pengirim
DTMF dengan MT8880 yang dikendalikan AT89C2051, rangkaian ini bisa juga dipakai
untuk IC DTMF MT8888, rangkaian tetap sama tapi program pengendalinya harus
sedikit dirubah.
AT89C2051 dilengkapi Xtal Y2 (12 MHz)
ditambah kapasitor C3 dan C4 membentuk rangkaian oscilator, dilengkapi pula
rangkaian reset yang dibentuk dengan C5 dan R4.
MT8880 dilengkapi Xtal Y1 (3.579545 MHz),
C2 dan R3 dipakai untuk menentukan waktu minimal untuk mengenali nada DTMF yang
diterima, rangkaian penguat sinyal DTMF dibentuk dengan R1, C1 dan R2. Nada
DTMF dikeluarkan dari kaki
TONE (kaki
8), C4, R6 dan C6 yang terhubung ke kaki ini membentuk rangkaian filter
sederhana.
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
Program untuk mengendalikan MT8880 melalui
rangkaian Gambar 6 terlihat pada Potongan Program 2.
·
Baris 1 sampai 3 dipakai untuk menyatakan hubungan kaki
P1.4,
P1.5
dan
P1.6 sesuai
dengan rangkaian Gambar 6.
·
Sesuai dengan fungsi-fungsi register di dalam IC MT8880, program
pengendali MT8880 ini terdiri atas 4 buah sub-rutin yang masing-masing dinamakan
sebagai KirimDTMF,
AmbilDTMF,
KirimKontrol
dan LihatStatus,
kegunaan masing-masing sub-rutin sesuai dengan nama yang diberikan.
·
KirimDTMF dan
AmbilDTMF
bekerja dengan RS0=0
(baris 6 dan 23) sedangkan
KirimKontrol
dan LihatStatus
bekerja dengan RS0=1
(baris 9 dan 27).
·
KirimDTMF dan
KirimKontrol
bekerja dengan R/W=0
(baris 11) sedangkan
AmbilDTMF dan
LihatStatus
bekerja dengan R/W=1
(baris 29).
·
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.
Potongan Program 2 Mengambil/mengirim data MT8880
01: PH2 BIT P1.4
02: RS0 BIT P1.5
03: RW BIT P1.6
04: ;
05: KirimDTMF:
06: CLR RS0 ; Register Data dipilih
dengan RS=0
07: SJMP KirimKe8880
08: KirimKontrol:
09: SETB RS0 ; Register Kontrol
dipilih dengan RS=1
10: KirimKe8880:
11: CLR RW ; Data dari AT89C2051 ke
MT8880
12: SETB PH2 ; PH2 dibuat menjadi '1'
13: ANL P1,#$F0 ; Kirim A0..A3 tanpa
mengganggu A4..A7
14: ORL P1,A
15: NOP ; Tunggu sebentar
16: CLR PH2 ; PH2 dari '1' menjadi
'0', data diambil MT8870
17: RET
18: ;
19: AmbilDTMF:
20: ACALL LihatStatus ; Ada data DTMF baru di
MT8880?
21: JNB A.2,AmbilDTMF ; Tidak ada, tunggu
dulu
22: BacaDTMF:
23: CLR RS0 ; Register Data dipilih
dengan RS=0
24: SJMP AmbilDari8880
25: ;
26: LihatStatus:
27: SETB RS0 ; Register Status
dipilih dengan RS=1
28: AmbilDari8880:
29: SETB RW ; Data dari MT8880 ke
AT89C2051
30: SETB PH2 ; PH2 dibuat menjadi
'1'
31: NOP ; Tunggu sebentar
32: MOV A,P1 ; Ambil data dari
MT8880
33: ANL A,#$0F ; hanya A0..A3 saja
yang diperlukan
34: CLR PH2 ; kembalikan PH2
kekeadaan semula (='0')
35: RET
Penerima/pengirim DTMF dengan MT8888
Diagram waktu proses pengambilan/pengiriman
data dari/ke MT8888 terlihat di Gambar 7, diagram waktu tersebut ditafsirkan
sebagai berikut :
·
selama proses berlangsung kaki
CS (kaki 10)
harus =0
·
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
Program untuk mengendalikan MT8888
melalui rangkaian Gambar 6 terlihat pada Potongan Program 3.
·
Program pengendali MT8888 ini serupa dengan program pengendali
MT8880, perbedaannya terletak pada sub-rutin
AmbilDari8888
dan KirimDTMF.
·
Baris 1 sampai 3 dipakai untuk menyatakan hubungan kaki
P1.4,
P1.5 dan
P1.6 sesuai
dengan rangkaian Gambar 6.
·
Sesuai dengan fungsi-fungsi register di dalam IC MT8880, program
pengendali MT8880 ini terdiri atas 4 buah sub-rutin yang masing-masing dinamakan
sebagai KirimDTMF,
AmbilDTMF,
KirimKontrol
dan LihatStatus,
kegunaan masing-masing sub-rutin sesuai dengan nama yang diberikan.
·
KirimDTMF dan
AmbilDTMF
bekerja dengan RS0=0
(baris 5 dan 22) sedangkan
KirimKontrol
dan LihatStatus
bekerja dengan RS0=1
(baris 9 dan 26).
·
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.
·
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 MT8888 belum menerima data DTMF baru, AT89C2051 akan menunggu
terus di kedua baris tersebut.
Potongan Program 3 Mengambil/mengirim data MT8888
01: RD BIT P1.4
02: RS0 BIT P1.5
03: WR BIT P1.6
04: KirimDTMF:
05: CLR RS0 ; Register Data dipilih
dengan RS=0
06: SJMP KirimKe8880
07: ;
08: KirimKontrol:
09: SETB RS0 ; Register Kontrol
dipilih dengan RS=1
10: KirimKe8888:
11: CLR WR ; Data dari AT89C2051 ke
MT8880
12: ANL P1,#$F0 ; Kirim A0..A3 tanpa
mengganggu A4..A7
13: ORL P1,A
14: NOP ; Tunggu sebentar
15: SETB WR ; WR dari '1' menjadi
'0', data diambil MT8870
16: RET
17: ;
18: AmbilDTMF:
19: ACALL LihatStatus ; Ada data DTMF baru di
MT8880?
20: JNB A.2,AmbilDTMF ; Tidak ada, tunggu
dulu
21: BacaDTMF:
22: CLR RS0 ; Register Data dipilih
dengan RS=0
23: SJMP AmbilDari8880
24: ;
25: LihatStatus:
26: SETB RS0 ; Register Status
dipilih dengan RS=1
27: AmbilDari8888:
28: CLR RD ; Data dari MT8880 ke
AT89C2051
29: NOP ; Tunggu sebentar
30: MOV A,P1 ; Ambil data dari
MT8880
31: ANL A,#$0F ; hanya A0..A3 saja
yang diperlukan
32: SETB RD ; kembalikan RD
kekeadaan semula (='0')
33: RET
Lebih jauh tentang MT8880 dan MT8888
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.
Kegunaan dari masing-masing bit dalam Register Kontrol dibahas di bawah.

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
Pembangkit nada DTMF
MT8880/MT8888 membangkitkan nada DTMF
sesuai dengan data yang diisikan ke Transmit Data Register. Selama
TOUT (bit 0
di Register Kontrol bagian I) bernilai 1 nada DTMF yang dibangkitkan
MT8880/MT8888 disalurkan lewat kaki
TONE (kaki
8).
Ada 2 cara untuk mengirimkan nada DTMF,
·
Nada DTMF dibangkitkan dan dihentikan secara manual dengan cara
berikut:
o
Mula-mula
TOUT bernilai
0
o
Transmit Data Register diisi angka yang akan dikirimkan
o
TOUT
dirubah menjadi 1, menunggu beberapa saat sesuai dengan periode nada
yang dikehendaki
o
TOUT
kembali
di-nol-kan selama periode tanpa nada yang dikehendaki
·
Nada DTMF dibangkitkan secara mode burst seperti terlihat
di Gambar 10. Pemakaian mode burst ini diatur sebagai berikut :
o
BURST
(bit 0 di Register Kontrol bagian II) dijadikan 1
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.

Gambar 10 Nada DTMF dalam mode burst
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
Penerima nada DTMF
Rangkaian penerima nada DTMF dalam IC
MT8880/MT8888 selalu memantau sinyal yang masuk, jika sinyal tersebut mengandung
nada DTMF dan nada itu lamanya melebihi konstanta waktu yang ditentukan oleh C2
dan R3 (lihat Gambar 6), maka
RDRF (bit 2
di Register Status) akan menjadi 1.
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.
Menentukan keadaan awal
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.
Setelah menjalankan Potongan Program 4,
keadaan MT8880/MT8888 menjadi :
·
Kaki
TONE (kaki 8) tidak menyalurkan nada
·
Bekerja sebagai pemantau DTMF, bukan memantau nada
panggil/nada
sibuk
·
Kaki IRQ (kaki 15) tidak membangkitkan
sinyal permintaan
interupsi
·
Data berikutnya yang dikirim ke Register Kontrol akan diterima
oleh Bagian I, bukan oleh Bagian II
·
Bekerja dalam mode manual, bukan
mode burst
·
Berkerja secara biasa bukan dalam keadaan
TEST
·
Membangkitkan nada DTMF biasa, yakni nada yang dibentuk dari
campuran 2 frekuensi standar DTMF
Potongan Program 4 Menentukan keadaan awal MT8880/MT8888
01: ACALL LihatStatus
02: CLR A
03: ACALL KirimKontrol ; Register Kontrol I =
0000
04: CLR A
05: ACALL KirimKontrol ; Register Kontrol I =
0000
06: MOV A,#%1000
07: ACALL KirimKontrol ; Pilih Register
Kontrol II
08: CLR A
09: ACALL KirimKontrol ; Register Kontrol II
= 0000
10: ACALL LihatStatus ; Register Status =
0000
Sub-rutin pengirim nada DTMF
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.
·
Nada disalurkan ke kaki
TONE (kaki 8)
di baris 3 dan 4.
·
Kaki
TONE akan menyalurkan nada selama
WaktuTunda (baris
5), besarnya waktu tunda tergantung pada keperluan, bisa sekitar setengah detik.
·
Nada di kaki
TONE harus
dimatikan secara manual (baris 6 dan 7)
·
Sebelum meninggalan sub-rutin sekali lagi memanggil sub-rutin
WaktuTunda,
dengan maksud agar terjadi jeda waktu tanpa nada yang cukup (baris 8)
Potongan Program 5 Pengiriman nada DTMF secara manual
01: KirimNadaDTMF:
02: ACALL KirimDTMF ; Bangkitkan nada DTMF
sesuai isi Akumulator A
03: MOV A,#%0001 ; kalau bekerja dengan
mode IRQ : MOV A,#%0101
04: ACALL KirimKontrol ; Saluran nada tersebut
ke kaki TONE
05: ACALL WaktuTunda ; tunggu selama periode
yang dikehendaki
06: MOV A,#%0000 ; kalau bekerja dengan
mode IRQ : MOV A,#%0100
07: ACALL KirimKontrol ; hentikan nada di kaki
TONE
08: ACALL WaktuTunda ; tunggu selama periode
yang dikehendaki
09: RET
Menerima data DTMF dengan mekanisme interupsi
Dalam Potongan Program 2 dan Potongan
Program 3, saat mengerjakan sub-rutin
AmbilDTMF (baris
19 Potongan Program 2 atau baris 18 Potongan Program 3), AT89C2051 menunggu
RDRF (bit 2
Register Status) menjadi 1, selama tidak ada nada DTMF AT89C2051 akan berputar
terus di sini, dalam rancangan sistem tertentu keadaan ini bisa tidak menjadi
masalah, tapi dalam rancangan yang lain hal ini tidak boleh terjadi. Dalam
keadan kedua, penerimaan data DTMF tidak bisa dilakukan dengan sub-rutin
AmbilDTMF,
tapi dilakukan dengan mekanisme interupsi.
Mekanisme interupsi ini diatur dengan cara
berikut :
·
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).
·
AT89C2051 hanya menyediakan 8 byte memori program untuk melayani
interupsi INT0
(memori program nomor 3 sampai 10), karena program untuk membaca data DTMF ini
tidak mungkin diselesaikan hanya dengan 8 byte, maka rutin layanan interupsi
INT0
dialihkan ke
MelayaniINT0 (baris 2 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.
·
Proses pembacaan data DTMF yang sesungguhnya, menggunakan sub-rutin
BacaDTMF
yang merupakan bagian dari Potongan Program 2 (baris 22) dan Potongan Program 3
(baris 21), dalam sub-rutin
BacaDTMF
nilai Akumulator A
maupun Register Status
PSW akan
berubah, dengan demikian
A dan
PSW disimpan
dulu ke stack (baris 5 dan 6) dan diambil kembali dari stack (baris 10 dan 11).
Potongan Program 6 Menghubungkan Interupsi INT0 ke Rutin Layanan INT0
01: ORG 3 ; harus
diletakan di memori program no 3!
02: LJMP MelayaniINT0 ; rutin layanan
INT0 ada di MelayaniINT0
; Potongan Program 7 Rutin Layanan INT0
01: .data
02: PenampungDTMF DS 1
03: .code
04: MelayaniINT0:
05: PUSH PSW ; Simpan dulu PSW dan
A ke Stack
06: PUSH A
07: LCALL LihatStatus ; me-nol-kan isi
Register Status
08: LCALL BacaDTMF ; Ambil data DTMF
tanpa lihat Reg Status
09: MOV PenampungDTMF,A ; simpan data DTMF ke
PenampungDTMF
10: POP A ; Ambil kembali A dan
PSW dari Stack
11: POP PSW
12: RETI
Rekaman nada DTMF
Uji coba rangkaian DTMF sering-sering
merepotkan, karena harus mengambil nada DTMF dari saluran telepon, untuk
memudahkan uji coba itu bisa dipakai rekaman nada DTMF dalam format *.wav.
Rekaman tersebut berisi nama DTMF
1,2,3
0, setiap nada disuarakan selama 3 detik. Hubungkan 8880 ke output
sound card PC, kemudian file DTMFNOTE.WAV di-double-click
Pustaka
1.
MITEL Semiconductor, ISO2-CMOS
MT8870D/MT8870D-1 Integrated DTMF Receiver
2.
MITEL Semiconductor, ISO2-CMOS
MT8880C/MT8880C-1 Integrated DTMF Transceiver
3.
MITEL Semiconductor, ISO2-CMOS
MT8888C/MT8888C-1 Integrated DTMF Transceiver with Intel Micro Interface
4.
MITEL Semiconductor, Application Note
MSAN-108 Applications Of The MT8870 Integrated DTMF Receiver