ELEKTRON Nomor 6, Tahun I, Mei 2000 
| INDEX | HALAMAN MUKA |

Pengubah DC ke DC  | Analog to Digial Converter via Parallel Port


Masukan analog buat komputer anda

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.

Last modified on :  by I Made Wiryana


Pengubah DC ke DC  | Analog to Digial Converter via Parallel Port |

| INDEX | HALAMAN MUKA |


 © 1999-2000 ELEKTRO Online
All Rights Reserved.