|
|
Masukan Analog buat komputer Anda
from grab site of I Made Wiryana
Sebagian besar komputer udah punya
konektor Game Port, yang biasanya dipakai untuk Joystick (toh kebanyakan beli
komputer salah satu alasannya untuk biar bisa dipakai main game). Port ini bisa
dipakai untuk port masukan untuk keperluan apa aja, terutama yang doyan kotak
katik. Misal untuk masukan dari variabel resistor, atau cuma tombol.
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. |
|