| Pengubah DC ke DC | Analog to Digial Converter via Parallel Port |
Nah buat yang pengen memanfaatkannya, bisa bongkar tuh joystick dan liat isinya dan sambungannya. Tapi daripada diomelin ama nyokap, bokap, adik, kakak, dan tetangga (karena nggak bisa nebeng main game).. maka mendingan bikin rangkain yang sama dengan joystick. Nggak susah di bawah ini ama penulis digambar rangkaiannya.
Pada dasarnya sebuah joystick ini terbuat dari 4 tombol, dan 4 variabel resistor (lebih ngetop dengan sebutan potensiometer). Biasanya sekitar 10 Kiloohm. Setiap potensiometer ini berhubungan ama sebuah Multivibrator Monostabil. Multvibrator ini akan memiliki waktu tunda bergantung posisi potensiometer. Dengan cara ini kita bisa pakai sebagai masukan analog. Jadi misal potensioeter diganti pakai LDR (Light Dependent Resistor), atau PTC (Positive Temperature Coeficient) atau NTC (Negative Temperature Coeficient). Jadi gameport bisa kita manfaatin untuk keperluan mengukur.
Softaware untuk membaca gameport ini gampang koq. Yang dia lakukan cuma membaca Port di alamat 201 heksa. Setelah baca si program dapat nilai sebesar 1 Byte.Nah nilai ini melambangkan kondisi ke 4 tombol (ditekan atau tidak), yaitu pada bit4..bit 7. Sedangkan bit 0..3 menerangkan posisi si potensiometer. Isinya . Jadi si potensiometer akan mempengaruhi si Multivibrator, (jadi ada 4 multivibrator di gameport, masing-masing untuk tiap potensiometer). Jadi Potensio 1 akan mempengaruhi berapa lama si bit 0, memiliki kondisi HIGH (atau 1). Dan Potensio 2, ke bit 1, begitu seterusnya. Jadi untuk tahu dimana posisi potensiometer diputar (atau berapa Ohm di R1..R4), maka dibaca aja berapa lama si bit 0 .. bit 7 berada pada kondisi HIGH.
Bit 7 | Bit 6 | Bit 5 | Bit 4 | Bit 3 | Bit 2 | Bit 1 | Bit 0 |
---|---|---|---|---|---|---|---|
Masukan digital | Masukan resistif |
Jelas si software harus cepat scan biar pengukurannya tepat. Jangan
sampai loopingnya kelewat pelan, jadi belum sampai kebaca udah nggak HIGH
lagi, tapi langsung LOW. Makin tinggi kecepatan looping, maka pengukuran
akan makin tepat. Berikut ini dikasih contekan contoh program pakai PASCAL.
Bisa dijalanin pakai sistem operasi DOS (nggak harus MS DOS,bisa Open DOS
atau Free DOS). Bisa ditulis pakai TurboPascal, atau FreePascal. Yang pasti
jangan pakai program bajakan... ya... !! Khan udah reformasi... (OpenDOS,
FreeDOS, FreePASCAL itu OpenSource jadi boleh dicopy).
{###########################################################
# Contoh program membaca masikan analog dan digital dengan #
# memanfaatkan port game
#
############################################################}
program gametest;
uses crt;
const g_port = $201;
max = 550 ;
offset = 50;
nr = 5;
{===========================================================}
{ Fungsi untuk mengukur masukan
}
{ Nilai, adaah hasil pengukuran
}
{ Input, adalah nomor channel
1 s/d 4 yang dipilih }
{ Nr, jumlah sampling yang
dirata-ratakan
}
{-----------------------------------------------------------}
function mengukur(var Nilai:integer;
Input, Nr : integer):Booelan;
var i, counter, game : integer;
bitgame : boolean;
dummy : longint;
begin
if ((nr > 100) or (input > 4) or (input < 1))
then
begin
gotoxy(5, 20);
writeln('Salah !! Parameter
salah dalam fungsi mengukur');
mengukur := false;
end
else
begin
value := 0;
dummy := o;
if input=4 then input :=8;
if input=3 then input :=4;
for i:= 0 to (Nr-1) do
begin
counter := 0;
bitgame := true;
port[g_port]:=0;
while bitgame do
begin
game := port[g_port];
bitgame := (((game and input)=input) and
(counter < ((max*2)=offset)));
counter:=counter+1;
end;
counter:=counter-offset;
dummy:=(dummy+counter);
delay(1);
end;
value:=trunc(dummy/Nr);
if ((nilai> (max*2)) or
(nilai<0) then
begin
if nilai<0 then value:=-9999
else nilai := 9999;
mengukur := false;
end
else mengukur := true;
end;
end; {function}
procedure tombol (var key1, key2, key3, key4 : BOOLEAN);
var game : integer;
begin
game := port[g_port];
key1 := ((game and 128)
<> 128);
key2 := ((game and 64) <>
64);
key3 := ((game and 32) <>
32);
key4 := ((game and 16) <>
16);
end; {procedure}
var sambung, i : integer;
nilai1 : integer;
balik, t1, t2, t3, t4 : boolean;
e : char;
nilai2 : real;
begin
ClrsScr;
gotoxy(5,3);
writeln('Port masukan analag ');
gotoxy(5,23);
writeln('Tekan "e" untuk menghentikan');
gotoxy(1,8);
writeln (' INPUT 1:');
writeln (' INPUT 2:');
writeln (' INPUT 3:');
writeln (' INPUT 4:');
gotoxy(5,15);
writeln('Port masukan digital:');
gotoxy(12,17);
write('1:');
gotoxy(22,17);
write('2:');
gotoxy(32,17);
write('3:');
gotoxy(42,17);
write('4:');
while e<>'e' do
begin
if keypressed then e:= readkey
else
begin
for i:= 0 to 3 do
begin
balik := mengukur(nilai1, (i+1), Nr);
if balik then
begin
gotoxy(30,(8+i));
write(' ');
gotoxy(30,(8+i));
write(nilai1);
gotoxy(35,(8+i));
write(' jumlah loop');
end
else
begin
gotoxy(30,(8+i));
if nilai1<0 then
write('---- overflow negatif')
else
write('++++ overflow positif');
end;
end;
tombol(t1,t2,t3,t4);
gotoxy(15,17);
if t1 = true then write ('ON') else write ('OFF');
gotoxy(25,17);
if t2 = true then write ('ON') else write ('OFF');
gotoxy(35,17);
if t3 = true then write ('ON') else write ('OFF');
gotoxy(45,17);
if t4 = true then write ('ON') else write ('OFF');
end; {else}
end;{while}
ClrScr;
end.
Last modified
on :
by
I Made Wiryana
| INDEX | HALAMAN
MUKA |