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
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.
Ş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.
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.
Emeği geçen hazırlayan kişilere teşekkürler LPT Paralel port hakkında oldukca faydalı bilgiler verilmş..
Yayım tarihi: 2012/08/15 Etiketler: lpt c örnek, lpt led, lpt pascal, lpt port, paralel port, paralel port pascal
Kodları yapıştırdıgımda hata alıyorum linux üzerinde tanımsız değerler var