Sabtu, 01 Oktober 2011

FIFO SIDHERIAL


INTERFASI PARALEL



1.  DEFINISI

Paralel port digunakan secara luas untuk interfasi pada personal computer (PC) dengan I/O devices. Pararel port menyediakan input hingga 9 bit atau output hingga 12 bit dimana proses transfer data dilakukan secara serentak, seperti ditunjukkan pada gambar 1.Transfer data secara paralel  membutuhkan rangkaian perangkat keras yang relatif  lebih sederhana, hal ini berlawanan dengan transfer data secara serial dimana data dikirimkan per bit  yang dimulai dengan start bit dan diakhiri dengan stop bit seperti ditunjukkan pada gambar 2 dan membutuhkan rangkaian perangkat keras yang relatif  lebih rumit. Pararel port menggunakan 4 control lines, 5 status lines dan 8 data lines. Pararel port dapat ditemukan pada panel belakang PC dalam bentuk D-Type 25 Pin female connector atau bentuk D-Type 25 pin male connector. Pada komunikasi paralel dibutuhkan banyak penghantar. Hal memang sering menjadi kelemahan komunikasi paralel akibat banyaknya penghantar yang dibutuhkan, dan panjang penghantar ini tidak boleh lebih dari 20m untuk menjaga validitas. Namun kelebihan komunikasi paralel adalah lebih cepat dalam pemrogramannya.[1]
Gambar 1.Transfer Data Paralel [4]
Standarisasi Pararel Port terbaru diatur pada IEEE 1284 yang dikeluarkan pada tahun 1994. Standarisasi ini mendifinisikan 5 ragam operasi yaitu:
1. Compatibility Mode.
2. Nibble Mode.
3. Byte Mode. 
4. EPP Mode (Enhanced Parallel Port).
5. ECP Mode (Extended Capabilities Mode).[1]



Gambar 2 Transfer Data serial [2]
IEEE 1284 mempersyaratkan devais baru harus kompatibel dengan port paralel yang baku (Standard Parallel Port/ SPP). Mode kompatibel, mode nibble dan mode byte harus dapat beropersi dengan menggunakan  perangkat keras baku yang tersedia pada kartu port paralel yang asli,  sedangkan untuk mode EPP dan mode ECP yang memiliki speed transfer yang lebih tinggi memerlukan perangkat keras tambahan. Tabel 1 menunjukkan laju transfer data pada masing-masing mode. [1]
Tabel 1 Laju Transfer Data [3]
Interface Transfer Rates
Centronics
40KBps
SPP
150 KBps
ECP
2 MBps
EPP
2 MBps



2. PERANGKAT INTERFACE
Tabel 2 menunjukkan “Pin Outs” dari konektor D-Type 25 Pin  dan  konektor Centronics 36 Pin.
Tabel 2  Nomer dan fungsi Pin Parallel Port Connector [4]

 figure 1.2
D25- Pin Number
Centronics 36 Pin Number
Function
1
1
Strobe
2 to 9
2 to 9
Data Lines
10
10
Acknowledgement
11
11
Busy
12
12
Out of Paper
13
13
Select
14
14
Auto feed
15
15, 32
Error
16
16, 31
Init
17
17, 36
Select In
18 to 25
18 to 30, 33
GND
-
34, 35
N/C

D-Type 25 pin connector adalah konektor yang paling umum ditemukan pada port paralel komputer, sedangkan Centronics Connector biasanya digunakan pada port untuk printer. IEEE 1284 menetapkan 3 jenis konektor untuk  port parallel, yaitu:

1.    Tipe A adalah konektor D-Type 25 pin yang biasa ditemukan pada panel belakang computer.
2.    Tipe B adalah konektor  D-Type 36 pin Centronics Connector untuk printer.
3.    Tipe C adalah konektor D-Type 36 seperti Centronics,tetapi lebih kecil. Konektor ini diklaim memiliki karakteristik elektrik yang lebih baik dan dilengkapi dengan catu daya .Konektor tipe C direkomendasikan untuk desain-desain baru.[1]



3. TEGANGAN /KARAKTERISTIK ELEKTRIK
Keluaran port paralel secara normal adalah logika TTL. Umumnya port paralel menerapkan ASIC, dengan sink current sekitar 6mA,dan source current sekitar 12 mA. Penggunaan buffer sangat dianjurkan sehingga tidak terjadi pembebanan pada pada pararel port.



Centronics adalah suatu sistem awal transfer data dari PC ke printer. Pada centronics digunakan protokol jabatan tangan dengan menggunaan port paralel standard di bawah kendali perangkat lunak. Di bawah ini ditunjukkan ` ‘Protokol Centronics'. yang disederhanakan [1]
Gambar 3. Protocol Handshake Centronics [1]

Cara kerja adalah sebagai berikut, data valid disiapkan pada port parallel, yaitu pada pin 2 hingga pin 9 pada konektor D-Type 25 pin,  Kemudian PC memeriksa kondisi printer dalam kondisi sibuk atau tidak melalui sinyal  busy,  jika busy low, PC akan mengirim sinyal strobe rendah dengan durasi sedikitnya 1us, dan kemudian  data secara normal dibaca oleh printer atau peripheral pada saat tepi tebing naik tepi strobe. Printer kemudian akan menunjukkan bahwa printer sedang sibuk memproses data dengan mengaktifkan sinyal busy menjadi high. Setiap kali printer telah menerima data, akan mengirim sinyal acknowledge yang berarti mengakui adanya byte yang diterima berupa suatu sinyal denyut negatif nAck dengan durasi  5us pada line nAck .[1]



Skematik dibawah ini menunjukkan  rangkaian dari  paralel port. Kartu paralel port ( Paralel Port card's ) yang terdahulu menggunakan kompomen rumpun 74LS logic. Saat ini sudah digantikan teknologi ASIC, tetapi secara teoritis tetap sama.
                             
Gambar 4. Standard Paralel Port Bidirectional [1]
Bi-directional port dapat berfungsi sebagai input ataupun output port. Untuk bekerja sebagai port keluaran maka PC menempatkan data output pada I/O slot ISA, kontrol bit 5 dibuat  low dan pada saat yang bersamaan tepi positif ( rising edge ) dari sinyal IOW base akan  membuat 74LS374 memindahkan dari input D0 - D7 ke output Q0 - Q7.[1]
Untuk bekerja port masukkan I/O divais  menempatkan data input  pada slot Data0 – Data7 dan pada saat level negatif ( negative level) dari sinyal IOW base akan  membuat 74LS244 memindahkan data dari  Data 0 – Data 7 ke I/O slot ISA.



Jika paralel port tidak menyediakan fasilitas bi-directional dan  diperlukan paralel port sebagai input 8 bit, realisasi rangkaiannya ditunjukkan pada gambar 5. Pada gambar 5 ditunjukkan untuk membuat paralel port sebagai input 8 bit, disini digunakan 4 input dari status port dan 4 input  (open collector) dari  control port. [1]
   
                                
Gambar 5. Parallel Port sebagai Input 8 Bit [1]

Sinyal Busy dijadikan sebagai MSB (Bit-7) dari port status, kemudian diikuti sesuai urutan gambar 5, sinyal- sinyal Ack, Paper Out dan Select  dan seterusnya.
Port kontrol digunakan untuk membaca nible rendah (Least Significant).
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 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 dipilih. Karena inverter tersebut banyak dijumpai di pasaran.
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 dirangkai, sekarang ditulis programnya. Pertama kali harus dituliskan xxxx0100 ke port kontrol agar semua jalur kontrol dalam kondisi tinggi (HIGH), sehingga dapat digunakan untuk menarik rendah (pull down) masukan data .
 
 
outportb(CONTROL, inportb(CONTROL) & 0xF0 | 0x04);

Kemudian dapat dibaca nible MS dari port status dan di AND-kan hasilnya dengan F0h . Sinyal Busy diinversikan secara perangkat keras Sekali dua byte direkonstruksikan, dengan cara mentoggle Busy dan Init pada saat yang bersamaan.

a = (inportb(STATUS) & 0xF0); /* Read MSnibble */

Sekarang kita bisa membaca nibble LS pada port kontrol begitu mudahnya. Sekarang kita tidak tertarik pada nibble MS pada port, sehingga kita AND- kan hasilnya dengan 0Fh untuk menghapus nibble 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 mentoggle kedua bit tersebut.[1]

a = a |(inportb(CONTROL) & 0x0F); /* Read LSnibble */
a = a ^ 0x84; /* Toggle Bit 2 & 7 */
 
7. MODE NIBBLE

Mode nibble merupakan cara untuk membaca 8-bit data tanpa menempatkan port pada mode terbalik (reverse mode) dan tanpa menggunakan jalur data. Mode nibble menggunakan sebuah 1C LS157 untuk membaca sebuah nibble data, kemudian pindah ke nibble satunya dan membacanya. Melalui perangkat lunak kedua nibble 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.[1]
Gambar 6. Paralel Port Mode Nibble [1]

Cara kerja rangkaian adalah sebagai berikut, 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.
 
outportb(CONTROL, inportb(CONTROL) | 0x01); /* Select Low Nibble (A)*/

Untuk menggunakan rangkaian pada gambar 6, pertama kali harus dilakukan inisialisasi multiplekser untuk memilih masukan A atau B. Untuk membaca nibel LS terlebih dahulu, masukan A/B dibuat = 0, karena sinyal strobe terinversi secara perangkat keras, maka bit-0 pada port kontrol agar dalam kondisi LOW diberi nilai 1. Setelah nibel rendah terpilih, kemudian dilakukan pembacaan dari port status nibel LS di-AND-kan dengan F0h untuk menghapus nibel MS (tinggi).[1]

a = (inportb(STATUS) & 0xF0); /* Read Low Nibble */

Hasil  nibel LS pada variabel  digeser kekanan 4 kali

a = a >> 4; /* Shift Right 4 Bits */

Kemudian  nibel LS dan MS digabung sehingga menjadi byte

outportb(CONTROL, inportb(CONTROL) & 0xFE); /* Select High Nibble (B)*/
a = a |(inportb(STATUS) & 0xF0); /* Read High Nibble */
byte = byte ^ 0x88;
 

8. APLIKASI PARALEL PORT (INTERFACE LCD)
LCD modul dipasaran tersedia dalam ukuran  8x2, 16x1, 16x2, 20x2, 20x4, 40x4. Dalam percobaan digunakan 16x2 yang berarti LCD terdiri dari 2 baris dari 16 karakter dan memiliki 16 pin, termasuk 2 pin untuk  backlight. Tabel 4 menunjukan fungsi pinout dari LCD 2X16.

Tabel 3.Fungsi Pinout dari LCD 2X16 [4]
Pin No
Symbol
Details
1
GND
Ground
2
Vcc
Supply Voltage +5V
3
Vo
Contrast adjustment
4
RS
0->Control input,    1-> Data input
5
R/W
Read/ Write
6
E
Enable
7 to 14
D0 to D7
Data
15
VB1
Backlight +5V
16
VB0
Backlight ground

Untuk program modul LCD, pertama kita harus menginisialisasi LCD dengan mengirimkan beberapa kata kontrol. RS harus low 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. Di sini, kita akan menulis pada modul LCD dan tidak membaca kembali. Jadi, R / W 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). [1]
Gambar 7. Rangkaian Modul LCD Dengan DB25 [4]
Pada gambar 7, modul LCD dihubungkan ke port LPT menggunakan D25 konektor male. Nomor pin 3 dari LCD adalah untuk menyesuaikan kontras, dihubungkan sedemikian rupa sehingga dapat bervariasi dari 0V ke 5V.

Gambar 8. LCD Dalam Posisi ON [4]
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 4. Deskripsi Kontrol LCD [4]
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)
{
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...
{}
}

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);
}

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);
}

void lcd_putch(char char2write)
{
outportb(CONTROL, inportb(CONTROL) & 0xF7);
//RS=low: data
lcd_write(char2write);
}

void lcd_puts(char *str2write)
{
outportb(CONTROL, inportb(CONTROL) & 0xF7);
//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);
}

void lcd_clear()
{
outportb(CONTROL, inportb(CONTROL) | 0x08);
lcd_write(0x01);
}
void lcd_home()
{
outportb(CONTROL, inportb(CONTROL) | 0x08);
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));
}

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));
}
Dan Output Program Seperti Berikut :

Gambar 8. Tampilan  Keluaran [4]











Referensi
[1] www.beyondlogic.org/spp/parallel.html
[3] http://bugclub.org/beginners/hardware/centronics.html
[4] http://electrosofts.com/parallel/index.html






Tidak ada komentar:

Posting Komentar