Elektronik Devreler Projeler Elektronik ve biraz daha fazlası İletişim - Araçlar - Dikkat - Topluluk
Elektronik / Elektronik Kaynakları/

Paralel Port (LPT) Kullanımı Pascal, C Örnekleri

Sponsorlu Bağlantılar

Her masa üstü bilgisayarda bulunan ve printer portu olarak bilinen paralel port (LPT) bilgisayarla dış dünyanın haberleşmesi için kullanılabilecek programlaması gayet kolay bir porttur. Bu yazıda paralel portu kullanarak önce bir LED’in nasıl yakılacağı anlatılacak daha sonra bir kayan ışık devresi için gerekli donanım ve yazılım verilecektir. Bir LED’in yakılması şu açıdan önemlidir eğer LED yerine bir röle (bir transistor ile sürmek gerekir) veya triyak kullanırsak evde yüksek voltajla çalışan TV, müzik seti, oda aydınlatması gibi çeşitli cihazları ve devreleri kontrol edebiliriz. Bu yazıda C ve Pascal programlama dilleri kullanılacaktır.

Paralel portun en önemli avantajı herhangi bir mikro denetleyiciye veya başka bir entegreye gerek kalmadan porta gönderilen bilginin görülebilmesidir. Bu bilgisayarın ana kartı üzerindeki latchlerle mümkün olmaktadır.

Paralel portun dezavantajı ise uzak mesafeler için uygun olmamasıdır. Bunun sebebi hem taşıma için çok kablo gerekmesi ve paralel port sinyallerinin kısa mesafelerde zayıflamasıdır.

LPT Paralel Portun Pin Konfigürasyonu

Paralel port bilgisayarın arkasında 25 pinlik dişi (female) bir sokettir. Pinlerin isimleri ve numaraları aşağıdaki tabloda verilmiştir.

PARALEL PORT (LPT) bağlantıları konnektör female DB25

paralel-port-lpt-baglantilari-konnektor-female-db25

D

Description

Name

Pin

Pin

Name

Description

D

– I/O

Strobe

STROBE

1

14

AUTO FEED

Auto-Feed

– O

I/O

Data Bit 0

D0

2

15

ERROR

Error

– I

I/O

Data Bit 1

D1

3

16

INIT

Init (Reset)

– O

I/O

Data Bit 2

D2

4

17

SLCT IN

Select In

– O

I/O

Data Bit 3

D3

5

18

GND

Ground

/

I/O

Data Bit 4

D4

6

19

GND

Ground

/

I/O

Data Bit 5

D5

7

20

GND

Ground

/

I/O

Data Bit 6

D6

8

21

GND

Ground

/

I/O

Data Bit 7

D7

9

22

GND

Ground

/

– I

Acknoledge

ACK

10

23

GND

Ground

/

I

Busy

BUSY

11

24

GND

Ground

/

I

Paper End

PE

12

25

GND

Ground

/

I

Select Out

SLCT

13

S

GND

Chasis Ground

/

Yukarıdaki tablodan görülebileceği gibi 2~9 arası pinler data pinleridir. 18~25 arası pinler toprak (ground) olarak kullanılır. 1,14,16,17 pinleri kontrol pinleri, 15,13,12,10,11 pinleri status pinleridir. Kontrol ve status pinlerinin kullanımı bu yazının kapsamı dışındadır.

Paralel Portla basit bir Pascal uygulaması

İlk uygulamamız paralel portun 2. ve 18. (18 yerine 19~25 pinlerinden biri de kullanılabilir) pinlerine bağlı bir LED’i yakmak olacak. Aşağıda görülen devrede en üstteki pin 1. pindir. Görüldüğü gibi 18 den 25 kadar olan pinler topraklanmıştır. LED in anot ucu 2. pine katot ucu toprağa bağlanmıştır.

paralel-portla-basit-bir-pascal-uygulamasi

Şimdi bu devreyi çalıştırmak için gerekli kaynak kodunu önce Pascal`da daha sonrada C de verelim.

Pascal kodu:

program portden (input,output);
uses crt,dos;
var
data:integer; {a byte olarakta tanımlanabilir}
begin
clrscr;
data:=1;
port[$378]:=data; {378 LTP1 in adresidir}
writeln('Porta ’,data,’ gönderildi’); {porta gonderilen data ekranda da okunur}
readln;
end.

Pascal kodunda kullanılan komutlardan bazıları tanıdık gelmemiş olabilir. Pascalda porta bir bilgi yazmak için port[$xxx] komutu kullanılır. 378 LTP1 in (parallel port) bilgisayar (bios) tarafından tanınmasını sağlar. Porta gönderilen bilgi ekranda görülebilir. LED’i söndürmek için a değişkenine 0 atanır. Program tekrar çalıştırıldığında LED söner.

Kendiniz Deneyin 1: Portun geriye kalan 7 pinine (3~9) LED bağlayın ve a değişkenine çeşitli değerler atayın. Yanan LED’ler gönderilen sayının binary (ikilik düzen) karşılığı olacak örneğin data değişkenine 25 sayısı atandığında LED’lerde binary 00011001 sayısı okunacaktır. 1 yanan 0 sönen LED’leri göstermektedir.

C kodu:

main()
{
int port=0x378; /*parallel portun adresi */
int data;
clrscr();
data=1;
printf("Porta %d gönderildi",data);
outport(port,data);
getch();
return 0;
}/*main*/

Yine 378 LTP1 in adresidir. 0x hexadecimel sayıları göstermek için kullanılır. Kendiniz Deneyiniz 1’i C koduyla tekrarlayınız.

Paralel Portla Kayan ışık (Walking Light)

Bu uygulamamızda paralel porta 8 tane LED bağlı olmalıdır.LED’ler sırasıyla yanarak ilerleyecek sona gelince tekrar o baştan başlayarak geriye doğru yanacaktır. LED’ler arasındaki atlama hızı delay(x) içine yazılan x sayısı ile ilgilidir. Aşağıdaki şekilde portun ilgili pinleri ve LED bağlantıları gösterilmiştir.

paralel-portla-kayan-isik-walking-light

Yukarıdaki devreyi çalıştıracak yazılım aşağıda önce Pascal daha sonra C de verilmiştir.

Pascal kodu:

uses crt;
var
data:integer;
i:integer; (*sayıcı*)
begin
repeat
clrscr;
for i:=0 to 7 do
begin
delay(5000); (*ledler arası atlama suresini belirler*)
data:=trunc(exp(i*ln(2))); (*1,2,4,8,16,32,64,128 üretir*)
port[$378]:= data; (*datayı parallel porta gönderir*)
writeln(data); (*porta gonderilen sayının decimal (ondalık)
degeri ekranda görülür.*)
end;
delay(5000);
for i:=7 downto 0 do
begin
data:=trunc(exp(i*ln(2))); (*128,64,32,16,8,4,2,1 üretir*)
port[$378]:= data; (*data yı parallel porta gönderir*)
writeln(data); (*porta gonderilen sayının decimal (ondalık)
degeri ekranda görülür.*)
delay(5000); (*ledler arası atlama suresini belirler*)
end;
until keypressed;
end.

Pascal koduyla ilgili birkaç açıklama sanırım faydalı olacaktır. delay(5000) komutu her LED’in yanık kalma süresini belirler eğer 5000 sayısı yerine çok küçük bir sayı seçilirse bütün LED’ler aynı anda yanıkmış gibi görünür. LED’ler titrek yanar. 5000 sayısı yerine bir sabit kullanarak çeşitli sayılar için deneyiniz. Writeln komutu porta gönderilen sayının decimal karşılığını ekranda göstermek için kullanılmıştır.

Pascal koduyla ilgili birkaç açıklama sanırım faydalı olacaktır. İkilik düzenden (binary) onluk düzene çevirmeyi bir örnekle görelim.

Örnek: (1101100)2 sayısının onluk düzende değerini bulalım

( 1 1 0 1 1 0 0)2 =1×26 +1×25 +0x24 +1×23 +1×22 +0x21 +0x 20 =108

26 25 24 23 22 21 20

Yukarıdaki örnekten anlaşılacağı üzere eğer 1. LED’i yakmak istiyorsak porta gönderilecek sayı (00000001) decimal 1 olmalıdır. 2. LED’i yakmak için ise (00000010) decimal 2 sayısı porta gönderilmelidir. 3. LED’i yakmak için porta gönderilmesi gereken sayı (00000100) decimal 4 tür. İşte bu ilişkiyi kurmak için Pascal kodunda trunc(exp(i*ln(2))) ifadesi kullanılmıştır. Bu ifadeyle sırasıyla porta 1,2,4,8,16,32,64,128 gönderilmektedir. Bu sayıların binary karşılığı her LEDin sırasıyla tek başına yanması anlamına gelmektedir. Data:=trunc(exp(i*ln(2))) ifadesini kaldırarak neler olduğunu görünüz.

Yürüyen ışık devresinin C kodu ise şöyledir:

#include <stdio.h>
#include <math.h>
#define n 500
main()
{
int data;
int i; //sayıcı
int port=0x378;/*parallel portun adresi*/
while (!kbhit())
{
clrscr();
for (i=0;i<=7;i++)
{
delay(n);
data=ceil(exp(i*log(2))) ;
outport(port,data);
printf("\n%d",data);
};//for
delay(n);
for (i=7;i>=0;i--)
{
data=ceil(exp(i*log(2))) ;
outport(port,data);
printf("\n%d",data);
delay(n);
} //for
} //while
}/*main*/

ceil Pascal’daki trunc fonksiyonunun işlevini gerçekleştirir. n sayısı değiştirilerek LED’lerin yanık kalma süresi değiştirilebilir. math.h header Not: Pascal’daki delay fonksiyonu içindeki parametre ile C deki farklı zamanlara karşılık gelir.

paralel-port-lpt1-lpt2

Emeği geçen hazırlayan kişilere teşekkürler LPT Paralel port hakkında oldukca faydalı bilgiler verilmş..