pc interfacing

18
PC Interfacing Pengenalan Komunikasi Serial Pada prinsipnya, komunikasi serial ialah komunikasi dimana pengiriman data dilakukan per bit, sehingga lebih lambat dibandingkan komunikasi parallel seperti pada port printer yang mampu mengirim 8 bit sekaligus dalam sekali detak. Beberapa contoh komunikasi serial ialah mouse, scanner dan system akuisisi data yang terhubung ke port COM1/COM2. Peralatan Komunikasi Serial Devais pada komunikasi serial port dibagi menjadi 2 (dua ) kelompok yaitu Data Communication Equipment (DCE) dan Data Terminal Equipment (DTE). Contoh dari DCE ialah modem, plotter, scanner dan lain lain sedangkan contoh dari DTE ialah terminal di komputer. Spesifikasi elektronik dari serial port merujuk pada Electronic Industry Association (EIA) : 1. “Space” (logika 0) ialah tegangan antara + 3 hingga +25 V. 2. “Mark” (logika 1) ialah tegangan antara –3 hingga –25 V. 3. Daerah antara + 3V hingga –3V tidak didefinisikan /tidak terpakai 4. Tegangan open circuit tidak boleh melebihi 25 V. 5. Arus hubungan singkat tidak boleh melebihi 500mA. Komunikasi serial membutuhkan port sebagai saluran data. Berikut tampilan port serial DB9 yang umum digunakan sebagai port serial Gambar Port DB9 jantan Gambar Port DB9 betina Konektor port serial terdiri dari 2 jenis, yaitu konektor 25 pin (DB25 dan 9 pin (DB9) yang berpasangan (jantan dan betina). Bentuk dari konektor DB-25 sama persis dengan port paralel. Umumnyua COM1 berada dialamat 3F8H, sedangkan COM2 dialamat 2F8H. Tabel Jenis SInyal RS232 yang umum digunakan

Upload: readone-sheti

Post on 24-Jun-2015

292 views

Category:

Documents


1 download

TRANSCRIPT

Page 1: PC Interfacing

PC Interfacing

Pengenalan Komunikasi Serial Pada prinsipnya, komunikasi serial ialah komunikasi dimana pengiriman data dilakukan per bit, sehingga lebih lambat dibandingkan komunikasi parallel seperti pada port printer yang mampu mengirim 8 bit sekaligus dalam sekali detak. Beberapa contoh komunikasi serial ialah mouse, scanner dan system akuisisi data yang terhubung ke port COM1/COM2. Peralatan Komunikasi Serial Devais pada komunikasi serial port dibagi menjadi 2 (dua ) kelompok yaitu Data Communication Equipment (DCE) dan Data Terminal Equipment (DTE). Contoh dari DCE ialah modem, plotter, scanner dan lain lain sedangkan contoh dari DTE ialah terminal di komputer. Spesifikasi elektronik dari serial port merujuk pada Electronic Industry Association (EIA) :

1. “Space” (logika 0) ialah tegangan antara + 3 hingga +25 V. 2. “Mark” (logika 1) ialah tegangan antara –3 hingga –25 V. 3. Daerah antara + 3V hingga –3V tidak didefinisikan /tidak terpakai 4. Tegangan open circuit tidak boleh melebihi 25 V. 5. Arus hubungan singkat tidak boleh melebihi 500mA.

Komunikasi serial membutuhkan port sebagai saluran data. Berikut tampilan port serial DB9 yang umum digunakan sebagai port serial

Gambar Port DB9 jantan

Gambar Port DB9 betina Konektor port serial terdiri dari 2 jenis, yaitu konektor 25 pin (DB25 dan 9 pin (DB9) yang berpasangan (jantan dan betina). Bentuk dari konektor DB-25 sama persis dengan port paralel. Umumnyua COM1 berada dialamat 3F8H, sedangkan COM2 dialamat 2F8H.

Tabel Jenis SInyal RS232 yang umum digunakan

Page 2: PC Interfacing

Konverter Logika RS-232 Jika peralatan yang kita gunakan menggunakan logika TTL maka sinyal serial port harus kita konversikan dahulu ke pulsa TTL sebelum kita gunakan, dan sebaliknya sinyal dari peralatan kita harus dikonversikan ke logika RS-232 sebelum di-inputkan ke serial port. Konverter yang paling mudah digunakan adalah MAX-232. Di dalam IC ini terdapat Charge Pump yang akan membangkitkan +10 Volt dan -10 Volt dari sumber +5 Volt tunggal. Dalam IC DIP (Dual In-line Package) 16 pin (8 pin x 2 baris) ini terdapat 2 buah transmiter dan 2 receiver. Sering juga sebagai buffer serial digunakan chip DS275. Untuk menghubungkan antara 2 buah PC, biasanya digunakan format null mode, dimana pin TxD dihubungkan dengan RxD pasangan, pin Sinyal ground (5) dihubungkandengan SG di pasangan, dan masing masing pin DTR, DSR dan CD dihubung singkat, dan pin RTS dan CTS dihubung singkat di setiap devais. Pemrograman Port Serial Komputer Port serial sering digunakan untuk interfacing komputer dan mikrokontroler, karena kemampuan jarak pengiriman data dibandingkan port paralel. Berikut contoh program assembly untuk komunikasi serial antara 2 PC. Untuk komunikasi ini, anda cukup menghubungkan :

1. Pin TxD ke pin RxD computer lain 2. Pin RXD dihubungkan ke pin TxD komputer lain 3. RTS dan CTS dihubung singkat 4. DSR dan DTR dihubung singkat 5. GND dihubungkan ke GND komputer lain

Program Komunikasi Serial antara 2 PC (SerialPC.asm) TITLE Komunikasi data serial antara 2 PC .model small .stack .data Message db ‘Komunikasi serial melalui Com2,4800,tanpa parity, 1 stop, 8 bit

data.’,0ah,0dh db ‘key apa saja ditekan akan dikirim ke komputer lain ‘,0ah,0dh db ‘Tekan ESC untuk keluar’,’$’ .code main proc mov ax,@data mov,ds,ax mov ah,09 mov dx, offset message int 21h ;inisialisasi com2 mov ah,0 ;inisialisasi port com mov dx,1 ;com2 mov al,0c3h ;4800,tanpa parity,1 stop, 8 bit data int 14h ;mengcek key yang ditekan dan dikirim ke com2 untuk transfer data again: mov ah,01 ;cek key yang ditekan menggunakan int 16h, ah=01 int 16h ;jika ZF=1, tidak ada key yang ditekan jz next ;jika tidak ada key cek port port mov ah,0 ;ya, ada key yang ditekan, ambil ! int 16h ;kita harus menggunakan int 16h 2 kali, untuk keuda kalinya ;dengan ah=0 untuk mengambil karakter. al=ascii karakter yang ditekan cmp al,1bh ;apakah key ESC? Je exit ;ya exit

Page 3: PC Interfacing

Mov ah,1 ;tidak, kirim karakter ke com2 Mov dx,01 Int 14h ;cek com2 untuk melihat apakah ada karater, jika ada ambil dan tampilkan next: mov ah,03 ;ambil status com2 mov dx,01 int 14h and ah,01 ;ah mempunyai status com, mask seluruh bit kecuali D0 cmp ah,01 ;cek D0 untuk melihat jika ada sebuah karakter jne again ;tidak ada data, untuk memonitor keyboard mov ah,02 ;ya, com2 mempunyai data, ambil! Mov dx,01 Int 14h ;ambil Mov dl,al ;dan tampilkan menggunakan int 21h Mov ah,02 ;dl mempunyai karakter yang akan ditampilkan Int 21h Jmp again ;terus memonitor keyboard Exit: mov ah, 4ch ;keluar ke DOS Int 21h Main endp End Anda juga dapat memprogram komunikasi serial antara 2 PC menggunakan C dengan lebih mudah . Berikut program komunikasi data serial menggunakan fungsi BIOSCOM. Program Komunikasi serial menggunakan C (SerialC.c) //Program komunikasi serial menggunakan fungsi bioscom //Dibuat oleh Widodo Budiharto //nilai port 0 untuk COM1, 1 untuk COM2 dan seterusnya. //8 bit teratas dari return value ialah untuk status //8 bit terendeah tergantung pada perintah yang telah ditentukan //perintah dapat berisi : // 0 |Sets the communications parameters to the value in abyte. // 1 | Sends the character in abyte out over the communications line // 2 | Receives a character from the communications line. // 3 | Returns the current status of the communications port. //abyte ialah kombinasi dari bit berikut // 0x02 | 7 data bits 0x00 110 baud // 0x03 | 8 data bits 0x20 150 baud // 0x40 300 baud // 0x00 | 1 stop bit 0x60 600 baud // 0x04 | 2 stop bits 0x80 1200 baud // 0x00 | No parity 0xA0 2400 baud // 0x08 | Odd parity 0xC0 4800 baud // 0x18 | Even parity 0xE0 9600 baud //Sebagai contoh, 0xEB //(0xE0|0x08|0x00|0x03) untuk abyte akan menset //port komunikasi ke 9600 baud, odd parity,1 stop bit, dan 8 bit data //bioscom menggunakan BIOS 0x14 interrupt. //Menyertakan header file yang dibutuhkan #include <bios.h> #include <conio.h> //definisi port #define COM1 0 #define DATA_READY 0x100 #define TRUE 1 #define FALSE 0 //definisi settings #define SETTINGS ( 0x80 | 0x02 | 0x00 | 0x00) int main(void) { int in, out, status, DONE = FALSE; bioscom(0, SETTINGS, COM1);//3 parameter dari bioscom cprintf("Komunikasi serial menggunakan BIOSCOM, tekan [ESC] untuk keluar \n"); while (!DONE) { status = bioscom(3, 0, COM1); if (status & DATA_READY) if ((out = bioscom(2, 0, COM1) & 0x7F) != 0)

Page 4: PC Interfacing

putch(out); if (kbhit()) { if ((in = getch()) == '\x1B') DONE = TRUE; bioscom(1, in, COM1); } } return 0; } Jika Anda ingin membuat aplikasi menggunakan bahasa Visual Basic .NET, menggunakan kelas Rs232, berikut contohnya : ‘ Program Inisialisasi dan membuka port komunikasi Private Sub btnOpenCom_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnOpenCom.Click

moRS232 = New Rs232() ‘buat ojek serial Try '// setup parameter koneksi With moRS232 .Port = miComPort .BaudRate = CInt(txtBaudrate.Text) .DataBit = 8 .StopBit = Rs232.DataStopBit.StopBit_1 .Parity = Rs232.DataParity.Parity_None .Timeout = CInt(txtTimeout.Text)

.WorkingMode = CType(IIf(chkOl.Checked, Rs232.Mode.Overlapped, Rs232.Mode.NonOverlapped), Rs232.Mode)

btnAsyncTx.Enabled = (.WorkingMode = Rs232.Mode.Overlapped) btnAsync.Enabled = (.WorkingMode = Rs232.Mode.Overlapped) chkOl.Enabled = False End With '// inisialisasi port serial moRS232.Open() '// Set state of RTS / DTS moRS232.Dtr = (chkDTR.CheckState = CheckState.Checked) moRS232.Rts = (chkRTS.CheckState = CheckState.Checked) Catch Ex As Exception MessageBox.Show(Ex.Message, "Error koneksi ", MessageBoxButtons.OK) Finally btnCloseCom.Enabled = moRS232.IsOpen btnOpenCom.Enabled = Not moRS232.IsOpen btnTx.Enabled = moRS232.IsOpen btnRx.Enabled = moRS232.IsOpen btnCheck.Enabled = moRS232.IsOpen End Try End Sub Untuk menulis data, gunakan fungsi-fungsi berikut ini : Private Sub Kirim_Click_1(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnTx.Click ‘gunakan fungsi write() moRS232.Write(txtTx.Text) 'moRS232.Write(Chr() & Chr(3) & Chr(0) & Chr(0) & Chr(0) & Chr(16) & Chr(68) & Chr(83)) ' Bersihkan textbox txtRx.Text = String.Empty txtRx.Refresh() lbHex.Items.Clear() If chkAutorx.Checked Then Button1_Click(Nothing, Nothing) End Sub Untuk membaca data gunakan fungsi-fungsi Read dan InputStreamString seperti berikut : Try ‘gunakan fungsi Read() moRS232.Read(CInt(txtBytes2Read.Text)) txtRx.Text = moRS232.InputStreamString txtRx.ForeColor = Color.Black txtRx.BackColor = Color.White

Page 5: PC Interfacing

'// Fills listbox with hex values Dim aBytes As Byte() = moRS232.InputStream Dim iPnt As Int32 For iPnt = 0 To aBytes.Length - 1 lbHex.Items.Add(iPnt.ToString & ControlChars.Tab & String.Format("0x{0}",

aBytes(iPnt).ToString("X"))) Next

Catch Ex As Exception txtRx.BackColor = Color.Red txtRx.ForeColor = Color.White txtRx.Text = "Terjadi error " & Ex.Message & " data fetched: " & moRS232.InputStreamString End Try

Gambar Program Komunikasi Serial VB .NET Kita juga dapat menggunakan komponen yang sudah dibuat oleh suatu perusahaan, misalnya PortController.Net yang terdapat pada CD Program, sehingga pemrograman menjadi lebih mudah seperti contoh mebuka dan menulis ke suatu port serial berikut : Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load myPortController.Open("COM1") End Sub Private Sub SendButton_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles SendButton.Click myPortController.Write(SendText.Text) SendText.Clear() End Sub Private Sub myPortController_OnDataReceived(ByVal sender As Object, ByVal e As System.EventArgs) Handles myPortController.OnDataReceived ReceiveText.AppendText(myPortController.Read()) End Sub Jika hanya menggunakan bahasa Visual Basic 6, tempelkan kontrol MSComm1, dan masukkan kode untuk menset MSComm1 dimana memperoleh input dari suatu combobox berikut : MsComm1.commPort=cmbPort.ListIndex +1 MsComm1.Settings=cmbbitspersecond.text MSComm1.Handshaking=cmbFlowControl.LinstIndex

Page 6: PC Interfacing

Interfacing Port Paralel Pengenalan Port Paralel 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 Compatibilitas, 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 computer. 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 berate 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 control. Berikut ialah tabel nama pin dari konekter DB25 dan Centronics dengan jumlah konektor 34. DB25 ialah konektor yang umum digunakan di computer 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 1284 tipe A ialah konektor DB25 yang dapat ditemukan di hampir semua komputer, 1284 tipe B ialah konektor Centronics 36 pin yang umum ditemukan di printer, IEEE 1284 type C ialah konektor 36 pin seperti Centronics, tetapi ukurannya lebih kecil dan lebih memuaskan.

Page 7: PC Interfacing

Tabel Nama pin dari konektor parallel port DB 25 dan Centronics

Pin DB25 Pin Centronics

Sinyal SPP

Arah In/out Register Hardware di invert

1 1 nStrobe In/Out Control Ya 2 2 Data 0 Out Data 3 3 Data 1 Out Data 4 4 Data 2 Out Data 5 5 Data 3 Out Data 6 6 Data 4 Out Data 7 7 Data 5 Out Data 8 8 Data 6 Out Data 9 9 Data 7 Out Data

10 10 nAck In Status 11 11 Busy In Status Ya 12 12 Paper-Out /

Paper-End In Status

13 13 Select In Status 14 14 nAuto-

Linefeed In/Out Control Ya

15 32 nError / nFault

In Status

16 31 nInitialize In/Out Control 17 36 nSelect-

Printer / nSelect-In

In/Out Control Ya

18 - 25 19-30 Ground Gnd

Untuk mengeluluarkan data di port parallel, anda gunakan fungsi outport (8 bit ) dan outportb(16 bit) sebagai berikut :

Program pengendali lampu led di port paralel(iopar.c) #include <conio.h> #include <stdio.h> #include <stdlib.h> int main() { outport(0x378,0);//lampu led mati sleep(5); //tunda 5 detik outport(0x378,1); //lampu led hidup sleep(5); return 0; } Program Visual C++ untuk pengendali lampu led di port paralel #include <conio.h> #include <stdio.h> #include <stdlib.h> int main() { _outp(0x378,0); // model visual C++ untuk outport _sleep(1000); _outp(0x378,1); _sleep(1000); return 0; }

Page 8: PC Interfacing

Jika anda ingin menggunakan Bahasa Visual Basic, maka Anda harus mengimport file inpout32.dll ke direktori c:\windows, c:\windows\system dan default direktori program anda untuk memastikan file ini dapat ditemukan, file .dll ini dapat Anda temukan di widodo.com/downloads/downloads.html. Pada Sistem Operasi Berbasis Windows 2000 keatas, biasanya tidak bisa mengakses hardware secara langsung, anda membutuhkan program pendukung misalnya Userport.

Gambar 9.1 Contoh aplikasi VB

Berikut contoh kodenya : Private Declare Function Inp Lib "inpout32.dll" _ Alias "Inp32" (ByVal PortAddress As Integer) As Integer Private Declare Sub Out Lib "inpout32.dll" _ Alias "Out32" (ByVal PortAddress As Integer, ByVal Value As Integer)Dim Port1 As Integer Private Sub Command1_Click() Port1 = 888 Out Port1, 1 End Sub Private Sub Command2_Click() Port1 = 888 Out Port1, 0 End Sub

Gambar Rangkaian LED ke port parallel Gambar berikut contoh penggunakan port paralel untuk mengendalikan 5 buah 7 segment menggunakan IC 74LS244 dan 75492, anda juga dapat kembangkan menggunakan dot matrix 5x7. Perlu diketahui bahwa port control di port paralel menggunakan jenis open kolektor, dimana jika diukur dnegan voltmeter, maka output port control akan selalu bernilai tinggi (5V). Yang dibutuhkan di sini ialah kecerdikan anda di dalam membuat program , jika dilihat dari gambar, 7 segment membutuhkan 7 input yang berasal dari 74LS244. Sedangkan untuk memilih 7 segment mana yang aktif Anda cukup memberikan pulsa ke pin IC 75492 yang sesuai. Alamat port paralel umumnya 378H, Jika anda menggunakan bahasa Pascal untuk mengeluarkan data ke port paralel berikut contoh kodenya :

Prosedure lampu_hidup_naik; Begin

I:=1; repeat Port[$378]:=I; I:=I*2; until I>255;

End; Jika anda ingin menggunakan bahasa C, akan lebih baik alamat port anda definisikan sebagai berikut

#define PORT 0x378

Page 9: PC Interfacing

Gambar Contoh aplikasi port paralel Alamat Port Port Paralel mempunyai 3 alamat seperti pada tabel 9.2. 3BCH ialah alamat dasar yang diperkenalkan sejak munculnya port Paralel pada kartu video yang kemudian tidak digunakan lagi . LPT1 ialah line printer dengan alamat 378h, lalu LPT2 dengan alamat 278H meskipun alamat ini dapat dirubah. Saat ini, alamat 378H dan 278H umumnya digunakan sebagai alamat port Paralel .

Tabel Alamat port paralel

Ketika komputer

dihidupkan, BIOS (Basic Input/Output System) akan menentukan jumlah port yang anda miliki dan mengeset nama LPT1, LPT2 & LPT3 ke masing-masing port tersebut. BIOS pertama kali mencari alamat 3BCH. Jika parallel port ditemukan di sana,BIOS akan mengeset dengan nama LPT1, lalu mencari alamat lainnya yaitu 378H.Berikut contoh program menerima data dari port paralel , dimana base alamatnya ialah 379H.: Program penerima data port paralel (paralel.c) #include <stdio.h> #include <dos.h> #include <conio.h> /*****************************************/ /*membaca input data dari port paralel */ /*****************************************/ int Read_Input() { int Byte; Byte=inportb(0x378); return Byte; } void main (void) { int PP_Input; clrscr(); PP_Input = Read_Input(); printf("%d",PP_Input); getch();} Ketika BIOS mengeset alamat ke peralatan printer Anda, ia menyimpan alamat pada lokasi tertentu di memory, seperti pada Tabel 9.3. Alamat 0000:040E pada BIOS Data Area mungkin digunakan sebagai Extended Bios Data Area di PS/2 dan BIOS yang lebih baru .

Tabel Alamat LPT di BIOS Data Area

Alamat Awal Fungsi 0000:0408 LPT1's Base Address 0000:040A LPT2's Base Address

Alamat Penjelasan 3BCH - 3BFH Digunakan untuk paralel port di kartu

video, tidak mendukung alamat ECP 378H - 37FH Alamat untuk LPT 1 278H - 27FH Alamat untuk LPT 2

Page 10: PC Interfacing

0000:040C LPT3's Base Address 0000:040E LPT4's Base Address

Tabel diatas menampilkan alamat dimana kita dapat mencari alamat port printer pada BIOS Data Area. Tiap alamat membutuhkan 2 byte. Kode berikut ialah contoh program pencarian alamat port printer di komputer Anda. Program mencari alamat port paralel(Caripar.c) #include <stdio.h> #include <dos.h> void main(void) { unsigned int far *ptraddr; /* Pointer ke lokasi alamat port */ unsigned int address; /* alamart Port */ int a; ptraddr=(unsigned int far *)0x00000408; for (a = 0; a < 3; a++) { address = *ptraddr; if (address == 0) printf(" port tidak ditemukan di LPT%d \n",a+1); else printf("Alamat yang diset di LPT %d ialah %Xh\n",a+1,address); *ptraddr++; } Aplikasi Port Paralel Berikut contoh program C untuk mengontrol 8 buah alat melalui penekanan tombol keyboard : Program pengontrol menggunakan port parallel (Kontrolpar.c) /* Program untuk mengontrol peralatan menggunakan port paralel . Alat dikontrol dengan menekan tombol 1-8 di keyboard. */ #include<dos.h> #include<stdio.h> #include<conio.h> #define PORT 0x378 /* alamat port paralel */ main() { char val=0,key=0; char str1[]="ON "; char str2[]="OFF"; char *str; clrscr(); printf("Tekan key yang sesuai untuk menghidupkan /mematikan alat \n\n"); printf("Alat ke 1 terhubung ke D0 port paralel , begitu seterusnya \n\n"); printf("Tekan \"x\" untuk keluar\n\n"); gotoxy(1,8); printf("Device1:OFF Device2:OFF Device3:OFF Device4:OFF\n"); printf("Device5:OFF Device6:OFF Device7:OFF Device8:OFF"); while(key!='x' && key!='X') //Jika yang ditekan bukan X { gotoxy(1,12); printf("Nilai dalam format hex telah dikirim ke port:"); key=getch(); switch(key){ case '1': //jika kita menekan 1 di keyboard gotoxy(9,8); val=(val&0x01)?(val&(~0x01)):val|0x01; str=(val&0x01)?str1:str2; printf("%s",str); outportb(PORT,val); gotoxy(1,13);

Page 11: PC Interfacing

printf("%x",val); break; case '2': gotoxy(21,8); val=(val&0x02)?(val&(~0x02)):val|0x02; str=(val&0x02)?str1:str2; printf("%s",str); outportb(PORT,val); gotoxy(1,13); printf("%x",val); break; case '3': gotoxy(33,8); val=(val&0x04)?(val&(~0x04)):val|0x04; str=(val&0x04)?str1:str2; printf("%s",str); outportb(PORT,val); gotoxy(1,13); printf("%x",val); break; case '4': gotoxy(45,8); val=(val&0x08)?(val&(~0x08)):val|0x08; str=(val&0x08)?str1:str2; printf("%s",str); outportb(PORT,val); gotoxy(1,13); printf("%x",val); break; case '5': gotoxy(9,9); val=(val&0x10)?(val&(~0x10)):val|0x10; str=(val&0x10)?str1:str2; printf("%s",str); outportb(PORT,val); gotoxy(1,13); printf("%x",val); break; case '6': gotoxy(21,9); val=(val&0x20)?(val&(~0x20)):val|0x20; str=(val&0x20)?str1:str2; printf("%s",str); outportb(PORT,val); gotoxy(1,13); printf("%x",val); break; case '7': gotoxy(33,9); val=(val&0x40)?(val&(~0x40)):val|0x40; str=(val&0x40)?str1:str2; printf("%s",str); outportb(PORT,val); gotoxy(1,13); printf("%x",val); break; case '8': gotoxy(45,9); val=(val&0x80)?(val&(~0x80)):val|0x80; str=(val&0x80)?str1:str2; printf("%s",str); outportb(PORT,val); gotoxy(1,13); printf("%x",(unsigned char)val); break; } } }

Page 12: PC Interfacing

Program diatas segera akan mengeluarkan data ke port paralel ketika user menekan tombol keyboard menggunakan fungsi case, dan menggunakan fungsi outportb untuk mengendalikan port . Fungsi gotoxy untuk menempatkan string pada posisi x dan y yang telah ditentukan, serta fungsi break untuk berhenti, berikut potongoan kodenya : case '1': //jika kita menekan 1 di keyboard gotoxy(9,8); val=(val&0x01)?(val&(~0x01)):val|0x01; str=(val&0x01)?str1:str2; printf("%s",str); outportb(PORT,val); gotoxy(1,13); printf("%x",val); break; Untuk mendeteksi alamat port printer apa saja yang telah diset pada port parallel, gunakan perintah debug sebagai berikut :

Gambar Menggunakan perintah debug untuk melihat alamat LPT1 Dari gambar diatas terlihat LPT1 diset dialamat 378H dan ada alamat lainnya yang telah diset juga. Contoh aplikasi berikut akan mengukur suhu melalui port parallel dan sensor DS1722. Pin SERMODE ialah Serial interface mode, sedangkan CE ialah Chip Enable seperti penjelasan pada Tabel Tabel No Pin dan Fungsi DS1722

No. Pin Nama Pin Keterangan

7 SERMODE Serial Interface Mode 2 CE Chip Enable 3 SCLK Serial Clock 5 SDO Serial Data Out 6 SDI Serial Data In 8 VDDA Analog supply voltage

Page 13: PC Interfacing

Gambar Rangkaian sensor temperatur Terlihat pada gambar, yang dibutuhkan hanya sinyal SCK, SDI dan SD0 untuk mengirim data ke port parallel. An3315.pdf merupakan tutorial menulis program bahasa C untuk 2 wire di port parallel. Program Sensor Temperatur DS1722 (Ds1722.c) // Sensor berbasis DS1722 di port Paralel #include <stdio.h> #include <dos.h> #include <conio.h> #include <process.h> #include <alloc.h> #define VDD_ON 0x01 /* power to PIC through VDD_ON on pin 2 (D0) */ #define SCK 0x02 /* serial clock for SPI provided by PC */ #define PCSDO 0x04 /* serial data out from PC on Data bit 2 */ #define PCSDI 0x20 /* note this is on Status register (bit 1) */ #define SSOUT 0x40 /* =CE, active high, not low as for PIC SPI */ #define MCLR_HI 0x80 /* MCLR* on pin 9 (Data bit 7) normally high */ #define OPERATE VDD_ON | MCLR_HI /* normal operation of DS1722 */ /* adjust these to match the CPU speed */ #define DELTIME 10000 /* settling time after transfers */ #define SECDELA 10000000 /* to get about 1 s sampling */ void dodelay(long); void outportd(unsigned char); int dport,sport; void main(void) { unsigned char LSB,transfer(unsigned char,unsigned char); char MSB; /* note this is signed */ void outportd(unsigned char outbyte); int i,j,it; float T; /* LPT1 port addresses */ if(!(dport = peek(0x40,0x08))) { printf("\n\n\nLPT1 not available... aborting\n\n\n"); exit(1); } sport = dport + 1; /* status port address */ /* Initialize the Printer DATA Port for PIC operation */ /* includes putting SCK in the neutral 0 position: ~ is bitwise negation */ outportd(OPERATE&~SSOUT); printf("hit key to stop list\n"); transfer(0x80,0xE8); /* initialize DS1722 */ for(j=0;j<20;j++) { if(kbhit()) break; printf(" config %X: ",transfer(00,0)); dodelay(SECDELA); printf(" LSB %X: ",LSB=transfer(0x01,0)); dodelay(SECDELA); printf(" MSB %X: ",MSB=transfer(0x02,0)); dodelay(SECDELA); printf("T=%10.4f\n",T=MSB+(float)LSB/256.); } /* for loop */ } unsigned char transfer(unsigned char outbyte,unsigned char outdata) { /* output address byte on Data2, data byte, getting inbyte on Status5 */ unsigned char outmask,inbyte,statusmask; int ibit; inbyte=0x00; /* raise SSOUT for 2 byte transfer, SCK also in lowered neutral position */ outportd(OPERATE|SSOUT); for(ibit=0;ibit<8;ibit++) { outportd(OPERATE|SCK|SSOUT); outmask=outbyte&0x80; outbyte=outbyte<<1; if(outmask)outportd(OPERATE|SCK|PCSDO|SSOUT); /* output of 1 or */

Page 14: PC Interfacing

else outportd(OPERATE|SCK|SSOUT); /* of 0 on PCSDO */ if(outmask)outportd(OPERATE|PCSDO|SSOUT); /* lower clock SCK */ else outportd(OPERATE|SSOUT); /* retaining data */ } for(ibit=0;ibit<8;ibit++) /* output outdata */ { /* & input inbyte */ outportd(OPERATE|SCK|SSOUT); /* raise clock SCK */ outmask=outdata&0x80; outdata=outdata<<1; if(outmask)outportd(OPERATE|SCK|PCSDO|SSOUT); /* output of 1 or */ else outportd(OPERATE|SCK|SSOUT); /* of 0 on PCSDO */ if(outmask)outportd(OPERATE|PCSDO|SSOUT); /* lower clock SCK */ else outportd(OPERATE|SSOUT); /* retaining data */ statusmask=inportb(sport); /* read status port*/ statusmask=statusmask&PCSDI; /* mask input line */ inbyte=inbyte<<1; inbyte=inbyte&0xFE; inbyte|=statusmask>>5; } /* lower SSOUT at end of 2 byte transfer, lower SCK to neutral position */ outportd(OPERATE&~SSOUT); return inbyte; } void outportd(unsigned char outbyte) { dodelay(DELTIME); outportb(dport,outbyte); dodelay(DELTIME); } void dodelay(long deltime) { long i; for(i=0; i<deltime; i++) ; } Pada program diatas, program melakukan pendeteksian Port LPT1, lalu melakukan inisialisasi DS1722 untuk membaca temperatur dan dikirim ke port LPTI1 dengan delay tertentu. Interfacing Port ISA Gambar berikut merupakan format DAC yang umum, dimana input berupa 8 bit atau lebih, dan outputnya berupa sinyal analog, yang biasanya diperoleh dari suatu rangkaian op-amp

Gambar Blok diagram DAC standar Ada 3 modus operasi pada PIO 8255 yang dapat dipilih melalui software yaitu :

Mode 0 : basic input/output Mode 1 : strobed input/output Mode 2: bidirectional bus

Jika reset input mendapat input high, semua port akan diset ke mode input dimana semua 24 jalur ditahan pada logika 1 oleh bus internal. PPI 8255 dapat dibuat sebagai antarmuka DAC atau ADC. Untuk mencoba DAC yang terprogram paling mudah menggunakan PPI 8255 dalam mode 0. Langkah-langkah:

Pasang Card PPI 8255 ISA, anda juga dapat menggunakan Card PPI 8255 berbasiskan PCI

Hubungkan DAC ke port A Hubungkan keluaran DAC ke Osiloskop Buat program berikut :

//Program Pembangkit sinyal Sinus berbasis 8255

Page 15: PC Interfacing

#include <conio.h> #include <stdio.h> #include <math.h> main() { printf (“======================”); printf (“ Pembangkit sinyal sinus\n”); outp (0x303, 0x80); //konfigurasi 8255 printf (“======================”); unsigned char v1; float Vout, magnitude; int a; printf (“\n Tekan sembarang tombol untuk keluar\n”) do { for (a=0;a<360;a++)

{ Vout =5.0 +5.0* sin ((3.14*a)/180)); magnitude=Vout*25.6; v1=(char)magnitude; delay(1); outp(0x300,v1) }

} while (!kbhit()); return (0); } Program diatas akan membangkitkan sinyal sinus karena terdapat pembangkitan nilai sinus pada rumus Vout =5.0 +5.0* sin ((3.14*a)/180)). Alamat yang digunakan ialah 300H, yang merupakan alamat standar port ISA untuk eksperimen. Contoh berikut menerapkan PPI 8255 dengan V B 6.

Private Declare Function Inp Lib "inpout32.dll" Alias "Inp32" (ByVal PortAddress As Integer) As Integer Private Declare Sub Out Lib "inpout32.dll" Alias "Out32" (ByVal PortAddress As Integer, ByVal Value As Integer) Private Declare Sub Sleep Lib "Kernel32" (ByVal dwMilliseconds As Long) Private Sub Form_Load() End Sub Out &H303, &H90 'End Sub Private Sub Timer1_Timer()

Page 16: PC Interfacing

Label3.Caption = Format(Date, "dd-mmm-yyyy") Label4.Caption = Format(Time, "hh:mm:ss") End Sub Private Sub Timer2_Timer() Label2.Text = Inp(&H300) If x = 50 Then Out &H301, &H1 End If End Sub USB (Universal Serial Bus) Mengenal USB USB ialah port yang sangat diandalkan saat ini dengan bentuknya yang kecil dan kecepatan datanya yang tinggi. Anda dapat menghubungkan hingga 127 produk usb dalam 1 komputer. USB versi 1.1 mendukung 2 kecepatan yaitu mode kecepatan penuh 12Mbits/s dan kecepatan rendah 1.5 Mbits/s. USB 2.0 mempunyai kecepatan 480Mbits/s yang dikenal sebagai mode kecepatan tinggi. Saat ini transfer data menggunakan port USB sudah semakin marak, port USB menjadi pilihan utama karena ukuran yang ringkas dan kecepatan transfer data yang cukup besar. Sebagai perbandingan, Bus PCI saat ini mendukung transfer data hingga 132 MB/s, dimana AGP (pada 66MHz) mendukung hingga 533 MB/s. AGP dapat melakukan ini karena kemampuannya untuk mentransfer data pada ujung naik dan turun detak 66MHz. Ada dua macam konektor USB : konektor A untuk hubungan ke host dan konektor B untuk hubungan ke peranti USB . Secara fisik dapat dibedakan dengan mudah untuk menghindari kesalahan pemasangan.

Konektor jenis A Konektor jenis B

Gambar Konektor USB

Untuk menghubungkan lebih luas seperti menghubungkan ke piranti berukuran kecil layaknya seperti handphone, PDA, dan sebagainya. Dibuat untuk konektor mini-A dan mini-AB. Semua jenis konektor USB di hubungkan dengan empat kabel sebagaimana tabel berikut di bawah ini Tabel Pengkabelan USB. Pin Warna Kabel Fungsi 1 Merah VBus ( 5 volt ) 2 Putih D- 3 Hijau D+ 4 Hitam Ground Fungsi USB Suatu piranti USB dapat dikatakan sebagai sebuah alat transceiver( pengirim sekaligus penerima ) Baik host maupun USB itu sendiri. Sebuah istilah baru di perkenalkan, yakni USB function yang maksudnya adalah peralatan USB yang memilki kemampuan khusus. Seperti printer, scanner, modem, dan lain-lainnya.

Data dikirim secara serial, maka piranti USB harus mampu menangani gelombang kontinyu. Gelombang ini di hubungkan langsung ke pin data USB dari sebuah sumber tegangan dengan impedansi output 39. Sumber tegangan rangkaian terbuka untuk keperluan ini ada pada kemungkinan terburuk dari adanya overshoot dan undershoot. Pada koneksi USB dengan kecepatan 12 MHz digunakan kabel twisted-pair yang terlindung dengan impedansi 90 kurang lebih 15% dan delay maksimumnya

Page 17: PC Interfacing

26ns.Sedang impedansi pada drivernya harus antara 28 hingga 44. Jika di ukur, arus yang masuk dan keluar piranti USB V1.1 tidak boleh melebihi 10,71 VOH mA. Tegangan logika yang di masukan ke D+ dan D- tidak boleh melebihi 0.3 VOH untuk logika rendah dan juga harus turun sebesar 0.7 VOH untuk logika tinggi. Karena ada piranti USB yang berkomunikasi pada kecepatan rendah 1.5 MHz, maka kombinasi kabel dan piranti USB harus mengandung kapasitas tunggal dengan nilai 200pF hingga 450pF di pin D+ dan D-. Perambatan delay pada kabel kecepatan rendah harus kurang dari 18 ns. Data sinyal yang naik turun diukur dari 10% hingga 90% dari sinyal,dengan toleransi 10%. Waktu untuk ini dari 4ns hingga 20ns, tergantung kecepatan USB yang digunakan. Sudah saatnya anda membangun aplikasi menggunakan port USB. Jika anda ingin membangun sistem elektronika berbasis port USB, dapat menggunakan chip FTDI atau modul FTDI, antara lain : FT2232C , IC USB UART/FIFO

FT2232L -

Gambar Chip FT2232C IC ini mempunyai fitur :

Single chip USB <=> asynchronous serial data transfer Full handshaking & modem interface signals UART interface mendukung 7/8 data bits, 1/2 stop bits dan

Odd/Even/Mark/Space/No Parity Data transfer rate 300 Baud => 3M Baud (TTL) Data transfer rate 300 Baud => 1M Baud (RS232) Data transfer rate 300 Baud => 3M Baud (RS422/RS485) 384 Byte Rx buffer/128 Byte Tx buffer for high data throughput Rx buffer timeout dapat disesuaikan Dukungan built-in untuk event characters dan kondisi line break Auto transmit buffer control untuk RS485 Mendukung USB suspend/resume through SLEEP# and RI# pins Mendukung daya tinggi USB bus powered devices melalui pin PWREN# Integrated level converter dan UART dan sinyal control untuk interfacing ke

logika 5V dan 3.3V Kompatibel USB 1.1 dan USB 2.0 EEPROM programmable on-board melalui USB

FT245BM, IC USB FIFO kecepatan tinggi IC ini memiliki fitur yang mirip dengan IC TF2232C, untuk aplikasi Modem, PC, instrumentasi dan lain 0lainnya berbasis USB. Selain dapat membeli chip tersebut, kita dapat juga membeli modul-modul DIP menggunakan chip FTDI, antara lain DLP-2232M, yaitu modul menggunakan FT2232C3rd generation Dual USB UART/FIFO

Gambar DLP-2232M

Page 18: PC Interfacing

Versi lainnya seperti DLP-USB245M ialah modul ekonomis menggunakan chip FT245BM sebagai USB FIFO. Modul ini memiliki chip pendukung antara lain 93C46 EEPROM untuk kustomisasi OEM. Beberapa chip dan model lainnya dapat anda miliki dari produk FTDI.

Gambar DLP-USB245M Demikianlah penjabaran dari sistem bus dan penerapannya. Semoga Anda dapat mengembangkan berbagai aplikasi yang berhubungan dengan Bus Komputer. LATIHAN :

1. Buat rangkaian pengendali relay dari port paralel dan PPI 8255 menggunakan

transistor 2N3904 dan 2N3053. Input berlogika tinggi dari keluaran port paralel akan mengaktifkan transistor 2N3904 dan arus diperkuat oleh 2N3053. Rangkaiannya sebagai berikut:

Gambar Rangkaian driver relay