|
Frekuensi Meter Menggunakan PC
(Bagian I)
Oleh: Susanto Wibisono Koselan
Frekuensi meter tidaklah harus dibeli
dengan biaya yang mahal namun dapat dibuat dengan komponen yang cukup sederhana
dengan bantuan komputer. Di dalam aplikasi ini tidak
diperlukan komputer yang canggih tetapi cukup komputer ‘jangkrik’ dengan
prosessor 80386 ke atas.
Frekuensi meter ini cukup sederhana
baik pada programnya maupun pada perangkat kerasnya. Frekuensi meter ini dapat
mengukur sinyal frekuensi audio antara 20Hz sampai 20KHz. Ketelitian alat ukur
ini cukup baik yaitu sekitar 0.5Hz.
Gambar 1 Blok
Diagram Frekuensi Meter menggunakan PC
Input sinyal merupakan input sinyal
audio yang ingin diukur frekuensinya dengan tegangan puncakmaksimunya adalah
sekitar 1.3V. Bila Tegangan puncak sinyal audio tersebut di atas 1.3V maka
akan terjadi pemotongan tegangan puncak oleh
rangkaian dioda D1 dan D2. Rangkaian ini dikatakan sebagai rangkaian ‘limiter’
yang berfungsi untuk membatasi rangkaian in dari tegangan sinyal input yang
terlalu besar. Jika menggunakan dioda dengan tipe 1N4148
maka rangkaian ini masih tahan untuk menerima tegangan sinyal audio sampai
50Vpp.
Frekuensi meter ini
akan dapat bekerja dengan baik jika komputer yang
digunakan mempunyai printer port yang bi-directional (dua arah). Pada
aplikasi ini printer port digunakan untuk menerima
data dari oktal 3 state buffer 74LS541. Data yan diterima merupakan data binary
dari 7 stage ripple counter 4024.
Proses Kerja Sistem
Pada dasarnya prinsip kerja dari
frekuensi meter adalah menghitung jumlah pulsa yang
masuk ke dalam sebuah counter dalam selang waktu tertentu.
Di dalam sistem ini pulsa dihitung selama dua detik sehingga mendapatkan
resolusi yang cukup baik pada daerah frekuensi audio. Sehingga untuk
selang waktu 2 detik tersebut akan mendapatkan
resolusi penghitungan sampai 0.5 Hz.
Rangkaian limiter
akan memotong, clipping, sinyal dengan
tegangan di atas 1.3V. Pemotongan sinyal ini tidak akan
mempengaruhi kerja sistem tetapi dapat melindungi rangkaian selanjutnya dari
tegangan berlebih. Rangkaian berikutnya adalah rangkaian ‘buffer amplifier’ yang
akan membuffer sinyal dari ‘limiter’ sehingga tidak membebani rangkaian yang
sedang dites. Pembebanan yang berlebihan pada rangkaian yang berlebihan
akan dapat menyebabkan perubahan frekuensi kerja dari
sistem yang dites atau bahkan mengacaukan sistem tersebut.
Bagian yang paling akhir sebelum
rangkaian interface ke printer port adalah rangkaian
schmitt trigger. Rangkaian in akan meningkatkan
penguatan sehingga mampu menerima sinyal yang lemah yang mempunyai tegangan
puncak 100mVpp dan menghasilkan sinyal yang baik untuk menghasilkan sebuah
pembacaan pada komputer. Rangkaian schmit ini juga membatasi level sinyal input
di mana seharusnya tidak menghasilkan suatu pembacaan. Untuk mengatur output
dari schmitt trigger ini maka output dari rangkaian schmitt trigger ini
diumpankan pada IC 4001 yang merupakan gerbang NOR 2 input. Dengan ada nya
gerbang NOR ini maka sinyal STROBE dari printer port akan aktif selama 2 detik
dan menyebabkan pulsa-pulsa diteruskan ke output gerbang NOR ini dan di-’count’
oleh 7 stage binary ripple counter.
Gambar 2
Rangkaian Audio Frekuensi Meter
Penghitung Biner
Penghitung biner ini dibentuk dari
4024, sebuah IC CMOS yang merupakan 7 stage binary ripple counter. Counter yang
digunakan harus membentuk counter 17 stage binary counter sehingga harus
menggunakan 3 buah IC 4024 yang dikaskadekan. Peng-kaskade-an counter
akan memungkinkan dibentuk sebuah counter tertentu,
dimana output MSB dari counter diumpankan ke clock counter berikutnya.
Gambar 3 Kaskade
Counter
Pada awal penghitungan, 17 stage
binary counter ini harus direset terlebih dahulu untuk memastikan bahwa nilai
awalnya adalah 00. Sinyal reset harus dibangkitkan lerlebih dahulu dari printer
port pin ‘Init’. Reset pada 7 stage binary ripple counter ini aktif
‘high’ sehingga ketika tegangan pada pin ‘init’ ini pada +5Volt maka kaskade
counter ini akan ter-‘reset’ sehingga semua outputnya ‘low’.
Gambar 4
Rangkaian Interface ke Printer Port dan 17 Stage Binary Ripple Counter
Rangkaian pada gambar 2 dan gambar
4 merupakan rangkaian secara keseluruhan dari proyek ini dimana output dari
gerbang NOR 2 input pada gambar 2 (pin pulse) akan
memberikan pulsa yang akan dihitung oleh counter sehingga harus diumpankan pada
pin clock pada counter. Sinyal ‘strobe’ dari printer port ini digunakan untuk
‘memperbolehkan’ pulsa clock dari gerbang NOR 2 input pada gambar 2 masuk ke pin
clock pada counter (gambar 4). Sinyal ‘strobe’ aktif pada
logika ‘low’. Perhatikan gambar 2, ketika ‘strobe’ low maka ketika
pin ‘in pulse’ low maka akan menghasilkan high pada output NOR
sebaliknya ketika strobe tetap low dan pin
‘in pulse’ high akan menghasilkan output low pada outputnya.
Tetapi ketika pin ‘strobe’ dalam kondisi high maka akan menghasilkan
output low walaupun pin ‘in pulse’-nya dalam kondisi
low atau high. Jadi pulsa yang dihasilkan dari
sinyal suara akan diteruskan ke pin clock pada
counter jika pin strobe dalam kondisi high.
Data yang akan
diambil dari sistem ini merupakan data 16 bit yang dihasilkan dari 17 stage
binary ripple counter. Oleh sebab itu di sini ada sedikit
penyesuaian untuk printer port yang hanya 8 bit data.
Solusinya
adalah dengan menggunakan 74LS541 yang merupakan octal 8 bit line driver with
three state outputs. Dengan menggunakan 74LS541 maka data dikelompokkan
dalam 2 byte dan aktivasinya diatur dari sebuah pin dari printer port yaitu pin
Auto Line Feed, ALF. Ketika sinyal ALF ini high
maka data yang diambil adalah data 8 bit pertama sedangkan ketika sinyal
ALF ini low data yang diambil adalah data 8 bit kedua.
Dimana data 8 bit yang pertama adalah lower byte sedangkan
data 8 byte berikutnya adalah upper byte.
Dengan menggunakan inverte 74LS14
maka akan dapat dipastikan hanya ada satu 74LS541 yang aktif pada suatu saat
sehingga data yang ingin diambil dapat dimasukkan ke
dalam printer port. Dengan bantuan software maka nantinya didapatkan sebuah 16
bit data.
Yang tidak kalah pentingnya adalah
deteksi terjadi kondisi overflow dari counter. Karena jika hal ini terjadi dan
tidak terdapat deteksi yang benar maka tidak akan
menghasilkan pembacaan yang benar. Hal in disebabkan karena ketika counter sudah
mencapai overflow maka pada step berikutnya akan
kembali lagi ke 00 dan mengulangi counternya mulai dari awal lagi. Sehingga jika
terjadi overflow maka pembacaan akan menghasilkan
nilai yang lebih rendah dari seharusnya. Pada counter 4024 tidak terdapat output
overflow sehingga untuk menandakan terjadinya overflow maka digunakan bit output
yang lebih tinggi dalam hal ini pada counter paling tinggi pada bit Q3 karena
output yang diambil mulai dari Q1..Q7 counter pertama,
Q1..Q7 counter kedua, Q1 dan Q2 pada counter ketiga
(counter paling tinggi).
Satu byte sisa dari 17 stage binari
counter yang dibentuk (Q3) digunakan untuk menghasilkan sinyal overflow, yang
akan memberitahu ke printer port bahwa sistem (sistem frekuensi meter) telah
terjadi overflow melalui pin busy pada printer port. Hal ini bisa
dimungkinkan demikian karena output dari Q3 dan reset digabungkan di dalam
sebuah SR Latch dengan gerbang NOR.
Pada saat normal, dimana jumlah
pulsa yang dihitung tidak melebihi kapasitas dari 17 stage binary ripple counter
maka pin Q3 pada counter yang paling tinggi tidak akan
set tetapi jika terjadi hal demikian maka pin Q3 ini akan set yang
artinya terjadi overflow pada counter. Sinyal ini dapat dimonitor dari pin busy
pada printer port.
RS latch akan ‘menangkap’ sinyal
overflow dari Q3 ini (perubahan dari low – high – low) dan kemudian
diumpankan ke pin busy pada printer port. Kondisi overflow ini
akan tetap ‘ditahan’ oleh latch sampai diberi sinyal
reset yaitu ketika pin init-nya dalam kondisi high. Sinyal ini dapat
digunakan untuk memberitahu software bahwa telah tejadi overflow dan mengulangi
proses penghitungan mulai dari awal lagi.
Frekuensi Meter Menggunakan PC
(Bagian II)
Frekuensi meter dapat dengan mudah
dibuat dengan bantuan sebuah komputer. Komputer akan
menerima data dari rangkaian pencacah dan kemudian menampilkannya di monitor.
Sebuah konsep yang sederhana.
Pada bagian yang pertama telah
diterangkan fungsi tiap bagian dari blok pada gambar
1. Namun masih ada satu bagian yang belum dibahas sama
sekali yaitu mengenai interface dari rangkaian pencacah 17 bit dengan PC dan
perangkat lunaknya yang berfungsi untuk membaca dan mengontrol rangkaian
pencacah serta mennampilkan nilaimya di monitor.
Gambar 1 Blok
Diagram Sinyal Interface
Sinyal-sinyal interface di dalam
sistem ini adalah :
·
Strobe : Berfungsi untuk membukam gerbang sinyal sehingga
pencacah dapat menghitung banyak pulsa dalam interval waktu tertentu. Pada
regiter kontrol bit-0.
·
ALF : Auto line Feed berfungsi untuk menentukan data yang
dibaca. Terletak pada register kontrol bit-1.
·
Busy : Indikator overflow. Terletak pada regiter status bit-7
·
Init : Melakukan reset pencacah. Terletak pada register
kontrol bit-2.
Pada sistem ini data yang dibaca
adalah sebanyak 16 bit dari pencacah 17 bit. Bit ke-17 digunakan oleh pencacah
untuk menandakan bahwa 16 bit data telah siap untuk dibaca. Komputer harus
menunggu bit ke-17 in sampai ‘set’ untuk membaca data.
Namun yang
menjadi masalah sekarang adalah pada printer portnya. Data bus untuk
printer port hanya 8 bit sedangkan data yang akan
dibaca adalah 16 bit. Untuk mengatasi masalah ini maka pembacaanya dilakukan dua
kali yaitu untuk lower byte (D0..D7) kemudian
baru membaca upper byte (D8..D15).
Untuk keperluan ini maka diperlukan sebuah sinyal kontrol dari komputer untuk
memberitahukan rangkaian pencacah untuk menyiapkan data yang diinginkan oleh
komputer, data lower byte atau data upper byte. Di dalam
sistem ini menggunakan sinyal ‘ALF’ (Auto Line
Feed).
Ketika ALF bernilai ‘1’ maka data
yang diambil adalah data lower byte (D0..D7)
sedangkan sebaliknya, jika bernilai ‘0’ maka data yang diambil adalah
data upper byte (D8..D15).
Gambar 2 Tabel
Fungsi Printer Port
Pada gambar 2
merupakan tabel fungsi dari pin-pin pada printer port. Pada kolom sinyal,
huruf ‘n’ yang mengawali sebuah nama sinyal
menunjukkna bahwa keaktifan sinyal tersebut adalah aktif low.
Jika diamati lebih lanjut, semua port/register control
semuanya adalah hardware inverted. Dengan demikian jika kita
mengoutputkan ‘1’ ke register kontrol maka output
dari register kontrol ini adalah ‘0’.
Dari keempat sinyal yang digunakan
3 diantaranya adalah sinyal dari register kontrol
dan satu dari register status. Yang termasuk di dalam register kontrol
adalah : Strobe, Auto Line Feed, Init sedangkan yang
termasuk register status adalah Busy.
Gambar 3 Tabel
Alamat Port LPT
Setiap printer port mempunyai 3
buah register yaitu : Register data, register kontrol
dan register status. Register data terdiri dari 8 bit
data sedangkan register kontrol dan register status tidak semuanya terpakai.
Oleh karena setiap port mempunyai 3 buah register maka tiap register ini harus
mempunyai alamat tersendiri.
·
Register Data : Alamat LPT + $00
·
Register Status : Alamat LPT + $01
·
Register Kontrol : Alamat LPT + $02
Dimana alamat
LPT merupakan alamat LPT1 atau LPT2 yaitu $378 atau $278. Sebagai contoh,
misalnya digunakan LPT1 maka alamat register data, register status dan register
kontrol adalah $378, $379 dan $37A.
Alur Program
Untuk membuat
program dari sistem ini cukup mudah. Pertama kali yang harus dilakukan
adalah melakukan setting pada LPT port agar bidirectional yaitu pada bit-5 pada
register kontrol. Langkah berikutnya adalah me-reset
pencacah/counter. Hal ini dilakukan agar
pencacahannya selalu dimulai dari nol. Untuk tujuan ini maka yang harus
dilakukan adalah memberikan ‘1’ pada semua IC pencacah 4024. Dalam hal
ini sinyal yang mengontrolnya adalah sinyal Init pada register kontrol
bit-2 diberi ‘0’. Hal ini dilakukan karena pada register kontrol merupakan
register yang hardware inverted.
Gambar 4 Fungsi
pin pada Printer Port
Untuk melewatkan sinyal yang
akan dihitung oleh pencacah maka signal gateharus
diaktifkan. Signal gate ini dibentuk dari gerbang OR dimana jika sinyal
strobe bernilai ‘1’ maka output dari
gerbang OR ini akan selalu ‘1’ sehingga pencacah tidak akan aktif. Ketika sinyal
strobe bernilai ‘0’ maka sinyal yang akan
dihitung keluar dari gerbang OR seperti input apa adanya. Untuk tujuan ini maka
pada program sinyal strobe ini harus
di-‘1’-kan agar outputnya ‘0’ pada rangkaian pencacah, hardware inverted.
Dan proses tersebut di atas
ditunggu selama 1 detik sehingga dapat ditentukan jumlah pulsa yang telah
dicacah oleh 4024 selama satu detik dan di dapatkan nilai frekuensinya tanpa
perhitungan yang lain. Setelah ditunda selama satu detik maka sinyal strobe
harus ‘1’ agar sinyal tidak dicacah lagi sehingga pada programnya strobe
harus di-‘0’-kan.
Nah sampai disini sinyal busy
harus dibaca dan begitu pula dengan data 16 bit dari pencacah. Jika
busy bernilai ‘1’ maka telah terjadi
overflow dalam penghitungan. Dengan kondisi ini maka dapat dikatakn
frekuensi sinyal yang diukur terlalu tinggi, di atas 65KHz. Untuk mendapatkan
pembacaan frekuensi di atas 65KHz ada sedikit
modifikasi pada program yaitu pada waktu tunda sinyal strobe.
Waktu tunda selama satu detik
dipilih karena akan menghasilkan pembacaan yang lebih
teliti untuk frekuensi rendah daripada waktu tunda yang lebih pendek daripada
satu detik. Tetapi jika diperlukan pembacaan untuk frekuensi yang lebih tinggi
maka waktu tunda ini dapat dikecilkan , misalnya
menjadi 100ms untuk frekuensi sampai 655KHz.
Setelah dilakukan pembacaan sinyal
busy maka data dari pencacah dibaca 2 kali. Untuk membaca data lower
byte, pada program, sinyal ALF harus di-‘1’-kan
kemudian data dari data register dibaca. Selanjutnya sinyal ALF harus di-‘0’-kan
agar dapat membaca upper byte.
Sampai di sini proses satu kali
scan telah selesai dan untuk melakukannya
lagi, proses diulangi mulai dari awal lagi, dimana pencacah harus di-reset
terlebih dahulu.
Contoh
program
1 :
Contoh program PC Frekuensi
Meter}
2 :
3 :
Uses Crt;
4 :
5 :
Const
6 :
BaseAddress =
$378; {LPT1}
7 :
DataPort =
BaseAddress+$00;
8 :
StatusPort =
BaseAddress+$01;
9 :
ControlPort =
BaseAddress+$02;
10 :
Var
11 :
Key : Char;
12 :
Freq : LongInt;
13 :
Status : Byte;
14 :
StatusMessage : String;
15 :
LowerData : LongInt;
16 :
UpperData : LongInt;
17 :
18 :
19 :
Begin
20 :
clrscr;
21 :
{Inisialisasi bi
directional printer port}
22 :
{
23 :
bit 0 : Strobe : 0
--> No Pass
24 :
bit 1 : ALF : 0
--> Lower Byte
25 :
bit 2 : Init : 0
--> Reset Pencacah
26 :
bit 5 : Bidirectional : 1
--> Bidirectional mode is ON
27 :
}
28 :
29 :
Repeat
30 :
Port[ControlPort]:=$30;
{Inisialisasi}
31 :
32 :
clrscr;
33 :
{Reset OFF}
34 :
Port[ControlPort]:=Port[ControlPort]
or $04;
35 :
{Pass signal}
36 :
Port[ControlPort]:=Port[ControlPort]
or $01;
37 :
Delay(1000); {Delay 1
detik}
38 :
Port[ControlPort]:=Port[ControlPort]
and $FE; {No Pass}
39 :
40 :
{Ambil Status
overflow}
41 :
Status :=
Port[StatusPort] and $80;
42 :
If Status = $80 then
43 :
StatusMessage :=
44 :
'Overflow
!!! -- False data received'else
45 :
StatusMessage :=
'In Range ';
46 :
{Get Lower Byte}
47 :
Port[ControlPort]:=Port[ControlPort]
and $FD; {ALF = 0}
48 :
LowerData:=Port[DataPort];
49 :
{Get Upper Byte}
50 :
Port[ControlPort]:=Port[ControlPort]
or $02; {ALF = 1}
51 :
UpperData:=Port[DataPort];
52 :
53 :
Freq := LowerData + (UpperData*256);
54 :
Writeln('Frekuensi
saat ini adalah : ',Freq,
55 :
' Hz ---
Status : ', StatusMessage);
56 :
Writeln;
57 :
Write('Scan
Ulang ? [Y/N] ');
58 :
Repeat
59 :
Readln(Key);
60 :
key:=upcase(key);
61 :
Until key in ['Y','N'];
62 :
Until key='N';
63 :
End.
|