Anda di halaman 1dari 36

3.

Paralell Port (LPT)

3.1. Pendahuluan
Standar IEEE1284 mendifinisikan 5 mode transfer data
ARAH DATA
Forward

MODE
IEEE
Kompatibel
Nibble

KETERANGAN
Mode SPP (Standard Paralell Port)
4 bit pada saat 1 x proses transfer data
dengan menggunakan jalur status untuk
data
8 bit pada saat proses transfer data dan menggunakan
jalur data
Enhanced paralel Port dapat digunakan untuk CD
ROM, harddisk
Extended Paralel Port digunakan untuk printer dan
scanner

Reverse
Reverse

Byte

Bidirectional

EEP

Bidirectional

ECP

3.2. Mode SPP (Pada Printer)


Group
37A-0
37A-1

Sinyal SPP
Strobe
Autofeed

Pin
1
14

Aktif
LOW
LOW

I/O
O
O

37A-3
37A-2
379-8
379-7
379-5
379-4
379-3
378.0-7

Select Input
Init
Acknowledge
Busy
Paper Empty
Select
Error
Data

17
16
10
11
12
13
15
2-9

LOW
LOW
LOW
HIGH
HIGH
HIGH
LOW
HIGH

O
O
I
I
I
I
I
I/O

Diskripsi
Ada data valid pada data bus
Instruksi untuk memasukkan
linefeed
Printer digunakan
Me reset printer
Karakter terakhir sudah diterima
Printer sibuk
Out of Paper
On Line
Error
data bus D0-D7

Pada saat data ditempatkan pada data bus, PC akan mengecek jalur Error dan
Paper Empty untuk melihat adanya kesalahan, kemudian mengecek busy untuk
mengetahui apakah printer siap menerima data.

Teknik Akuisisi Data

34

Apabila printer tidak sibuk, maka dimulai siklus transfer data saat strobe
bernilai 0. Printer mengetahui data yang diterima dengan mengeset jalur ACK
bernilai 0

3.3. Mode Nibble


Sinyal SPP
Strobe

Pin
1

Aktif
LOW

I/O
O

Host Busy
1284 Active
Init

14
17
16

H/L
HIGH
HIGH

O
O
I

Ptr Clk
Ptr Busy
Ack
Data
Reg
Xflag
Data
Available
Data

10
11
12

H/L
HIGH
HIGH

I
I
I

Diskripsi
tidak digunakan pada proses reserved
LOW : PC siap untuk nibble
HIGH : Nibble diterima
High untuk PC dengan mode transfer 1284
tidak digunakan pada proses reversed
LOW : nibble valid & sebagai respon terhadap
Host Busy
DB3 & DB7
DB2 & DB6

13
15

HIGH
HIGH

I
I

DB1 & DB5


DB0 & DB4

2-9

tidak digunakan

3.4 Mode Byte


Sinyal SPP

Pin

Aktif

I/O

HostClk
Host Busy

1
14

H/L
H/L

O
O

1284 Active
Init
Ptr Clk
Ptr Busy
Ack
Data
Reg
Xflag

17
16
10
11
12

HIGH
HIGH
H/L
HIGH
HIGH

O
I
I
I
I

13

HIGH

Data
Available
Data

15

HIGH

tidak digunakan
di set LOW oleh peripheral untuk menunjukkan
data reverse bisa dipakai

2-9

HIGH

I/O

data dari alat ke PC

Teknik Akuisisi Data

Diskripsi
Pulsa LOW pada akhir tiap transfer data mode
byte menunjukkan byte yang diterima
LOW : PC siap untuk byte
HIGH : byte diterima
High untuk PC dengan mode transfer 1284
tidak digunakan pada proses reversed
LOW : data valid pada data bus
Forward untuksinyal busy
Ikut data valid menuju HIGH

35

Pada mode byte proses data transfer secara forward dari PC ke printer identik
dengan transfer data pada mode SPP. Sedangkan pada mode transfer secara
reversed dari peripheral ke PC, transfer mode byte dimulai pada saat PC
memberi sinyal ke peralatan luar bahwa PC dapat menerima data yaitu dengan
mem-pull HostBusy LOW. Peralatan luar merespon dengan meletakkan byte
pertama pada jalur data, setelah mem-pull jalur PtrClk dengan nilai LOW yang
menunjukkan bahwwa informasi sudah ada di jalur.
Untuk mengetahui bahwa proses transfer data sedang berjalan, maka PC
memberi nilai HIGH pada jalur Host Busy. Sebagai respon, maka alat luar
menerima nilai HIGH pada jalur Host Clk.

3.5. EPP (Enhanced Parallel Port)


Ada 4 tipe proses transfer data
tulis data
tulis alamat
baca data
baca alamat
siklus data digunakan sebagai pen-transfer data dan siklus address digunakan
untuk mendefinisikan alamat, kanal,perintah serta informasi kontrol antara 2
alat.
SINYAL EPP
Write
Data Str
AddrStr
Init
Init
wait
User defined
User defined
User defined
Teknik Akuisisi Data

PIN
1
14
17
16
10
11
12
13
15

AKTIF
LOW
LOW
LOW
LOW
LOW
H/L
H/L
H/L
H/L

I/O
O
O
O
O
I
I
I
I
I

DISKRIPSI
Proses Write sedang berjalan
Data Read atau data write
Addr read atau addr write
Reset peralatan
Interupsi dari alat ke PC
cadangan
cadangan
cadangan
cadangan
36

Adx

2-9

HIGH

I/O

jalur data & alamat 2 arah

3.6. ECP (Extended Capability Port)


Ada 2 tipe transfer data (sebagai transfer data 2 arah):
siklus data
siklus command
Sinyal ECP

Pin

Aktif

I/O

HostClk

LOW

Host Ack

14

HIGH

1284 Active
Reverse Reg

17
16

HIGH
LOW

O
I

Perph Ack

11

HIGH

PerphClk
Ack Reverse

10
12

LOW
LOW

I
I

PerphRequest
Data

15
2-9

LOW
HIGH

I
I/O

Diskripsi
dipakai oleh peripheral untuk transfer data
atau alamat secara forward LOW bila data
valid
Data siap ditransfer secara reverse dipakai
peripheral Clk untUk transfer data secara
reverse
HIGH bila PC dalam mode transfer 1284
LOW agar kanal dalam kondisi reverse
dipakai Host Clk untuk transfer data atau
alamat secara forward
dipakai Host Ack untuk transfer data atau
alamat secara reverse
LOW untuk mengetahui request mode
reverse
di set LOW oleh alat luar untuk menunjukkan
bahwa saluran reverse bisa dipakai
pertukaran data peripheral dan PC

3.7. Pin pada LPT


3.7.1. IBM DB25 Pin Out
PIN
1
2-9
10
11
12
13
14
15
16
17
18-25

NAMA
STROBE
DATA
ACK
BUSY
PAPER END
SELECT
AUTOFEED
ERROR
INIT PRINTER
SELECT INPUT
GROUND

Teknik Akuisisi Data

ALAMAT
37A-0
378.0 - 7
379.6
379.7
379.5
379.4
37A.1
379.3
37A.2
37A.3

37

3.7.2. Centronics Pin Output


PIN
1
2-9
10
11
12
13
14
15
16
17
18
19-29
30
31
32
33
34
35
36

NAMA
DATA STROBE
DATA
ACK
BUSY
PAPER END
SELECT
AUTOFEED
NC
0 V (LOGIC GND)
0 V (CHASSIS GND)
+ 5 V 50 mA
GND
INPUT PRIME RET
INPUT PRIME
FAULT
0V
NC
+ 5 V (LEWAT 4K7)
SELECT IN

3. 8. LPT1 dan LPT2


Ada 3 address yang digunakan oleh paralel adapter pada LPT1 yakni address
378H,379H dan 37AH sedang LPT2 menggunakan address 3BCH,3BDH,dan
3BEH. Spesifikasi setiap address pada LPT1 adalah sebagai berikut:

Address 378H hanya dapat digunakan sebagai output, sedangkan jumlah bit
yang dapat digunakan sebanyak 8 bit mulai pin 2 sebagai bit 0 s.d pin 9 sebagai
bit 7.

Teknik Akuisisi Data

Bit 0

: pin 2

Bit 1

: pin 3

Bit 2

: pin 4

Bit 3

: pin 5

Bit 4

: pin 6

Bit 5

: pin 7

Bit 6

pin 8

Bit 7

: pin 9

38

Address 379H hanya dapat digunakan untuk INPUT data, tetapi jumlah data
yang dapat diinputkan hanya 5 bit, yaitu:
Bit 0

: pin 15

Bit 1

: pin 13

Bit 2

: pin 12

Bit 3

: pin 10

Bit 4

: pin 11

Khusus untuk bit 4 data yang diterima merupakan komplemen dari data yang
diinputkan.
Khusus untuk bit 3 yang terhubung ke interrupt pada PC yakni IRQ 5 dengan
nomer interrupt INT 0CH untuk LPT1 dan IRQ 6 INT 0DH untuk LPT2.
Dalam kondisi normal interrupt ini pasif sedang untuk mengaktifkannya yakni
dengan mengirim data ke address 37AH dengan data 00001000b yakni bit ke 4
dikirim data 1, sedang interrupt akan terjadi jika ada pulsa low ke address
379H bit 6.
Address 37AH sebenarnya difungsikan hanya sebagai output dengan jumlah
daa sebanyak 4 bit yakni :
Bit 0

: pin 1

Bit 1

: pin 14

Bit 2

: pin 16

Bit 3

: pin 17

Tetapi setelah mengamati hardware yang ada pada paralel adapter sebenarnya
address

ini

dapat

digunakan

sebagai

nput,

hanya

saja

sebelum

memanfaatkannya sebagai input terlebih dulu harus diinisialisasi dengan data


04H yang dimaksudkan agar data yang diambil benar karena pada rangkaian
output paralel adapter digunakan rangkaian transistor yang bersifat open
collector sehingga transistor harus dimatikan dulu dengan memberikan data
04H pada adress ini.
Sebagaimana pada adress 379H ada beberapa bit yang bersifat komplemen
yaitu:

Bit 0, bit 1 dan bit 3.

Teknik Akuisisi Data

39

3.9. Aplikasi I/O


Pada bagian ini, LPT1 dihubungkan dengan modul Interfacing dimana
modul terdiri dari

Modul I/O

Modul Display

SIPO (Serial Input Paralel Output)

PIPO (Paralel Input Paralel Output)

LCD (Light Cell Display)

Modul Motor Stepper

Langkah pertama dalam menerapkan teori adalah membuat LED berjalan yang
dikontrol oleh LPT dengan alamat :
378H untuk 8 bit output
379H untuk 5 bit input
37AH untuk 4 bit output

gambar 3.1. 8 bit output alamat 378H

Teknik Akuisisi Data

40

gambar 3.2. 5 bit input alamat 379H

gambar 3.3. 4 bit output alamat 37AH

3.9.1. Penjelasan program utama


Program yang dibuat oleh penulis mempunyai tampilan seperti di
bawah ini. Anda bisa menjalankan program IO.exe pada CD yang terlampir.

Teknik Akuisisi Data

41

gambar 3.4. Tampilan depan dari IO

Jika anda memakai program Delphi 7 under Windows XP, maka pertama kali
yang perlu anda ketahui adalah file io.dll. File ini mengijinkan anda melakukan
perintah input dan output. Adapun cara melakukan inisialisasinya adalah
sebagai berikut :
implementation
procedure PortOut(Port : Word; Data : Byte); stdcall; external 'io.dll';
function PortIn(Port:Word):Byte; stdcall; external 'io.dll';

Penulisan procedure dan function tepat di bawah implementation


procedure PortOut(Port : Word; Data : Byte);

prosedur ini mempunyai maksud , jika kita akan mengirim data 13 pada alamat
37AH, maka penulisannya adalah
portout($37A,13);

dan apabila ingin mengambil data dari suatu alamat 379H, maka penulisannya
adalah sebagai berikut :
dataH := portin($379);

Teknik Akuisisi Data

42

3.9.2. Penjelasan Program


Prosedur Output
Perhatikan program untuk output di bawah ini
procedure TForm1.OutputClick(Sender: TObject);
var
data_output : byte;
begin
data_output := StrToInt(Edit2.Text);
PortOut($378,data_output);
end;

data_output := StrToInt(Edit2.Text);

Teks angka di dalam Edit2 diubah menjadi data integer dan disimpan ke
variable data_output, kemudian dikeluarkan ke alamat 378H
PortOut($378,data_output);

Prosedur Input
Perhatikan program untuk input di bawah ini
procedure TForm1.InputClick(Sender: TObject);
var
data_input : byte;
d3456,d7 : byte;
begin
data_input := PortIn($379);
data_input := data_input and $0f8;
d3456
:= data_input and $78;
d7
:= data_input and 128;
d7
:= not d7;
d7
:= d7 and 128;
data_input := d7 + d3456;
Edit1.Text := IntToStr(data_input);
end;

Mengambil data dari alamat 379H, kemudian menyimpannya ke memori


dengan nama data_input:
data_input := PortIn($379);

Teknik Akuisisi Data

43

Karena input dari LPT terdiri dari 5 bit dimulai dengan D3 sampai D7 dengan
D7 bersifat inverter, maka :
data_input := data_input and $0f8;
d3456
:= data_input and $78;
d7
:= data_input and 128;
d7
:= not d7;
d7
:= d7 and 128;
data_input := d7 + d3456;

Kemudian hasil pemrosesan dikeluarkan ke Edit1.


Edit1.Text := IntToStr(data_input);

3.10. Listing program utama


unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Buttons;
type
TForm1 = class(TForm)
Output: TSpeedButton;
BitBtn1: TBitBtn;
Input: TSpeedButton;
Label1: TLabel;
Edit1: TEdit;
Edit2: TEdit;
Label2: TLabel;
procedure OutputClick(Sender: TObject);
procedure pulse;
procedure delay(lama:longint);
procedure InputClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

Teknik Akuisisi Data

44

var
Form1: TForm1;
data : byte;
implementation
procedure PortOut(Port : Word; Data : Byte); stdcall; external 'io.dll';
function PortIn(Port:Word):Byte; stdcall; external 'io.dll';
{$R *.dfm}
procedure TFORM1.delay(lama:longint);
var ref:longint;
begin
ref:=gettickcount;
repeat application.processmessages;
until ((gettickcount-ref)>=lama);
end;
procedure TForm1.pulse;
begin
data := data or 16;
PortOut($378,data);
end;
procedure TForm1.OutputClick(Sender: TObject);
var
data_output : byte;
begin
data_output := StrToInt(Edit2.Text);
PortOut($378,data_output);
end;
procedure TForm1.InputClick(Sender: TObject);
var
data_input : byte;
d3456,d7 : byte;
begin
data_input := PortIn($379);
data_input := data_input and $0f8;
d3456
:= data_input and $78;
d7
:= data_input and 128;
d7
:= not d7;
d7
:= d7 and 128;
data_input := d7 + d3456;
Edit1.Text := IntToStr(data_input);
end;
end.

Teknik Akuisisi Data

45

3.11. Percobaan 1: Display PIPO


Untuk percobaan ini, lihat gambar skematik berikut ini:

gambar 3.5. Display PIPO

Dari gambar di atas, pin kontrol yang digunakan adalah :

Port 378.4 untuk sinyal clock : 0 1 0

Port 378H selain 378.4 digunakan untuk data

0 segment akan menyala

1 segement akan padam

Berikut ini adalah contoh program yang digunakan untuk menjalankan display
SIPO :

Blank digunakan untuk mematikan semua segmen

Stop digunakan untuk menampilkan angka 0 9 berjalan. Tulisan


Stop akan berganti dengan Run

Teknik Akuisisi Data

46

Run digunakan untuk menampilkan display PIPO dari data yang


ditulis pada Editor

gambar 3.6. Tampilan software

Listing program
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Buttons;
type
TForm1 = class(TForm)
PIPO: TSpeedButton;
BitBtn1: TBitBtn;
Blank: TSpeedButton;
Label1: TLabel;
Edit1: TEdit;
Run: TSpeedButton;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
procedure PIPOClick(Sender: TObject);
procedure pulse;
procedure delay(lama:longint);
procedure BlankClick(Sender: TObject);
procedure RunClick(Sender: TObject);
procedure konversi(dat:byte);
procedure padam;
private
{ Private declarations }
public
{ Public declarations }
end;
Teknik Akuisisi Data

47

var
Form1: TForm1;
data : byte;
const
A0
A1
A2
A3
A4
A5
A6
A7
A8
A9

= $40;
= $0EC;
= $0A;
= $28;
= $A4;
= $21;
= $01;
= $0E8;
= $00;
= $20;

implementation
procedure PortOut(Port : Word; Data : Byte); stdcall; external 'io.dll';
function PortIn(Port:Word):Byte; stdcall; external 'io.dll';
{$R *.dfm}
procedure TFORM1.delay(lama:longint);
var ref:longint;
begin
ref:=gettickcount;
repeat application.processmessages;
until ((gettickcount-ref)>=lama);
end;
procedure TForm1.pulse;
begin
data := data or 16;
PortOut($378,data);
end;
procedure TForm1.PIPOClick(Sender: TObject);
begin
if PIPO.Caption = 'Stop' then
PIPO.Caption := 'Run'
else
if PIPO.Caption = 'Run' then
PIPO.Caption := 'Stop';
repeat
data := A0;
PortOut($378,data);
pulse; delay(300);

Teknik Akuisisi Data

48

data := A1;
PortOut($378,data);
pulse; delay(300);
data := A2;
PortOut($378,data);
pulse; delay(300);
data := A3;
PortOut($378,data);
pulse; delay(300);
data := A4;
PortOut($378,data);
pulse; delay(300);
data := A5;
PortOut($378,data);
pulse; delay(300);
data := A6;
PortOut($378,data);
pulse; delay(300);
data := A7;
PortOut($378,data);
pulse; delay(300);
data := A8;
PortOut($378,data);
pulse; delay(300);
data := A9;
PortOut($378,data);
pulse; delay(300);
until PIPO.Caption = 'Stop';
end;
procedure TForm1.BlankClick(Sender: TObject);
var
i : integer;
begin
for i:= 1 to 6 do
begin
data := $0ef;
PortOut($378,data);
pulse; delay(100);
end;
end;

Teknik Akuisisi Data

49

procedure TForm1.padam;
begin
data := $0ef;
PortOut($378,data);
pulse;
end;
procedure TForm1.konversi(dat:byte);
begin
if dat = 0 then data := A0;
if dat = 1 then data := A1;
if dat = 2 then data := A2;
if dat = 3 then data := A3;
if dat = 4 then data := A4;
if dat = 5 then data := A5;
if dat = 6 then data := A6;
if dat = 7 then data := A7;
if dat = 8 then data := A8;
if dat = 9 then data := A9;
end;
procedure TForm1.RunClick(Sender: TObject);
var
sat,pul,rat,angka : byte;
begin
angka := StrToInt(Edit1.Text);
sat := angka mod 10;
pul := angka div 10;
pul := pul mod 10;
rat := angka div 100;
konversi(sat);
PortOut($378,data);
pulse;
konversi(pul);
PortOut($378,data);
pulse;
konversi(rat);
PortOut($378,data);
pulse;
padam;padam;padam;
delay(30);
end;
end.

Teknik Akuisisi Data

50

3.10. Percobaan 1: Display SIPO


Untuk percobaan ini, lihat gambar skematik berikut ini:

gambar 3.7. Display SIPO

Dari gambar di atas, pin kontrol yang digunakan adalah :

37A.3 untuk sinyal clock : 0 1 0

37A.2 untuk sinyal data

0 segment akan menyala

1 segment akan padam

Berikut ini adalah contoh program yang digunakan untuk menjalankan display
SIPO :

Blank digunakan untuk mematikan semua segmen

Stop digunakan untuk menampilkan angka 0 9 berjalan. Tulisan


Stop akan berganti dengan Run

Teknik Akuisisi Data

51

Data Out digunakan untuk menampilkan display SIPO dari data yang
ditulis pada Editor

gambar 3.8. Tampilan software


Listing program
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Buttons, ExtCtrls;
type
TForm1 = class(TForm)
SIPO: TSpeedButton;
BitBtn1: TBitBtn;
Blank: TSpeedButton;
Edit1: TEdit;
SIPO_Out: TSpeedButton;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
procedure SIPOClick(Sender: TObject);
procedure pulse;
procedure delay(lama:longint);
procedure BlankClick(Sender: TObject);
procedure onn;procedure off;
procedure A0;
procedure A1;
procedure A2;
procedure A3;
procedure A4;
procedure A5;
procedure A6;
procedure A7;
procedure A8;
procedure A9;
procedure konversi(dat: byte); procedure padam;
procedure SIPO_OutClick(Sender: TObject);
private
{ Private declarations }
Teknik Akuisisi Data

52

public
{ Public declarations }
end;
var
Form1: TForm1;
data : byte;
implementation
procedure PortOut(Port : Word; Data : Byte); stdcall; external 'io.dll';
function PortIn(Port:Word):Byte; stdcall; external 'io.dll';
{$R *.dfm}
procedure TFORM1.delay(lama:longint);
var ref:longint;
begin
ref:=gettickcount;
repeat application.processmessages;
until ((gettickcount-ref)>=lama);
end;
procedure TForm1.pulse;
begin
data := data or 16;
PortOut($378,data);
end;
procedure TForm1.onn;
begin
PortOut($37a,11);
PortOut($37a,3);
end;
procedure TForm1.off;
begin
PortOut($37a,15);
PortOut($37a,7);
end;
procedure TForm1.A0;
begin
onn;onn;onn;onn;onn;off;onn;
end;
procedure TForm1.A1;
begin
off;onn;onn;off;off;off;off;
end;

Teknik Akuisisi Data

53

procedure TForm1.A2;
begin
onn;onn;off;off;onn;onn;onn;
end;

procedure TForm1.A3;
begin
onn;onn;onn;off;onn;onn;off;
end;
procedure TForm1.A4;
begin
off;onn;onn;onn;off;onn;off;
end;
procedure TForm1.A5;
begin
onn;off;onn;onn;onn;onn;off;
end;
procedure TForm1.A6;
begin
onn;off;onn;onn;onn;onn;onn;
end;
procedure TForm1.A7;
begin
onn;onn;onn;off;off;off;off;
end;
procedure TForm1.A8;
begin
onn;onn;onn;onn;onn;onn;onn;
end;
procedure TForm1.A9;
begin
onn;onn;onn;onn;onn;onn;off;
end;
procedure TForm1.SIPOClick(Sender: TObject);
begin
if SIPO.Caption = 'Run' then
SIPO.Caption := 'Stop'
else
if SIPO.Caption = 'Stop' then
SIPO.Caption := 'Run';

Teknik Akuisisi Data

54

repeat
A0;delay(300);
A1;delay(300);
A2;delay(300);
A3;delay(300);
A4;delay(300);
A5;delay(300);
A6;delay(300);
A7;delay(300);
A8;delay(300);
A9;delay(300);
until SIPO.Caption = 'Stop';
end;
procedure TForm1.BlankClick(Sender: TObject);
var
i : integer;
begin
for i:= 1 to 42 do
off;
end;
procedure TForm1.padam;
var
i : byte;
begin
for i:= 1 to 7 do
off;
end;
procedure TForm1.konversi(dat: byte);
begin
if dat = 0 then A0;
if dat = 1 then A1;
if dat = 2 then A2;
if dat = 3 then A3;
if dat = 4 then A4;
if dat = 5 then A5;
if dat = 6 then A6;
if dat = 7 then A7;
if dat = 8 then A8;
if dat = 9 then A9;
end;
procedure TForm1.SIPO_OutClick(Sender: TObject);
var
sat,pul,rat,angka : byte;
begin
Angka := StrToInt(Edit1.Text);
sat := Angka mod 10;
Teknik Akuisisi Data

55

pul := Angka div 10;


pul := pul mod 10;
rat := Angka div 100;
konversi(sat);
konversi(pul);
konversi(rat);
dam;padam;padam
end;
end.

3.11. Percobaan 1 : Display LCD

gambar 3.9.Display LCD

LCD yang digunakan adalah : M1632 yang terdiri dari 2 baris, 16 kolom
dimulai dari baris1 paling atas dan kolom 0 paling kiri.
Sebelum menampilkan karakter pada LCD, maka harus mengikuti prosedur
sebagai berikut:

Inisialisasi

Pemesanan tempat

Penulisan data

Teknik Akuisisi Data

56

Inisialisasi terdiri dari


Display Clear
0
0
RS R/-W

0
D7

0
D6

0
D5

0
D4

0
D3

0
D2

0
D1

1
D0

Instruksi ini akan menghapus semua display dan mengembalikan kursor ke


posisi awal (alamat 0)

Cursor Home
0
0
RS R/-W

0
D7

0
D6

0
D5

0
D4

0
D3

0
D2

1
D1

X
D0

I/D
D1

S
D0

Instruksi ini mengembalikan kursor ke posisi awal (alamat 0)

Entry Mode Set


0
0
RS R/-W

0
D7

0
D6

Instruksi ini mengatur arah

0
D5

0
D4

0
D3

pergerakan kursor dan

1
D2

apakah display akan

digeser.

Jika I/D = 1 alamat akan dinaikkan dan kursor bergerak ke kanan dan
jika I/D = 0 alamat akan diturunkan dan kursor bergerak ke kiri

Jika S = 1, semua display akan digeser, tetapi posisi kursor tidak


berubah,

Jika S = 1 dan I/D = 1 , display akan digeser ke kiri dan jika S = 1 dan
I/D = 0 display akan digeser ke kanan.

Jika

S = 0 , display tidak akan digeser.

Teknik Akuisisi Data

57

Display ON/OFF Control


0
0
RS R/-W

0
D7

0
D6

0
D5

0
D4

1
D3

D
D2

C
D1

B
D0

D = 1, display akan ditampilkan


D = 0, display tidak ditampilkan
C = 1, kursor akan ditampilkan
C = 0 , kursor tidak ditampilkan
B = 1, karakter tempat posisi kursor berkedip
B = 0, karakter tempat posisi kursor tidak berkedip

Cursor/Display Shift
0
0
RS R/-W

0
D7

0
D6

0
D5

1
D4

Instruksi ini akan menggerakkan kursor dan

S/C
D3

R/L
D2

*
D1

*
D0

menggeser display tanpa

mengubah RAM
S/C
0
0
1
1

R/L
0
1
0
1

Operasi
Posisi kursor digeser ke kiri
Posisi kursor digeser ke kanan
Seluruh display digeser ke kiri dengan kursornya
Seluruh display digeser ke kanan dengan kursornya

Function Set
0
0
RS R/-W

0
D7

0
D6

1
D5

DL
D4

1
D3

*
D2

*
D1

*
D0

DL = 1, panjang data diatur 8 bit


Teknik Akuisisi Data

58

DL = 0, panjang data 4 bit (D7 D4)


Pin yang digunakan
Pin dari LCD tipe ini terdiri dari 16 pin
No
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16

Nama
Vss
Vcc
Vee
RS
R/W
E
D0
D1
D2
D3
D4
D5
D6
D7
VBL+
VBL-

Fungsi
GND
+5V
LCD Contrast
1 = Input data, 0 = Input Instruksi
1= Read, 0 = Write
Enable
Data 0
Data 1
Data 2
Data 3
Data 4
Data 5
Data 6
Data 7
4 - 4.2 volt
GND

Pemesanan tempat
Ke baris dan kolom dengan memberi RS = 0. Untuk baris 1 data yang
dikirim adalah 8XH atau 1000 xxxxB dan baris 2 data yang dikirim
adalah CXH atau 1100xxxxB dimana x menunjukkan kolom 0 - 15 (0H
- FH).

Penulisan karakter
Ke baris dan kolom tersebut dengan memberi RS =1. Karakter yang
dikirim dalam format ASCII.

Teknik Akuisisi Data

59

gambar 3.10. tampilan Software

Listing program
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Buttons;
type
TForm1 = class(TForm)
LCD: TSpeedButton;
BitBtn1: TBitBtn;
Edit1: TEdit;
latihan: TSpeedButton;
procedure delay(lama:longint);
procedure latihanClick(Sender: TObject);
procedure controlout;
procedure dataout;
procedure init_lcd;
procedure LCDClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
data : byte;
const
DISPCLR
FUNCSET
Teknik Akuisisi Data

= $01;
= $38;
60

ENTRMOD
DISPON
CURSOR
BLINK

= $06;
= $0C;
= $0E;
= $0B;

implementation
procedure PortOut(Port : Word; Data : Byte); stdcall; external 'io.dll';
function PortIn(Port:Word):Byte; stdcall; external 'io.dll';
{$R *.dfm}
procedure TFORM1.delay(lama:longint);
var ref:longint;
begin
ref:=gettickcount;
repeat application.processmessages;
until ((gettickcount-ref)>=lama);
end;
procedure TForm1.controlout;
{ RS : -37A.0 = 1
}
{ E : -37A.1 = 1 0 1 }
begin
PortOut($37A,$3);
delay(10);
PortOut($37A,$1);
delay(10);
PortOut($37A,$3);
delay(10);
end;
procedure TForm1.dataout;
{ RS : -37A.0 = 0
}
{ E : -37A.1 = 1 0 1 }
begin
PortOut($37A,$2);
delay(10);
PortOut($37A,$0);
delay(10);
PortOut($37A,$2);
delay(10);
end;
procedure TForm1.init_lcd;
begin
PortOut($378,DISPCLR);
controlout;
delay(10);
PortOut($378,FUNCSET);
controlout;
Teknik Akuisisi Data

61

delay(10);
PortOut($378,DISPON);
controlout;
delay(10);
PortOut($378,ENTRMOD);
controlout;
delay(10);
end;
procedure TForm1.latihanClick(Sender: TObject);
begin
init_lcd;
PortOut($302,$80);
{BARIS 1 KOLOM 0}
controlout;
PortOut($378,ord('A'));
dataout;

Teknik Akuisisi Data

PortOut($378,$81);
controlout;
PortOut($378,ord('B'));
dataout;

{BARIS 1 KOLOM 1}

PortOut($378,$82);
controlout;
PortOut($378,ord('C'));
dataout;

{BARIS 1 KOLOM 2}

PortOut($378,$83);
controlout;
PortOut($378,ord('D'));
dataout;

{BARIS 1 KOLOM 3}

PortOut($378,$84);
controlout;
PortOut($378,ord('E'));
dataout;

{BARIS 1 KOLOM 4}

PortOut($378,$85);
controlout;
PortOut($378,ord('F'));
dataout;

{BARIS 1 KOLOM 5}

PortOut($378,$86);
controlout;
PortOut($378,ord('G'));
dataout;

{BARIS 1 KOLOM 6}

PortOut($378,$87);
controlout;
PortOut($378,ord('H'));

{BARIS 1 KOLOM 7}

62

dataout;

Teknik Akuisisi Data

PortOut($378,$88);
controlout;
PortOut($378,ord('I'));
dataout;

{BARIS 1 KOLOM 8}

PortOut($378,$89);
controlout;
PortOut($378,ord('J'));
dataout;

{BARIS 1 KOLOM 9}

PortOut($378,$8A);
controlout;
PortOut($378,ord('K'));
dataout;

{BARIS 1 KOLOM 10}

PortOut($378,$8B);
controlout;
PortOut($378,ord('L'));
dataout;

{BARIS 1 KOLOM 11}

PortOut($378,$8C);
controlout;
PortOut($378,ord('M'));
dataout;

{BARIS 1 KOLOM 12}

PortOut($378,$8D);
controlout;
PortOut($378,ord('N'));
dataout;

{BARIS 1 KOLOM 13}

PortOut($378,$8E);
controlout;
PortOut($378,ord('O'));
dataout;

{BARIS 1 KOLOM 14}

PortOut($378,$8F);
controlout;
PortOut($378,ord('P'));
dataout;

{BARIS 1 KOLOM 15}

PortOut($378,$C0);
controlout;
PortOut($378,ord('a'));
dataout;

{BARIS 2 KOLOM 0}

PortOut($378,$C1);
controlout;
PortOut($378,ord('b'));

{BARIS 2 KOLOM 1}

63

dataout;

Teknik Akuisisi Data

PortOut($378,$C2);
controlout;
PortOut($378,ord('c'));
dataout;

{BARIS 2 KOLOM 2}

PortOut($378,$C3);
controlout;
PortOut($378,ord('d'));
dataout;

{BARIS 2 KOLOM 3}

PortOut($378,$C4);
controlout;
PortOut($378,ord('e'));
dataout;

{BARIS 2 KOLOM 4}

PortOut($378,$C5);
controlout;
PortOut($378,ord('f'));
dataout;

{BARIS 2 KOLOM 5}

PortOut($378,$C6);
controlout;
PortOut($378,ord('g'));
dataout;

{BARIS 2 KOLOM 6}

PortOut($378,$C7);
controlout;
PortOut($378,ord('h'));
dataout;

{BARIS 2 KOLOM 7}

PortOut($378,$C8);
controlout;
PortOut($378,ord('i'));
dataout;

{BARIS 2 KOLOM 8}

PortOut($378,$C9);
controlout;
PortOut($378,ord('j'));
dataout;

{BARIS 2 KOLOM 9}

PortOut($378,$CA);
controlout;
PortOut($378,ord('k'));
dataout;

{BARIS 2 KOLOM 10}

PortOut($378,$CB);
controlout;
PortOut($378,ord('l'));

{BARIS 2 KOLOM 11}

64

dataout;
PortOut($378,$CC);
controlout;
PortOut($378,ord('m'));
dataout;

{BARIS 2 KOLOM 12}

PortOut($378,$CD);
controlout;
PortOut($378,ord('n'));
dataout;

{BARIS 2 KOLOM 13}

PortOut($378,$CE);
controlout;
PortOut($378,ord('o'));
dataout;

{BARIS 2 KOLOM 14}

PortOut($378,$CF);
controlout;
PortOut($378,ord('p'));
dataout;

{BARIS 2 KOLOM 15}

end;
procedure TForm1.LCDClick(Sender: TObject);
var
dataLCD : byte;
begin
init_lcd;
PortOut($378,$80);
{BARIS 1 KOLOM 0}
controlout;
dataLCD := StrToInt(Edit1.Text);
PortOut($378,dataLCD+$30);
dataout;
end;
end.

Teknik Akuisisi Data

65

3.12. Driver Motor Stepper

gambar 3.11. Driver motor stepper

Gambar di atas adalah driver motor stepper IN CHIP ULN 2803. dimana di
dalamnya terdapat deretan transistor penguat arus sekaligus berfungsi sebagai
INVERTER. Jadi data yang dikirim harus ber KOMPLEMEN dengan data
motor stepper.
Kecepatan motor stepper hanya bisa diatur dengan delay ( penundaan waktu )
antara data sebelum dan sesudahnya.

Teknik Akuisisi Data

66

gambar 3.12 tampilan software


Tombol terdiri dari:

Editor digunakan untuk mengisi lamanya delay (mili detik)

KIRI-Stop digunakan untuk menjalankan stepper ke kiri

KANAN-Stop digunakan untuk menjalankan stepper ke kanan

Listing program
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Buttons;
type
TForm1 = class(TForm)
KIRI: TSpeedButton;
BitBtn1: TBitBtn;
KANAN: TSpeedButton;
Edit1: TEdit;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
procedure KIRIClick(Sender: TObject);
procedure pulse;
procedure delay(lama:longint);
procedure STOPClick(Sender: TObject);
procedure KANANClick(Sender: TObject);
private
Teknik Akuisisi Data

67

{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
data : byte;
implementation
procedure PortOut(Port : Word; Data : Byte); stdcall; external 'io.dll';
function PortIn(Port:Word):Byte; stdcall; external 'io.dll';
{$R *.dfm}
procedure TFORM1.delay(lama:longint);
var ref:longint;
begin
ref:=gettickcount;
repeat application.processmessages;
until ((gettickcount-ref)>=lama);
end;
procedure TForm1.KIRIClick(Sender: TObject);
var
tunda : integer;
begin
if KIRI.Caption = 'Stop' then
KIRI.Caption := 'Run'
else
if KIRI.Caption = 'Run' then
KIRI.Caption := 'Stop';
tunda := StrToInt(Edit1.Text);
repeat
PortOut($378,8);
delay(tunda);
PortOut($378,4);
delay(tunda);
PortOut($378,2);
delay(tunda);
PortOut($378,1);
delay(tunda);
until KIRI.Caption = 'Stop';
end;

procedure TForm1.KANANClick(Sender: TObject);


var
tunda : integer;
Teknik Akuisisi Data

68

begin
if KANAN.Caption = 'Stop' then
KANAN.Caption := 'Run'
else
if KANAN.Caption = 'Run' then
KANAN.Caption := 'Stop';
tunda := StrToInt(Edit1.Text);
repeat
PortOut($378,1);
delay(tunda);
PortOut($378,2);
delay(tunda);
PortOut($378,4);
delay(tunda);
PortOut($378,8);
delay(tunda);
until KANAN.Caption = 'Stop';
end;
end.

Teknik Akuisisi Data

69