INTERFACE PARALEL
1.
DEFINISI / PENJELASAN
Antarmuka
(interface) merupakan jembatan yang menghubungkan komputer dengan dunia
luar. Port paralel merupakan salah satu antarmuka yang mudah digunakan untuk
menghubungkan suatu alat (elektronik digital) pada komputer. [1]
Port
paralel (DB-25) adalah salah satu jenis soket pada personal komputer untuk
berkomunikasi dengan peralatan luar seperti printer model lama. Karena itu
paralel port sering juga disebut printer port. Perusahaan yang memperkenalkan
port ini adalah Centronic, maka port ini juga disebut dengan Centronics port.
[2]
Kesederhanaan port ini dari sisi pemrograman dan antarmuka dengan
hardware membuat port ini sering digunakan untuk percobaan-percobaan sederhana
dalam perancangan peralatan elektronika. [2]
Paralel
port dapat mengirimkan 8 bit data sekaligus/serentak dalam satu waktu, lebih
cepat dibanding serial port. Paralel port ini menggunakan konektor DB25.
Panjang kabel maksimum yang diperlukan / diperbolehkan adalah 15 feet. [3]
2. PERANGKAT INTERFACE
Berikut
adalah gambar dari konektor DB25 :
(a)
(b)
Gambar 1. (a) Konektor DB25 female, (b) Konektor DB25 male
[Buatan Sendiri]
Pada Gambar 1.(a) diatas merupakan konektor DB25 male yang sudah
dirangkai dengan tambahan komponen untuk aplikasi downloader program dengan
port paralel.
3. CONTOH PENGGUNAAN /
PERIPHERAL
Contoh penggunaan port
paralel DB25 sebagai berikut :
Ø Printer model lama
Ø Zip drive
Ø Beberapa scanner
Ø Sound cards
Ø Webcams
Ø Gamepads dan joystick
Ø Pemrogram EPROM
Ø Peralatan SCSI melalui adapter Parallel ke SCSI
Ø Percobaan dengan TTL 12 driver
Ø External CD-Rom/RW drives
Ø Dll
[2]
4.
METODE PENGIRIMAN
Port Paralel banyak digunakan dalam
berbagai macam aplikasi Interface. Port ini membolehkan kita memiliki masukan
hingga 8 bit atau keluaran hingga 12 bit pada saat yang bersamaan dengan
hanya membutuhkan sedikit rangkaian eksternal sederhana untuk melakukan suatu
tugas tertentu.
Port
parallel ini terdiri dari :
a) 4
Jalur Kontrol
b) 5
Jalur Status
c) 8
Jalur Data
[4]
Komunikasi
yang dilakukan pada port paralel merupakan komunikasi yang mengirimkan
data secara bersamaan. Pada penggunaan komunikasi paralel semua bit dikirim
secara bersamaan pada waktu yang sama. Oleh karena itu pada komunikasi ini kita
membutuhkan banyak kabel. Hal memang sering menjadi kelemahan komunikasi
paralel akibat banyaknya kabel yang dibutuhkan, dan panjang kabel ini tidak
boleh lebih dari 20 m, untuk menjaga keaslian data. Namun kelebihan komunikasi
paralel adalah lebih cepat dan kapasitas yang dibawa juga banyak serta
pemrograman yang lebih mudah.
Komunikasi
paralel yang digunakan adalah komunikasi paralel lewat kabel data untuk printer
(saat mengeluarkan data). Pada keadaan normal (tidak aktif) tegangan pada
pin-pin ini adalah 0 volt, namun bila kita beri high, maka tegangannya akan
berubah menjadi 5 volt.
DB25
adalah konektor yang umum digunakan di komputer sebagai port paralel ,sedangkan
konektor Centronics umum ditemukan di printer. IEEE 1284 ialah standar
yang menentukan 3 konektor berbeda yang dapat digunakan dengan port paralel,
yaitu
a)
1284 tipe A ialah konektor DB25 yang
dapat ditemukan di hampir semua komputer,
b)
1284 tipe B ialah konektor Centronics
34 pin yang umum ditemukan di printer, IEEE
c)
1284 type C ialah konektor 36 pin
seperti Centronics, tetapi ukurannya lebih kecil dan lebih memuaskan. Konektor ini diklaim
memiliki pengunci (latch) jenis klip (clip), sifat elektrik yang
lebih baik serta mudah dirakit. Juga mengandung dua pin tambahan yang dapat
digunakan untuk mendeteksi apakah piranti yang terpasang memiliki daya atau
tidak.
[5]
Gambar 2. DB25
Pada Komputer [3]
DB25 memiliki 25 buah
pin dengan keterangan :
o
Control pins
Ø Pin 4 = Request To Send
Ø Pin 5 = Clear to send
Ø Pin 6 = DCE Ready
Ø Pin 8 = received line signal detector
Ø Pin 12 = secondary received line signal detector
Ø Pin 13 = secondary clear to send
Ø Pin 19 = secondary request to send
Ø Pin 20 = DTE ready
o
Timing pins
Ø Pin 15 = transmitter signal element timing (DCE-DTE)
Ø Pin 17 = receiver signal element timing (DCE-DTE)
Ø Pin 24 = transmitter signal element timing (DTE-DCT)
o
Other pins
Ø Pin 1 = shield
Ø Pin 7 = signal ground / common return
Ø Pin 9 = reserved (testing)
Ø Pin 10 = reserved (testing)
Ø Pin 11 = unassigned
Ø Pin 18 = local loopback
Ø Pin 21 = remote loopback & signal quality detector
Ø Pin 22 = ring indicator
Ø Pin 23 = data signal rate select
Ø Pin 25 = test mode
Ø Pin 2 = transmit data
Ø Pin 3 = receive data
[3]
Gambar 3.
Pin 36 Centronic [5]
Perusahaan yang memperkenalkan port
ini adalah Centronic, dengan memperkenalkan dot matrix printer pada tahun 1970,
maka port ini juga disebut dengan Centronics port. Tetapi setelah IBM dan
Epson mengambil alih pasar printer dot matrix (kemudian diikuti oleh Hewlett
Packard di DeskJet printer laser dan segmen) kebanyakan orang hanya
mengasosiasikan kata Centronics dengan port interface itu sendiri, bukan nama
produsen. [5]
Gambar
4. Pinout Pada Konektor Port Paralel [5]
Untuk
lebih jelasnya setiap sinyal pada Paralel Port dapat dijabarkan sebagai berikut
:
Ø Strobe / Stb
Sinyal
Strobe merupakan fungsi sinyal input pada printer. Saluran ini diaktifkan
komputer jika ia akan meneruskan data ke printer.
Ø Data 0 sampai data 7
Sinyal
data merupakan sinyal input pada printer. Sinyal data disinkronkan
(diserempakkan) oleh pulsa strobe.
Ø Acknowledge / Ack :
Sinyal
ack merupakan sinyal output dari printer, Jika printer telah mengolah data yang
diterimanya, maka dalam waktu max 30 mikrodetik ia memberikan sinyal jabat
tangan (handshake) ini. Dalam bahasa Indonesia kata Acknowledge berarti
“menyatakan telah diterima”.
Ø Busy
Sinyal
busy merupakan sinyal output dari printer. Ketika printer menerima data atau
mencetak sinyal ini diaktifkan. Demikian pula jika ada
gangguan atau dalam status off line.
Ø Paper-Out / Paper End
Sinyal
paper out merupakan sinyal output dari printer. Sinyal ini akan terus aktif
sampai kertas baru dipasang lagi.
Ø Select / Slt
Sinyal
select merupakan sinyal output dari printer. Dengan sinyal ini printer
memberitahu bahwa ia sudah terpilih dan dalam keadaan aktif.
Ø Linefeed
Jika
sinyal ini diaktifkan, printer pada akhir setiap baris akan pindah ke baris selanjutnya
secara otomatis.
Ø Error
Keluaran
ini aktif jika ada gangguan atau printer tidak tersambung atau tidak menyala.
Ø Reset
Dengan
saluran ini printer kembali ke keadaan awal.
Ø Select-Printer
Pemilihan
printer sebagai piranti DTE (Data Terminal Equipment) berlangsung pada saluran
sinyal ini.
Port paralel ialah port data di komputer untuk mentransmisi 8 bit data
dalam sekali detak. Standar port paralel
yang baru ialah IEEE 1284 dimana dikeluarkan tahun 1994.
Standar ini mendefinisikan 5 mode operasi sebagai
berikut :
1.
Mode
kompatibilitas
2.
Mode nibble
3.
Mode byte
4.
Mode EPP (enhanced parallel port)
5.
Mode ECP (Extended capability port)
Tujuan dari
standar yang baru tersebut ialah untuk mendesain driver dan peralatan yang baru
yang kompatibel dengan peralatan lainnya serta standar paralel port sebelumnya
(SPP) yangn diluncurkan tahun 1981. Mode Kompatibilitas, nibble dan byte digunakan sebagai standar perangkat keras
yang tersedia di port paralel orisinal
dimana EPP dan ECP membutuhkan tambahan hardware dimana dapat berjalan dengan
kecepatan yang lebih tinggi. Mode kompatibilitas atau (“Mode Centronics”) hanya
dapat mengirimkan data pada arah maju pada kecepatan 50 kbytes per detik hingga
150 kbytes per detik. Untuk menerima data, anda harus mengubah mode menjadi mode
nibble atau byte. Mode nibble dapat menerima
4 bit (nibble) pada arah yang mundur, misalnya dari alat ke komputer. Mode byte
menggunakan fitur bi-directional
parallel untuk menerima 1 byte (8 bit) data pada arah mundur. IRQ
(Interrupt Request ) pada port paralel
biasanya pada IRQ5 atau IRQ7.
Port paralel Extend dan Enhanced menggunakan
hardware tambahan untuk membangkitkan dan mengatur handshaking.
Untuk
mengeluarkan 1 byte ke printer menggunakan mode kompatibilitas, software harus
:
1.
Menulis byte
ke data port.
2.
Cek untuk
melihat apakah printer sibuk, jika sibuk, ia tidak akan menerima data, sehingga
data yang telah ditulis akan hilang.
3.
Buat strobe
(pin 1) rendah. Ini memberitahukan printer bahwa data yang benar telah berada
di line data.
4.
Buat strobe tinggi lagi setelah
menunggu sekitar 5 mikrodetik setelah membuat strobe low.
Hal ini
membatasi kecepatan data. Sedangkan EPP dan ECP mengizinkan hardware mengecek jika printer sibuk dan
mengeluarkan sinyal strobe atau handshaking lainnya. Ini berarti hanya 1 instruksi I/O yang harus
dilakukan yang akan meningkatkan kecepatan Port ECP juga mempunyai kelebihan
menggunakan saluran DMA dan buffer FIFO, jadi data dapat digeser tanpa
menggunakan instruksi I/O.
Protokol EPP
mempunyai 4 macam siklus transfer data yang berbeda yaitu :
1.
Siklus baca data
(Data read)
2.
Siklus baca
alamat (Address Read)
3.
Siklus tulis
data (data write)
4.
siklus tulis
alamat (address write)
Siklus data
digunakan untuk mentrasfer data antara host dan peripheral. Siklus alamat digunakan untuk mengirimkan
alamat, saluran (channel) atau
informasi perintah dan kontrol. [7]
5.
CONTOH
INTERFACE DENGAN MIKROKONTROLLER
Untuk
mendownloadkan program yang kita buat ke Mikrokontroler MCS51 atau AVR kita
membutuhkan sebuah peripheral tambahan yang mendukung antara komputer dan
Mikrokontroler. Salah satu yang support dan dapat digunakan sebagai kabel
downloader tersebut adalah kabel STK200 yang dapat kita buat sendiri dengan
menggunakan DB25 (Parallel Port). Komponen yang kita butuhkan hanya Resistor
330ohm, Jumper, Black Holsing Kabel dan DB25 Male (karena Di PC adalah DB25 Female).
Dan Konfigurasinya bisa dibuat seperti gambar dibawah ini :
Gambar 5. AVR Kanda System STK200
Gambar 6. Hasil Jadi Downloader Dari
Paralel Port
[Buatan Sendiri]
Downloader LPT (ISP Programmer)
merupakan sebuah perangkat downloader yang minimum dan sederhana karena
hanya menggunakan port LPT (Parallel port) dan resistor sebagai
pengaman.
Proses Mendownload Program Dan Pengaturan Programmer
Codevision AVR :
1. Memasang Port DB25 male (yang
dibuat) ke Port DB25 female pada komputer.
Gambar 7. Port DB25 Terpasang Pada Komputer
[Buatan Sendiri]
2. Jalankan Aplikasi Codevision AVR.
3. Klik tombol Settings lalu pilih Programmer dan atur pada
Programmer Settings seperti pada gambar. Catatan : Pengaturan ini hanya sekali
saja.
Gambar 8. Pengaturan
Programmer
[Buatan
Sendiri]
4. Membuat program untuk dimasukkan
pada mikrokontroller (Dalam percobaan ini membuat program untuk menampilkan
data pada LCD).
5. Setelah selesai membuat program maka
untuk memrogram / memasukkan file dari Codevisionavr ke mikro seperti di
bawah ini :
Gambar 9. Memasukkan
Program Ke Mikro
[Buatan
Sendiri]
6. Caranya klik build all project files
pada Codevisionavr.
7. Untuk mendownload program ke
mikrokontroller maka kita tinggal meng-klik "Program The Chip". Dan tampil
proses download program sebagai berikut :
Gambar 10. Proses
Download Program
[Buatan
Sendiri]
6.
LEVEL
TEGANGAN / KARAKTERISTIK ELEKTRIK
Keluaran dari port paralel adalah keluaran TTL, sedangkan arus Sink
/ Source bervariasi antara port parallel satu dengan yang lainnya. Berdasarkan
data sheet kemampuan arus Sink / Source bermacam – macam :
Ø
Sink / Source 6mA
Ø
Source 12mA Sink 20mA
Ø
Sink 16mA Source 4mA
Ø
Sink / Source 12mA
Dengan keterbatasan arus port paralel maka diperlukan rangkaian
buffer (penyangga) sehingga tidak membebani arus dari port paralel untuk
menyuplai rangkaian luar. [2]
7.
RANGKAIAN
BUFFER
Berikut
ini adalah contoh rangkaian sederhana dan rangkaian yang menggunakan buffer
untuk aplikasi downloader paralel STK200 ISP dongle. Keduanya rangkaian berfungsi
untuk mendownload program dari komputer ke mikrokontroller menggunakan port
paralel DB25.
Gambar 11. Rangkaian Downloder Simplied dan Buffered
8.
MODE HANDSHAKING
Gambar 12. Diagram
Pewaktu Handshake Pada Centronics [7]
Perhatikan
gambar 12, data pertama kali dikirim pada jalur data (pin 2 – 7 Port Paralel),
kemudian komputer akan memeriksa apakah pencetak dalam kondisi sibuk (busy} atau
tidak, dalam hal ini sedang dalam kondisi rendah (logika 0).` Program kemudian
meng-aktifkan strobe, tunggu selama minimum 1 μd kemudian
dimatikan kembali. Data kemudian dibaca oleh pencetak (atau alat lain) saat
transisi naik dari sinyal strobe. Pencetak akan memberikan indikasi
sibuk karena sedang memproses data melalui jalur bus data. Sekali pencetak
menerima data, maka dia akan mengirimkan sinyal Ack (acknowledge) sebagai
pulsa rendah selama 5 μd.
Seringkali
komputer akan mengabaikan sinyal Ack untuk menghemat waktu. Pada Port
ECP, Anda akan lihat mode Centronics Cepat, yang membolehkan perangkat keras
mengerjakan handshaking untuk Anda. Seorang pemrogram hanya cukup
menuliskan data pada jalur I/O. Perangkat keras akan memeriksa apakah pencetak
dalam kondisi sibuk atau tidak, kemudian membangkitkan sinyal strobe.
9.
TIMING
DIAGRAM
Berikut adalah gambar dari timing diagram tranmisi data
antara serial port dan paralel port.
Gambar 13.
Timing Diagram Tranmisi Data Port Serial Dan Port Paralel
Port paralel mudah program dan lebih
cepat dibandingkan dengan port serial. Tapi kelemahan utama adalah perlu lebih
banyak jumlah jalur transmisi. Karena alasan ini port paralel tidak digunakan
dalam komunikasi jarak jauh. Marilah kita tahu perbedaan mendasar antara kerja
port paralel dan port serial. Pada port serial, akan ada jalur data dua: Satu
transmisi dan satu menerima baris. Untuk mengirim data dalam port serial, itu
harus dikirimkan satu bit demi satu dengan beberapa bit tambahan seperti bit
start, bit dan stop bit paritas untuk mendeteksi kesalahan. Tapi di port
paralel, semua 8 bit dari byte akan dikirim ke port pada suatu waktu dan
indikasi akan dikirim di baris lain. Akan ada beberapa data baris, kendali dan
beberapa baris handshaking di port paralel.
Jika tiga byte data 01000101 10011100 10110011 adalah untuk dikirim, angka
berikut akan menjelaskan bagaimana mereka akan dikirim ke port serial dan
paralel masing-masing. Kita dapat memahami mengapa komunikasi port paralel
adalah lebih cepat dibandingkan dengan serial.
[9]
10. ALAMAT-ALAMAT
PORT PARALEL
Port
paralel umumnya memiliki tiga alamat dasar yang bisa digunakan, sebagaimana
ditunjukkan pada tabel 1. Alamat dasar 3BCh pertama kali diperkenalkan sebagai
alamat port paralel pada kartu- kartu video lama. Alamat ini kemudian sempat
menghilang, saat port paralel dicabut dari kartu-kartu video. Sekarang muncul
kembali sebagai pilihan untuk port paralel yang terpadu dengan motherboard, yang
konfigurasinya dapat diubah melalui BIOS.
LPT1
biasanya memiliki alamat dasar 378h, sedangkan LPT2 adalah 278h. Ini adalah
alamat umum yang bisa dijumpai, namun alamat- alamat dasar ini bisa berlainan
antara satu komputer dengan komputer lainnya.
Saat
pertama kali komputer dihidupkan, BIOS (Basic Input/ Output System) akan
menentukan jumlah port yang dimiliki kemudian diberi label LPT1, LPT2 dan LPT3.
Pertama kali BIOS akan memeriksa alamat 3BCh, jika ditemukan port paralel pada
alamat tersebut, maka akan diberi label LPT1, kemudian dicari pada lokasi
berikutnya 378h, jika ditemukan akan diberi label selanjutnya yang sesuai. Bisa
jadi LPT1 jika tidak ditemukan port paralel di 3BCh atau mungkin LPT2, jika
ditemukan port parallel pada alamat tersebut. Alamat port terakhir yang
diperiksa adalah 278h dan mengikuti langkah-langkah yang telah dijelaskan tadi.
Sehingga dimungkinkan kita memiliki LPT2 dengan alamat 378h bukan 278h
sebagaimana yang diharapkan.
Apa
yang membuat hal seperti ini menjadi membingungkan adalah, karena beberapa
perusahaan memasang jumper yang membolehkan Anda untuk mengatur port
Anda ke LPT1, LPT2 dan LPT3. Nah sekarang berapa alamat dari LPT1? Hampir semua
kartu, untuk LPT1 dialamatkan pada 378h dan LPT2 pada 278h namun beberapa
menggunakan 3BCh sebagai LPT1, 378h sebagai LPT2 dan 278h sebagai LPT3.
Label-
label LPT1, LPT2 dan LPT3 seharusnya tidak perlu dikhawatirkan bagi mereka yang
hanya menginginkan pengantar-mukaan piranti dengan komputer. Biasanya alamat
dasarlah yang digunakan dalam program antarmuka dari label LPT1 dan
se-terusnya. Namun jika Anda tetap ingin tahu alamat LPT1 atau LPT yang lain,
Anda dapat menggunakan tabel tengok (lookup table) yang disediakan BIOS.
Saat BIOS mengarahkan alamat-alamat pada piranti pencetak Anda, maka dia akan
menyimpan alamat pada lokasi khusus dalam memori, sehingga Anda bisa
menemukannya, hal ini sebagaimana ditunjukkan pada tabel 2.
Pada
tabel 2. tersebut, ditunjukkan alamat yang dapat kita gunakan untuk menemukan
alamat-alamat port pencetak (paralel) dalam Area Data BIOS. Masing-masing
alamat membutuhkan ruang 2 byte. Program berikut (dalam bahasa C) digunakan
untuk membaca lokasi alamat-alamat tersebut untuk menemukan alamat-alamat port
paralel (pencetak):
Tabel 2. Dafatar Alamat
port pararel
[7]
11. REGISTER-REGISTER
PERANGKAT LUNAK-SPP (STANDARD PARALLEL PORT)
Tabel 3. Register Data port pararel
Alamat
dasar, biasa dinamakan Port Data atau Register Data digunakan untuk
mengeluarkan data pada jalur data Port Paralel (pin 2 s/d 9). Register ini normalnya
sebagai port hanya - tulis. Jika Anda mencoba membaca dari port ini, Anda akan
mendapatkan byte terakhir yang terkirim. Bagaimanapun juga jika port Anda dwi-arah,
Anda juga bisa menerima data melalui alamat ini.
Port
status (alamat dasar+1), perhatikan tabel 4, sebagai port hanya-baca saja. Data
apa saja yang dituliskan ke port ini akan diabaikan. Port status berasal dari
lima masukan port paralel (pin 10, 11, 12, 13 dan 15), sebuah register status
IRQ dan dua bit tercadang. Harap dicatat bahwa bit-7 (Busy) sebagai masukan
aktif rendah. Jika bit -7 terbaca sebagai logika 0 artinya pada pin tersebut
terpasang tegangan +5V. Juga pada bit- 2 (IRQ), jika bit ini terbaca '!',
artinya interupsi (sela) tidak muncul.
Register
kontrol (alamat dasar+2), perhatikan tabel 4.6, sebagai register tulis saja.
Saat sebuah pencetak disambungkan pada port paralel, maka ia membutuhkan 4
kontrol, yaitu Strobe, Auto Linefeed, Initialize dan Select Printer, yang
semua sifatnya sungsang (inverted) kecuali Initiliaze.
Tabel 4. Register Status port parallel
Tabel 5. Register
Kontrol port parallel
Dalam
hal ini pencetak tidak akan mengirimkan sinyal untuk menginisialisasi komputer
dan juga tidak akan memberitahukan komputer untuk menggunakan auto linefeed.
Bagaimanapun juga, keempat keluaran ini dapat dimanfaatkan sebagai masukan.
Namun perlu diketahui bahwa sifatnya adalah "kolektor terbuka" (open
collector atau open drain pada piranti CMOS). Ini artinya
memiliki dua kondisi, kondisi rendah (0V) dan kondisi impedansi tinggi
(rangkaian terbuka). Sehingga jika komputer mengkondisikan pin-pin sebagai
tinggi (misalnya +5V) dan piranti Anda yang terhubungkan membutuhkan kondisi
rendah (0V), maka akan terjadi hubung singkat pada port yang menyebabkan
terjadinya konflik pada pin tersebut.
Normalnya
port paralel memiliki resistor internal pull -up (kira-kira sekitar 4k7
ohm), tetapi seperti yang Anda harapkan, tidak semuanya seperti itu. Beberapa memiliki
keluaran kolektor terbuka, sedangkan lainnya hanya memiliki keluaran totem
pole normal. Agar piranti Anda bisa bekerja dengan benar pada berbagai macam
port paralel, maka Anda dapat menggunakan resistor eksternal. Jika digunakan
pada port paralel dengan resistor pull-up internal, maka seakan-akan resistor
ini akan paralel dengan resistor internal tersebut, sedangkan jika digunakan pada
port paralel dengan keluaran totem pole, resistor akan bertindak
seolah-olah sebagai beban.
Resistor
4K7 ohm (usahakan jangan yang lebih rendah) dapat digunakan untuk mengkondisikan
pin menjadi HIGH (pull high). Ini sebagai antisipasi, jika yang digunakan
adalah port paralel dengan resistor internal, sehingga penggunaan resistor eksternal
yang kemudian diparalelkan dengan resistor internal, Akan menghasilkan resistor
pull-up yang rendah nilainya. Dalam kondisi impedansi tinggi, pin pada
port paralel dalam tegangan HIGH (+5V), pada kondisi inilah piranti eksternal
Anda dapat menyebabkan pin menjadi LOW (pull low) dan mengakibatkan
hasil pembacaan port kontrol menjadi berbeda. Dengan dasar ini, maka port
kontrol yang 4-bit dapat digunakan sebagai jalur data dua arah, hanya saja port
kontrol harus diset xxxx 0100 terlebih dahulu agar dapat digunakan untuk
membaca data (yang bernilai LOW tentunya), karena semua pin kontrol dalam
kondisi +5V sehingga Anda bias mengubahnya menjadi LOW (GND)atau pull-low.
Bit
4 dan 5 merupakan kontrol internal. Bit-4 untuk mengaktif- kan IRQ dan bit - 5
digunakan untuk mengaktifkan port data dwi-arah, artinya port data dapat
digunakan sebagai masukan 8-bit (DATA0 s/d DATA7). Hal ini bisa dilakukan jika
port paralelnya mendukung. Bit-6 dan 7 sebagai cadangan, jika dilakukan
penulisan data pada bit- 6 dan 7 ini, maka akan diabaikan.
[7]
12.
PORT DWI-ARAH (BI-DIRECTIONAL
PORT)
Pada
gambar 12 ditunjukkan Register data Port Paralel yang disederhanakan. Kartu
port Paralel yang asli biasanya mengimplementasikan IC seri 74LS. Saat ini
semuanya sudah dikemas dalam satu 1C ASIC (Application Specific Integrated
Circuit), namun dasar kerjanya tetap sama.
Gambar 14. Operasi Port Paralel dwi-arah Standar [7]
Port
non dwi-arah biasanya menggunakan 1C 74LS374 dengan keluaran yang dibuat
permanen rendah (LOW), dengan demikian port data selalu bertindak sebagai
keluaran saja. Saat Anda membaca register data Port Paralel, datanya berasal
dari 74LS374 yang juga terhubungkan dengan pin-pin data. Sekarang jika Anda mampu
meng-ouerdrive 374, akan Anda dapatkan Port Dwi-arah (atau sebagai port
masukan saja, jika Anda merusakkan keluaran- keluaran terkunci atau output
latches!)
Banyak
yang melakukan hal tersebut. Pernah ada suatu rangkaian (di Internet) yang
menghubungkan antara sebuah osiloskop dengan port paralel. Pengarangnya
menggunakan suatu ADC, namun ternyata ADC-nya menggunakan transistor pada
masing- masing jalurnya, agar dapat bekerja! Tidak tahu mengapa? Ada juga yang
menggunakan 68HC11 yang tidak cukup mampu menyedot (sink) arus (30 hingga
40 mA)!
Port
paralel dwi-arah menggunakan bit-5 dari register kontrol yang dihubungkan ke OE
(Output Enable)-nya. 374 sehingga penggerak keluaran dapat dimatikan.
Dengan cara ini, Anda dapat membaca data yang tersedia pada pin-pin data Port
Paralel, tanpa mengalami konflik bus dan kebocoran arus yang berlebihan.
Bit-5
Register Kontrol dapat digunakan untuk mengaktifkan dan mematikan fungsi dwi-arah
pada Port Paralel. Hal ini hanya dibenarkan pada port dwi-arah yang sesungguhnya.
Jika bit ini sama dengan 1, pin 2 hingga 9 dalam kondisi impedansi tinggi.
Dalam kondisi ini, Anda boleh memasukkan data pada jalur-jalur tersebut dan
membacanya dari Port Data. Sembarang data yang dituliskan ke port data akan
disimpan tetapi tidak akan tersedia pada pin- pin data. Untuk mematikan fungsi dwi-arah
ini, set bit-5=0.
Bagaimanapun
juga tidak semua port sifatnya sama, Port lain boleh jadi membutuhkan bit-6
pada Register Kontrol untuk mengaktifkan mode dwi-arah dan menset bit-5-nya
untuk mematikan mode tersebut. Perusahaan lain membuat port dwi-arah mereka
dengan cara yang berbeda. Jika Anda ingin menggunakan port dwi-arah untuk
pemasukan data, maka ujilah terlebih dahulu dengan logic probe atau multimeter
untuk memastikan port paralel dalam mode dwi-arah.
[7]
13. MENGGUNAKAN
PORT PARALEL UNTUK MASUKAN 8 BIT
Jika
port paralel Anda tidak mendukung mode dwi-arah, Anda dapat memasukkan maksimum
9-bit kapan saja. Untuk melakukan hal ini, Anda dapat menggunakan 5 jalur
masukan pada Port Status dan 4 jalur masukan (kolektor terbuka) pada Port
Kontrol.
Gambar 15. Inverter Heks 74LS05 Kolektor Terbuka [7]
Masukan
ke Port Paralel telah dipilih sedemikian rupa sehingga akan memudahkan kita.
Sinyal Busy dijadikan sebagai MSB (Bit-7) dari Port Status, kemudian diikuti
sesuai urutan gambar 4.3, sinyal- sinyal Ack, Paper Out dan Select melalui
nibel (4-bit) Tinggi atau MS (Most Significant) dari Port Kontrol. Tanda
garis di atas sinyal digunakan sebagai tanda inversi perangkat keras, yaitu +5V
akan terbaca 0 dari register, sedangkan GND akan terbaca 1. Sedangkan Port Status
hanya memiliki sebuah masukan terinversi.
Port
Kontrol digunakan untuk membaca nibel Rendah atau LS (Least Significant). Sebagaimana
telah dijelaskan sebelumnya, Port Kontrol merupakan keluaran kolektor terbuka,
yaitu dua kemungkinan kondisi, impedansi tinggi dan GND. Jika kita
menghubungkan masukan-masukan kita langsung ke port (misalnya dengan sebuah
ADC0804 yang keluarannya totem pole), maka akan terjadi konflik jika masukannya
tinggi dan port mencoba untuk membuat rendah (pull it down), dengan
demikian kita gunakan inverter kolektor terbuka.
Bagaimanapun
juga hal ini tidak perlu harus selalu dilakukan. Jika kita menghubungkan
saklar-saklar kutub tunggal (single pole switches) dengan port menggunakan
resistor pull up, maka tidak perlu dikuatirkan masalah proteksi di atas.
Demikian juga jika perangkat lunak Anda menginisialisasi Port Kontrol dengan xxxx0100
sehingga semua pin pada port kontrol dalam kondisi tinggi, maka mungkin tidak
perlu juga. Jika Anda tidak mempedulikan dan alat terlanjur terpasang pada Port
Paralel dan program telah berjalan, maka Anda bisa mendapatkan masalah.
Permasalahan
lain yang perlu diperhatikan adalah resistor pull-up yang terpasang pada
Port Kontrol dan rata-rata resistor tersebut bernilai 4K7 ohm. Agar jalur tersebut
dapat menyedot arus ke kondisi rendah (LOW), maka alat Anda harus mampu
menyedot arus sekitar 1mA, yang mana beberapa piranti-piranti daya rendah
kesulitan melakukan hal tersebut. Sekarang apa yang akan terjadi jika dianggap beberapa
port memiliki resistor pull-up sebesar IK ohm? Maka alat Anda harus mampu
menyedot arus (sink) sebesar 5 mA. Hal ini semakin menguatkan alasan
penggunaan inverter kolektor terbuka.
Walaupun penyangga kolektor terbuka bisa juga
digunakan, namun inverter kolektor terbuka yang dipiiih, karena inverter
tersebut banyak dijumpai di pasaran. Kemungkinan lain adalah penggunaan
transistor.
Masukan
D3 dihubungkan melalui inverter ke Select Printer. Sinyal ini merupakan
bit-3 dari Port Kontrol, D2, D1 dan D0 dihubungkan masing-masing ke Init,
Auto linefeed dan Strobe. Jika hal ini sudah selesai kita rangkai,
sekarang ditulis programnya. Pertama kali kita harus mcnuliskan xxxx0100 ke
Port Kontrol agar semua jalur kontrol dalam kondisi tinggi (HIGH), sehingga
dapat digunakan untuk menarik rendah (pull down) masukan data . Kemudian
kita dapat membaca nibel MS dari port Status. Dengan demikian akan kita AND-kan
hasilnya dengan F0h (agar nibel LS terhapus = 0). Sinyal Busy di-
inversikan secara perangkat keras, namun sementara ini belum kita khawatirkan.
Sekali dua byte direkonstruksikan, dengan cara mentogel Busy dan Init pada
saat yang bersamaan.
Sekarang
kita bisa membaca nibel LS pada Port Kontrol begitu mudahnya. Sekarang kita
tidak tertarik pada nibel MS pada port, sehingga kita AND- kan hasilnya dengan
0Fh untuk menghapus nibel MS tersebut. Setelah itu, kita kombinasikan keduanya,
dengan cara OR-kan kedua byte tersebut. Sekarang diperoleh sebuah byte, namun
perlu diketahui bahwa bit-2 dan 7 diinversi, sehingga perlu di-XOR-kan dengan
84h atau 1000 0100b untuk mentogel kedua bit tersebut.
Catatan:
Beberapa port kontrol bukan merupakan kolektor terbuka, namun berupa totem
pole. Hal ini berlaku juga untuk port EPP dan ECP. Normalnya jika anda menggunakan
mode EPP atau ECP pada Port Paralel, port kontrol menjadi keluaran totem
pole saja. Sekarang apa yang terjadi jika Anda menghubungkan peralatan ke Port
Paralel dalam mode ini? Untuk portabilitas, disarankan untuk menggunakan rangkaian
yang akan dibahas berikut, membaca sebuah nibel.
[7]
14. MODE
NIBEL
Mode
nibel merupakan cara untuk membaca 8-bit data tanpa menempatkan port pada mode
terbalik (reverse mode) dan tanpa menggunakan jalur data. Mode nibel menggunakan
sebuah 1C Quad 2 to 1 multiplexer (74LS157) untuk membaca sebuah nibel
data, kemudian pindah ke nibel satunya dan membacanya. Melalui perangkat lunak
kedua nibel tersebut disatukan menjadi sebuah byte. Kelemahan mode ini hanya masalah
lambatnya proses. Dan dibutuhkan beberapa perintah I/O untuk membaca sebuah
byte dan membutuhkan 1C eksternal.
Cara
kerja rangkaian pada gambar 14 cukup mudah. 74LS157 Bertindak seakan-akan
sebagai empat saklar. Jika masukan A/B dalam kondisi LOW, maka masukan A dipilih,
misalnya 1A ke 1Y, 2A ke 2Y dan seterusnya. Jika sekarang masukan A/B = 1, maka
masukan B dipilih. Keluaran Y dihubungkan ke port status dari Port Paralel
sedemikian hingga menyatakan nibel MS dari register status, hal ini untuk memudahkan
dalam penulisan program.
Untuk
menggunakan rangkaian ini, pertama kali harus dilakukan inisialisasi multi-
plekser untuk memilih masukan A atau B. Kita akan membaca nibel LS terlebih
dahulu, sehingga masukan A/B dibuat = 0 (dari B > Y), karena sinyal strobe
terinversi secara perangkat keras, maka bit-0 pada port kontrol agar dalam kondisi
LOW (=0) diberi nilai 1. Setelah nibel rendah terpilih, kemudian dilakukan pembacaan
dari port status. Perhatian, jalur busy diinversikan, namun belum akan
kita tangani saat ini. Kita hanya tertarik pada nibel LS (rendah) saja,
sehingga hasilnya di-AND-kan dengan F0h untuk menghapus nibel MS (tinggi).
[7]
15. PENGGUNAAN
INTERUPSI PADA PORT PARALEL
IRQ
pada Port Paralel tidak digunakan untuk pencetakan dalam lingkungan DOS atau
Windows. Versi awal dari 0/S 2 yang menggunakannya, namun tidak dipakai pada
versi-versi berikutnya. Interupsi sangat baik digunakan saat melakukan pengantarmukaan
alat pengawasan seperti alarm suhu tinggi dan lain-lain, yang mana Anda tidak
tahu kapan alarm tersebut aktif. Akan lebih enak menggunakan interupsi dibandingkan
menggunakan teknik polling dan hal ini akan terasa manfaatnya jika komputer
juga harus melakukan proses-proses yang lain.
Interupsi
yang digunakan pada Port Paralel adalah IRQ5 atau IRQ7, atau yang lainnya jika
kedua interupsi ini telah dipakai. Serta dimungkinkan juga interupsi tersebut
dimatikan pada kartunya, jika kartu tersebut hanya digunakan untuk tujuan
pencetakan. Namun dengan menggunakan bit-4 pada register kontrol, Anda dapat
mengaktifkan dan mematikan interupsi, mengaktifkan IRQnya, melalui jalur Ack.
Interupsi umumnya akan muncul pada saat terjadi transisi dari rendah ke tinggi (rising
edge) pada jalur Ack. Dan ada pula yang terjadi pada saat transisi dari
tinggi ke rendah.
Kode-kode
program berikut digunakan untuk menguji polaritas suatu interupsi sekaligus
contoh program yang menggunakan interupsi. Program ini akan memeriksa apakah
interupsi terjadi pada saat naik atau jatuhnya sisi pulsa pada jalur Ack. Untuk
menggunakan program, cukup Anda sambung salah satu dari kaki 2 hingga 9 (pin-pin
data) ke pin Ack (atau kaki 10), misalnya kaki 9 dan 10 (agar tidak memerlukan
kabel penghubung atau langsung disolder).
Pada
saat kompilasi mungkin akan dihasilkan beberapa peringatan atau warning seperti
"condition always true", "condition always false",
"unreachable code" dan lain- lain. Hal ini tidak perlu dicemaskan,
karena peringatan-peringatan tersebut berasal dari beberapa pengujian struktur
kondisi dimana IRQ-nya diuji dan karena IRQ didefinisikan sebagai konstanta
beberapa hasi tidak berubah. Sebenarnya hal-hal demikian bisa juga diimplementasikan
sebagai pengarah praprosesor (preprocessor directive).
Bagian
awal rutin program menghitung Vektor Interupsi, alamat PIC dan Mask dalam rangka
penggunaan fasilitas interupsi Port Paralel. Setelah Rutin Layanan Interupsi
(RLI) disiapkan demikian juga dengan PIC-nya, maka kita aktifkan interupsi pada
Port Paralel, yang bisa dilakukan dengan membuat bit-4 pada register kontrol
menjadi 1:
Sebelum
mengaktifkan interupsi, kita tuliskan FFh pada port paralel terlebih dahulu
agar kondisi 8 jalur data menjadi jelas (=1). Karena semua jaiur data sudah
samadengan 1, maka kita sekarang dalam posisi siap untuk menuliskan 00h pada
port data, yang akan mengakibatkan transisi tinggi ke rendah pada jaiur Ack di
port paralel (karena terhubungkan pada salah satu dari 8 jaiur data).
Jika
interupsi muncul pada transisi tinggi ke rendah tersebut maka IF (Interrupt
Flag) akan diset dan otomatis jenis polaritas interupsinya adalah transisi
tinggi ke rendah. Jika dengan transisi tersebut interupsi belum muncul maka
kita tuliskan port data (paralel,) agar terjadi transit rendah ke tinggi. Jika
tetap tidak muncul interupsi, kemungkinan tidak bekerja, pastikan IRQ dan
alamat dasarnya benar dan koneksi (jalur data dan Ack) pada konektor DB25 male.
[7]
16. MODE-MODE
PORT PARALEL DALAM BIOS
Saat
ini kebanyakan Port Paralel merupakan port-port beragam mode dan normalnya
dapat dikonfigurasi melalui perangkat lunak. Mode- modenya meliputi:
Ø Mode
Printer (kadangkala disebut Default atau Normal Mode)
Ø Mode
Standard and Bi-directional (SPP)
Ø Mode
EPP1.7 and SPP
Ø Mode
EPP1.9 and SPP
Ø Mode
ECP
Ø Mode
ECP and EPP1.7
Ø Mode
ECP and EPP1.9
Mode
Printer merupakan mode yang paling
dasar dan merupakan Port Paralel standar satu arah, tidak ada fitur dwi-arah,
sehingga bit-5 pada port kontrol tidak digunakan. Mode Standard and
Bi-directional merupakan mode dwi-arah. Menggunakan mode ini, bit-5 pada port
kontrol akan membalikkan arah port sehingga Anda dapat membaca kembali nilai
yang diberikan pada jalur data.
Mode
EPP1.7 and SPP merupakan suatu kombinasi dari Mode EPP 1.7 (Enhanced
Parallel Port) dan SPP. Pada mode ini Anda diperbolehkan mengakses register-register
SPP (data, status dan kontrol) serta register- register EPP. Pada mode ini juga,
Anda bisa membalikkan arah port menggunakan bit-5 dari register kontrol. EPP 1.7
merupakan versi awal dari EPP dimana tidak terdapat bit untuk time-out.
Mode
EPP1.9 and SPP seperti mode sebelumnya, hanya saja menggunakan versi
1.9 dari EPP dan membolehkan pengaksesan bit tune-out pada register EPP.
Mode
ECP akan memberikan
Port dengan kemampuan tambahan (Extended Capabilities Port). Mode
ini dapat diset melalui register kontrol tambahan (extended control
register) dari ECP. Hanya saja mode ini EPP tidak tersedia.
Mode
ECP and EPP 1.7 dan ECP and EPP1.9 akan memberikan ECP, seperti
mode sebelumnya. Namun mode EPP dalam ECR-nya mode EPP disediakan dan versi
mode EPP-nya mengikutii versi 1.7 atau 1.9.
Mode-mode
diatas dapat dikonfigurasi melalui BIOS. Anda bias mengkonfigurasi ulang
menggunakan perangkat lunak yang Anda tulis, tetapi ini tidak disarankan. Register-register
perangkat lunak ini, umumnya ditemukan pada alamat-alamat 2FAh, 3F0h, 3Flh dan
lain-lain yang diperuntukkan diakses oleh BIOS. Tidak ada standarisasi pada
register-register konfigurasi ini, sehingga jika Anda ingin menggunakan
register-register tersebut, maka perangkat lunak atau program Anda menjadi
tidak portable.
Pilihan
yang baik adalah Mode ECP and EPP 1.7 atau ECP and EPP1.9
melalui BIOS kemudian menggunakan register control tambahan ECP untuk memilih
mode Port Paralel Anda. Mode EPP1.7 memiliki beberapa masalah berkaitan dengan
Strobe untuk Data dan Alamat yang harus diberikan untuk mengawali sebuah siklus
awal (start cycle) tidak peduli dengan adanya kondisi tunggu (wait
state), sehingga mode ini sudah jarang digunakan sekarang. Dengan demikian
pilihan terbaik pada Mode ECP and EPP1.9. [7]
17. Mode
-Mode Port Paralel dan Register Kontrol ECP
Sebagaimana
telah dibicarakan sebelumnya, pilihan terbaik adalah menggunakan Mode ECP
and EPP1.9 dan menggunakan Register kontrol tambahan ECP untuk memilih
beragam mode operasi. Register ECP distandarisasi dibawah Microsoft's
Extended Capa bilities Port Protocol and ISA Interface Standard, sehingga
kita tidak memiliki masalah lagi yang berkaitan dengan standarisasi.
Pada
saat diset Mode ECP, sebuah register baru muncul pada alamat dasar + 400h. Pada
tabel 5 ditunjukkan ECR (Extended Control Registerr) yang dipetakan pada
alamat dasar + 402h. Catatan: register ECP tidak akan tersedia untuk port-port
dengan alamat dasar 0x3BC.
Pada
tabel 6 ditunjukkan untuk ECR, yang perlu diperhatikan adalah 3 MSB (.bit 5, 6
dan 7) dari ECR yang digunakan untuk memilih mode operasi. Ada 7 kemungkinan
mode operasi, namun tidak semua port mendukung semua mode tersebut. Mode EPP
misalnya, tidak tersedia untuk beberapa port.
Mode
- mode Operasi
Ø Mode
Standar
Mode
ini menyebabkan port ECP bertingkahlaku seperti SPP (Standard Parallel Port)
tanpa fungsi dwi-arah;
Ø Mode
Byte (Mode PS/2)
Seperti
pada SPP dalam mode dwi-arah, bit-5 akan membuat port dalam mode terbalik (data
> komputer);
Ø Mode
Paralel (FIFO)
Pada
mode ini, sembarang data yang dituliskan ke FIFO data akan terkirim ke piranti menggunakan
SPP handshake. Perangkat keras akan membangkitkan sinyal-sinyal handshaking
yang dibutuhkan. Berguna untuk alat-alat non-ECP seperti Pencetak
(Printer). Anda dapat memperoleh beberapa fitur ECP seperti penyangga FIFO dan perangkat
keras pembangkit sinyal handshaking namun dengan SPP handshake (bukan
ECP handshake);
Ø Mode
FIFO ECP
Mode
standar untuk ECP. Mode ini menggunakan ECP handshake. Pada saat
menggunakan Mode ECP dan register ECR diset ke mode FIFO ECP, maka register SPP
akan hilang.
Ø Mode
EPP 'tercadang)
Untuk
mengaktifkan mode EPP, jika tersedia. Jika pada BIOS diset ke Mode ECP and
EPPl.x, maka EPPl.x akan tersedia dibawah standarisasi Microsoft's
Extended Capabilities Port Protocol and ISA Interface Standard mode;
ini digunakan untuk Para Pemasok (Vendor) Tercadang Dibawah standarisasi
Microsoft's Extended Capabilities Port Protocol and ISA Interface
Standard mode ini digunakan untuk Para Pemasok (Vendor).
Ø Mode
FIFO Test
Pada
mode ini, sembarang data yang dituliskan ke Register test FIFO akan ditempatkan
pada FIFO dan sembarang data yang terbaca dari register Test FIFO akan dibaca
melalui penyangga FIFO. Bit status FIFO penuh/kosong sesuai dengan kondisi sebenarnya.
Ø Mode
Konfigurasi
Pada
mode ini, dua register konfigurasi, cnfgA dan cnfgB akan tersedia pada
alamatnya masing-masing.
Tabel 6. ECR
Jika
Anda berada dalam mode ECP (melalui BIOS) atau kartu pencetak Anda diset
menggunakan ECP maka ada baiknya untuk menginisialisasi mode dari port ECP Anda
ke suatu kondisi awal sebelum digunakan. Jika Anda ingin menggunakan mode SPP,
maka set port ke Mode Standar untuk pertama kalinya, jangan punya anggapan
bahwa port siap dalam mode SPP.
Untuk
beberapa mode, register SPP dapat hilang atau tidak bekerja dengan baik. Jika
Anda menggunakan SPP, maka set ECR ke Mode Standar.
[7]
18.
CONTOH
PROGRAM
################################################
# Program C : Antarmuka
LCD dengan Port Paralel #
################################################
Modul LCD yang tersedia dalam berbagai macam seperti 8x1, 8x2 16x1,
16x2, 20x2, 20x4, 40x4. Di sini kita telah menggunakan 16x2 - yang
berarti 2 baris 16 karakter. Ini adalah
Hitachi HD44780 modul yang kompatibel, memiliki 16 pin termasuk 2 pin untuk
lampu latar.
Tabel berikut memberikan struktur pin modul LCD. Modul LCD tanpa
backlight hanya akan memiliki 14 pin. Jika Anda menggunakan LCD seperti,
mengabaikan pin 15 dan 16.
Tabel 7. Pin LCD
Untuk program modul LCD, pertama kita harus menginisialisasi LCD
dengan mengirimkan beberapa kata kontrol. RS harus rendah dan E harus tinggi
ketika kita mengirim kontrol. R / W pin 0 berarti data menulis atau kontrol ke
LCD dan R / W pin 1 berarti membaca data dari LCD. Untuk mengirim data ke LCD,
membuat RS tinggi, R / W rendah, menempatkan data di pin 7 sampai 14 dan
membuat E pin tinggi dan rendah sekali. Anda dapat memahami metode yang tepat
setelah melihat kode, kemudian dalam tutorial ini. Di sini, kita akan menulis
pada modul LCD dan tidak membaca kembali. Jadi, R / W adalah secara langsung
terhubung ke ground. Kita tidak perlu harus masukan data melalui, sehingga semua
pin output yang digunakan dalam aplikasi kita. Data pin LCD yang terhubung ke
pin data port. Strobe sinyal (Pin 1 dari konektor D25) diberikan ke E (Pin 6
LCD), Pilih printer (Pin 17 dari D25) terhubung ke RS (pin 4 dari LCD).
Gambar 17. Rangkaian Modul LCD Dengan DB25
Dalam diagram di atas, modul LCD
dihubungkan ke port LPT menggunakan D25 konektor laki-laki. Nomor pin 3 dari
LCD adalah untuk menyesuaikan kontras, dihubungkan sedemikian rupa sehingga
dapat bervariasi dari 0V ke 5V.
Jika
semuanya OK, Anda harus mendapatkan modul LCD sebagai berikut ketika berada
dalam posisi ON.
Gambar
18. LCD Dalam Posisi ON
Jika Anda mendapatkan layar ini, maka kita dapat memulai
pemrograman. Jika tidak periksa koneksi Anda, cobalah dengan memvariasikan
potensiometer 10K. Jika Anda mendapatkan tampilan ini juga, Anda bisa
mendapatkan kejelasan maksimum dengan memvariasikan pot. Bagi saya, pot yang
diperlukan untuk menjadi hampir 0V. Jadi, itu adalah OK jika Anda tidak
menggunakan pot juga, hanya menghubungkan pin 3 ke ground.
Tabel
berikut menjelaskan bagaimana untuk menulis kata-kata control Ketika RS = 0 dan
R / W = 0, data dalam pin D0 untuk D7 akan memiliki arti sebagai berikut.
Tabel 8. Deskripsi Kontrol
LCD
LISTING
PROGRAM
#include <dos.h>
#include <string.h>
#include <conio.h>
#include <time.h>
#define PORTADDRESS 0x378 /* Enter Your Port Address Here */
#define DATA PORTADDRESS+0
#define STATUS PORTADDRESS+1
#define CONTROL PORTADDRESS+2
void lcd_init(void);
void lcd_write(char char2write);
void lcd_putch(char char2write);
void lcd_puts(char * str2write);
void lcd_goto(int row, int column);
void lcd_clear(void);
void lcd_home(void);
void lcd_cursor(int cursor);
void lcd_entry_mode(int mode);
void main(void)
{
#include <string.h>
#include <conio.h>
#include <time.h>
#define PORTADDRESS 0x378 /* Enter Your Port Address Here */
#define DATA PORTADDRESS+0
#define STATUS PORTADDRESS+1
#define CONTROL PORTADDRESS+2
void lcd_init(void);
void lcd_write(char char2write);
void lcd_putch(char char2write);
void lcd_puts(char * str2write);
void lcd_goto(int row, int column);
void lcd_clear(void);
void lcd_home(void);
void lcd_cursor(int cursor);
void lcd_entry_mode(int mode);
void main(void)
{
lcd_init();
lcd_goto(1,1);
lcd_puts("Welcome To");
lcd_goto(1,0);
lcd_puts("electroSofts.com");
while(!kbhit() ) //wait until a key is pressed...
{}
lcd_goto(1,1);
lcd_puts("Welcome To");
lcd_goto(1,0);
lcd_puts("electroSofts.com");
while(!kbhit() ) //wait until a key is pressed...
{}
}
void lcd_init()
{
void lcd_init()
{
outportb(CONTROL,
inportb(CONTROL) & 0xDF);
//config data pins as output
outportb(CONTROL, inportb(CONTROL) | 0x08);
//RS is made high: control (register select)
lcd_write(0x0f);
delay(20);
lcd_write( 0x01);
delay(20);
lcd_write( 0x38);
delay(20);
//config data pins as output
outportb(CONTROL, inportb(CONTROL) | 0x08);
//RS is made high: control (register select)
lcd_write(0x0f);
delay(20);
lcd_write( 0x01);
delay(20);
lcd_write( 0x38);
delay(20);
}
void lcd_write(char char2write)
{
void lcd_write(char char2write)
{
outportb(DATA,
char2write);
outportb(CONTROL,inportb(CONTROL) | 0x01); /* Set Strobe */
delay(2);
outportb(CONTROL,inportb(CONTROL) & 0xFE); /* Reset Strobe */
delay(2);
outportb(CONTROL,inportb(CONTROL) | 0x01); /* Set Strobe */
delay(2);
outportb(CONTROL,inportb(CONTROL) & 0xFE); /* Reset Strobe */
delay(2);
}
void lcd_putch(char char2write)
{
void lcd_putch(char char2write)
{
outportb(CONTROL,
inportb(CONTROL) & 0xF7);
//RS=low: data
lcd_write(char2write);
//RS=low: data
lcd_write(char2write);
}
void lcd_puts(char *str2write)
{
void lcd_puts(char *str2write)
{
outportb(CONTROL,
inportb(CONTROL) & 0xF7);
//RS=low: data
while(*str2write)
lcd_write(*(str2write++));
//RS=low: data
while(*str2write)
lcd_write(*(str2write++));
}
void lcd_goto(int row, int column)
{
{
outportb(CONTROL,
inportb(CONTROL) | 0x08);
if(row==2) column+=0x40;
/* Add these if you are using LCD module with 4 columns
if(row==2) column+=0x14;
if(row==3) column+=0x54;
*/
lcd_write(0x80 | column);
if(row==2) column+=0x40;
/* Add these if you are using LCD module with 4 columns
if(row==2) column+=0x14;
if(row==3) column+=0x54;
*/
lcd_write(0x80 | column);
}
void lcd_clear()
{
void lcd_clear()
{
outportb(CONTROL,
inportb(CONTROL) | 0x08);
lcd_write(0x01);
lcd_write(0x01);
}
void lcd_home()
{
{
outportb(CONTROL,
inportb(CONTROL) | 0x08);
lcd_write(0x02);
lcd_write(0x02);
}
void lcd_entry_mode(int mode)
{
{
/*
if you dont call this function, entry mode sets to 2 by default.
mode: 0 - cursor left shift, no text shift
1 - no cursor shift, text right shift
2 - cursor right shift, no text shift
3 - no cursor shift, text left shift
*/
outportb(CONTROL, inportb(CONTROL) | 0x08);
lcd_write(0x04 + (mode%4));
if you dont call this function, entry mode sets to 2 by default.
mode: 0 - cursor left shift, no text shift
1 - no cursor shift, text right shift
2 - cursor right shift, no text shift
3 - no cursor shift, text left shift
*/
outportb(CONTROL, inportb(CONTROL) | 0x08);
lcd_write(0x04 + (mode%4));
}
void lcd_cursor(int cursor)
{
void lcd_cursor(int cursor)
{
/*
set cursor: 0 - no cursor, no blink
1 - only blink, no cursor
2 - only cursor, no blink
3 - both cursor and blink
*/
outportb( CONTROL, inportb(CONTROL) | 0x08 );
lcd_write( 0x0c + (cursor%4));
set cursor: 0 - no cursor, no blink
1 - only blink, no cursor
2 - only cursor, no blink
3 - both cursor and blink
*/
outportb( CONTROL, inportb(CONTROL) | 0x08 );
lcd_write( 0x0c + (cursor%4));
}
Dan Output Program Seperti Berikut :
Gambar 19. Output
[8]
###################################################
# Program Delphi : Menghidupkan Dan Mematikan Led #
###################################################
Pembuatan
program Bahasa Delphi komunikasi paralel dengan menggunakan komponen io.dll,
untuk menghidupkan dan mematikan LED.
Perhatikan
pada gambar 20 tersebut. Delapan buah LED terhubung ke port 0, yang difungsikan
sebagai output. Pada konfigurasi tersebut LED akan nyala bila diberi logika LOW
‘0’ melalui port 0, dan LED akan padam bila diberi logika HIGH ‘1’
melalui port 0.
Gambar 20. Rangkaian LED
Percobaan ON OFF 8 buah LED secara bersamaan
Rencanakan
program untuk menghidupkan dan mematikan LED 8 buah, dengan menekan tombol ON
dan OFF, pada komunikasi paralel. Lakukan sesuai dengan langkah-langkah berikut
ini:
1.
Hubungkan kabel paralel pada port paralel komputer ke rangkaian LED.
2.
Rencanakan program dengan tampilan sebagai berikut.
LISTING
PROGRAM
implementation
{$R *.dfm}
procedure PortOut(Port : Word; Data
: Byte); stdcall; external 'io.dll';
procedure
TForm1.Button1Click(Sender: TObject);
begin
portout($378,0);
end;
procedure
TForm1.Button2Click(Sender: TObject);
begin
portout($378,255);
end;
[10]
################################
# Program Java : Rangkaian LED #
################################
Buat rangkaian LED-nya selang-seling
dan solder resistor pada pin 2-9 (resistor boleh terbalik). Solder kaki LED positif ke resistor dan LED negatif ke pin 25 (kaki LED yang panjang itu positif sedangkan kaki LED yang pendek itu negatif. Ini tidak boleh terbalik ).
Gambar 22. Rangkaian
LED dan DB25
Jangan Lupa Letakkan jnpout32.dll di C:\WINDOWS\system32
Buat program java dengan nama ioPort.java untuk komunikasi ke portnya.
Gambar 23. Program Java
Buat program tes.java untuk programnya :
Gambar 24. Program Tes Java
Pasang rangkaian led ke port paralel dan pastikan semua led dalam keadaan menyala.
Compile dan jalankan program java di atas.
Ganti nilai alamat pin pada tes.java dengan 0-255 bebas, compile lalu jalankan
programnya. Prinsipnya, untuk menyalakan LED, kita kirim data ke port paralel.
Sesuaikan pengiriman data ini dengan LED yang ingin dinyalakan. Misalnya, untuk
menyalakan LED pertama, maka data yang dikirim adalah 1 desimal.
Sesuaikan pengiriman data ini dengan LED yang ingin dinyalakan. Misalnya, untuk
menyalakan LED pertama, maka data yang dikirim adalah 1 desimal.
Daftar berikut dapat digunakan sebagai acuan.
DataPort Bit 0 = LED1 = 00000001 bin = 1 hex = 1 Oct = 1 dec
DataPort Bit 1 = LED2 = 00000010 bin = 2 hex = 2 Oct = 2 dec
DataPort Bit 2 = LED3 = 00000100 bin = 4 hex = 4 Oct = 4 dec
DataPort Bit 3 = LED4 = 00001000 bin = 8 hex = 10 Oct = 8 dec
DataPort Bit 4 = LED5 = 00010000 bin = 10 hex = 20 Oct = 16 dec
DataPort Bit 5 = LED6 = 00100000 bin = 20 hex = 40 Oct = 32 dec
DataPort Bit 6 = LED7 = 01000000 bin = 40 hex = 100 Oct = 64 dec
DataPort Bit 7 = LED8 = 10000000 bin = 80 hex = 200 Oct = 128 dec
DataPort Bit 0 = LED1 = 00000001 bin = 1 hex = 1 Oct = 1 dec
DataPort Bit 1 = LED2 = 00000010 bin = 2 hex = 2 Oct = 2 dec
DataPort Bit 2 = LED3 = 00000100 bin = 4 hex = 4 Oct = 4 dec
DataPort Bit 3 = LED4 = 00001000 bin = 8 hex = 10 Oct = 8 dec
DataPort Bit 4 = LED5 = 00010000 bin = 10 hex = 20 Oct = 16 dec
DataPort Bit 5 = LED6 = 00100000 bin = 20 hex = 40 Oct = 32 dec
DataPort Bit 6 = LED7 = 01000000 bin = 40 hex = 100 Oct = 64 dec
DataPort Bit 7 = LED8 = 10000000 bin = 80 hex = 200 Oct = 128 dec
[11]
######################################
# Program Visual Basic
: Rangkaian LED #
######################################
Dibutuhkan suatu cara agar VB bisa
melakukan akses perangkat keras. Salah satunya dengan lib io.dll, yang bisa didownload dari http://www.geekhideout.com/iodll.shtml
secara gratis, yang harus disimpan atau ditempatkan pada folder C:/windows/system32 pada komputer.
Cara penggunaannya sangat mudah, pertama
definisikan terlebih dahulu fungsi dan prosedur untuk akses masukan maupun
keluaran perangkat keras pada bagian modul khusus VB sebagai berikut:
Public
Declare Sub PortOut Lib "io.dll" _
(ByVal Port As Integer,
ByVal Data As Byte)
Public Declare Sub PortWordOut Lib
"io.dll" _
(ByVal Port As Integer,
ByVal Data As Integer)
Public Declare Sub PortDWordOut Lib
"io.dll" _
(ByVal Port As Integer,
ByVal Data As Long)
Public Declare Function
PortIn Lib "io.dll" _
(ByVal Port As Integer)
As Byte
Public Declare Function PortWordIn Lib
"io.dll" _
(ByVal Port As Integer)
As Integer
Public Declare Function PortDWordIn Lib
"io.dll" _
(ByVal Port As Integer)
As Long
Public Declare Sub SetPortBit Lib
"io.dll" _
(ByVal Port As Integer,
ByVal Bit As Byte)
Public Declare Sub ClrPortBit Lib
"io.dll" _
(ByVal Port As Integer,
ByVal Bit As Byte)
Public Declare Sub NotPortBit Lib
"io.dll" _
(ByVal Port As Integer,
ByVal Bit As Byte)
Public Declare Function GetPortBit Lib
"io.dll" _
(ByVal Port As Integer,
ByVal Bit As Byte) As Boolean
Public Declare Function RightPortShift Lib
"io.dll" _
(ByVal Port As Integer,
ByVal Val As Boolean) As Boolean
Public Declare Function LeftPortShift Lib
"io.dll" _
(ByVal Port As Integer,
ByVal Val As Boolean) As Boolean
Public Declare Function IsDriverInstalled Lib
"io.dll" () As Boolean
Kedua tinggal penggunaan fungsi dan
prosedur tersebut secara biasa, fungsi PortIn
membutuhkan dua parameter yaitu alamat
perangkat keras dan variabel hasil pembacaan data dari perangkat keras dengan
tipe data byte. Sedangkan prosedur PortOut membutuhkan dua parameter juga
yaitu alamat perangkat keras dan nilai atau variabel yang menyimpan nilai yang
akan dikirimkan ke perangkat keras yang bersangkutan.
PortOut : Mengirim data dalam format
byte (8-bit) ke port tertentu.
PortWordOut : Mengirim data dalam format word
(16-bit) ke port tertentu.
PortDWordOut : Mengirim data dalam format double word
(32-bit) ke port tertentu.
PortIn : Membaca data falam format byte
(8-bit) dari port tertentu.
PortWordIn : Membaca data falam format word
(16-bit) dari port tertentu.
PortDWordIn : Membaca data falam format double word
(32-bit) dari port
tertentu.
GetPortBit : Membaca status dari bit tertentu.
SetPortBit : Set bit (=1) pada port tertentu.
ClrPortBit : Reset bit (=0) pada port
tertentu.
NotPortBit : Lakukan inversi (NOT) bit pada
port tertentu
RightPortShift :
Geser bit dari port tertentu ke kanan, LSBàMSB.
LeftPortShift :
Geser bit dari port tertentu ke kiri, MSB àLSB.
IsDriverInstalled : Akan memberikan nilai bukan-NOL jika io.dll
sudah terinstal dan
berfungsi.
Tujuan utama dari fungsi ini adalah untuk memastikan
bahwa penggerak mode kernel pada NT/2000/XP
telah diinstal dan
dapat diakses.
Pemograman LED Driver adalah sebuah
program yang digunakan untuk melakukan pengontrolan nyala LED melalui port paralel.
Program ini memerlukan rangkaian LED driver yang dipasangkan pada port paralel
dan program LED driver untuk menjalankannya.
Rangkaian LED Driver berikut
digunakan untuk interfacing LED dengan port Paralel :
Gambar
25. Rangkaian LED Driver
PEMOGRAMAN
LED DRIVER untuk Menghidupkan dan mematikan LED
Program
ini digunakan untuk mematikan dan menghidupkan LED-LED yang terpasang pada
pin-pin data secara bersama-sama. Menggunakan bantuan komponen CheckBox, Anda bisa mengganti dengan komponen
lainnya selama bisa digunakan untuk proses Toggle (ON-OFF secara bergantian).
Status dari LED langsung ditunjukkan pada komponen tersebut.
Gambar
26. Tampilan Program menghidupkan dan mematikan LED
KOMPONEN VISUAL BASIC
Komponen
|
Properti
|
Subroutin
|
Form
|
Name : Form1
Caption
: Led Driver1
|
Private
Sub Form_Load()
|
CheckBox
|
Name : Check1
Caption
: ON/OFF
|
Private
Sub Check1_Click()
|
CommandButton
|
Name : Command1
Caption
: Keluar
|
Private
Sub Command1_Click()
|
Private Sub
Form_Load()
If Not
IsDriverInstalled Then
MsgBox
"error", vbOKOnly
Unload Me
End If
End Sub
Private Sub
Check1_Click()
If
Check1.Value = 1 Then
PortOut
&H378, &HFF
Check1.Caption
= "Lampu ON semua"
Else
PortOut
&H378, &H0
Check1.Caption
= "Lampu OFF semua"
End If
End Sub
Private Sub
Command1_Click()
Unload Me
End Sub
[12]
Referensi:
[1] http://lpfilkom.freeservers.com/referens/LPT_B.htm
[3] http://terminaltechno.blog.uns.ac.id/2009/11/07/contoh-rangkaian-dan-program-
aplikasi-dengan-konektor-db9-db25-dan-usb/
[4]
http://bocah-cakil.blogspot.com/2010/03/port-paralel-db25.html
[5] http://haris-tkj-kreatif.blogspot.com/2011/05/port-printer.html
[6]
http://www.mycomputerclub.com/reference-cables-guide.html
[7]
journal.mercubuana.ac.iddatalecKK-012325-6-1.pdf
[8]
http://electrosofts.com/parallel/lcd.html
[11] http://dc381.4shared.com/doc/7DDTYBbZ/preview.html
modulla-g.doc








































Mohon pencerahan, bagaimana memprogram untuk 4 Input dari limited switch (push button on/off) dan 4 outputnya (lampu) di simulasikan di PC. Terimakasih.
BalasHapusMohon dibalas. via email : mei.suprihartini@gmail.com
mohon bantuan hidupin 4led biner 1 2 4 8 melalui saklar pakai port parallel db 25,terus bilangan heksanya bisa ditampilkan itu gimana programnya pakai program delphi,saya bingung
BalasHapusMakasih artikelnya bermanfaat
BalasHapus