|
1.1 Portun
Tanımı
“Paralel port”
nedir? Bilgisayar evreninde port,
mikroişlemcinin, ya da CPU’nun, diğer
bilgisayarlarla veri alışverişinde kullandığı bir
sinyal hatları kümesidir. Portun tipik işlevi
yazıcıyla,modemle, klavyeyle, ekranla –veya sistem
belleği dışındaki herhangi bir aygıt ya da birimle-
iletişimidir. Çoğu bilgisayarın portu dijitaldir.
Yani her sinyal, veya bit, ya
0 ya da
1’dir.
Paralel port, bir defada birden fazla bit transfer
edebilir. Oysa bir seri port bir defada ancak bir
bit transfer yapabilir- bununla birlikte, her iki
yönde de transfer yapması mümkündür.
Biz belli tipte bir
paralel portu ele alacağız. Bu port hemen her PC’de,
yani IBM uyumlu kişisel bilgisayarda mevcuttur.
Paralel port, RS-232 seri portla birlikte, PC
iletişiminin çekici gücüdür. Yeni PC’lerde SCSI ,
USB ve IRDA gibi yeni portlar da yer alabilmektedir.
Ancak paralel port, kapasitesi, esnekliği ve her
PC’de bulunur olma özelliğiyle hala en popüler
olanları arasındadır.
Şekil 1-1
1.2 Paralel Port
Düzeni
Paralel port
bilgisayarın en kolay programlanabilir portudur. 25
pinden oluşmaktadır. Bu pinler üzerinde DATA,
STATUS, CONTROL adında 3 tane port vardır. Bu
pinlerden her hangi bir tanesinin "1" yani YÜKSEK
olması durumu, o pinden okunacak voltajın +5 Volt
olması anlamına gelir. "0" olması ise DÜŞÜK durumunu
yani 0 Volt olduğunu gösterir. Buradan da neden
ikilik sayı sisteminin kullanıldığı anlaşılmaktadır.
Bilgisayar paralel porta
ulaşılabilmesi için porta bir adres atamıştır. Bu
adresi bulmak için Denetim Masasından Sisteme,
oradan da aygıt yöneticisine girilir. Portlara
(Bağlantı Noktaları) gelinir. LPT portunun
Kaynaklarından Giriş-Çıkış aralığındaki değerin ilk
kısmındaki değer yazıcı portunun adresidir.
0378 adresi için bu
değer alt portlara aşağıdaki şekilde dağılır,

Şekil 1-2
DATA portu h0378
STATUS portu h0378 + 1
yani h0379
CONTROL portu ise h0378
+2 yani h037A olur.
Paralel port temel
olarak printer bağlantısı için yaratılmıştır. Her
pinin bilgisayarın yazıcı ile anlaşmasını sağlayan
bir görevi vardır. Gerçekleştirilecek uygulamalarda
çok gerekli olmayacak fakat yinede bilinmesinde
fayda vardır. Aşağıda ki tabloda paralel port
pinlerindeki sinyalleri ve giriş çıkış yönleri
görülmektedir.
Sinyal Adi BIT
PI
Tablo 1-1
1.2.1 Data Portu
Paralel port üzerinde
DATA portuna ait 8 adet (D0-D7) pin vardır. Bu port
paralel portunuzun taban adresini kullanır. 8 tane
DATA pini olduğundan 8 Bitlik veri çıkışı almak
mümkündür. Yani bu 8 tane pinin "1" yada "0"
değerlerini alması ile veri akışı sağlanmış oluyor.
DATA portu normalde veri çıkışı için
kullanılmaktadır. Fakat bazı özel ayarlar yapılarak,
eğer bilgisayar da destekliyorsa veri girişi
yapılması da mümkün olabilir.
Belirtilen şekilde DATA
portundan 8 bitlik veri çıkışı alınabilir. DATA
portuna hiçbir veri gönderilmediği zaman ki değeri
"00000000" dır. Dikkat edilirse 8 tane "0" vardır.
Örneğin data portuna 25 değeri gönderilsin. 25
değerinin ikilik sayı sisteminde karşılığı
"00011001" dir. Bu durumda D4, D3 ve D0 pinlerine
karşılık gelen lojik değerler "1" olduğundan o
pinler +5 Volt olacaktır. Aşağıda DATA pinine
gönderilen bazı değerler ile hangi pinlerin "1"
olacağını gösteren örnek bir tablo görülmektedir.

Tablo1-2
DATA pinine istediğimiz
değerleri Visual Basic yada QBASIC altındaki OUT
komutunu kullanarak göndermeniz mümkün. Komutun
kullanım şekli aşağıdaki gibidir.
·
OUT Adres,
Veri
Adres değişkeni DATA
portunun adresidir. Örneğin (&h0378). Veri değişkeni
ise gönderilecek verinin 10 tabanına göre sayısal
değerini içermelidir. Örneğin tüm data pinlerini +5
Volt yapmak için porta "11111111" değerine karşılık
gelen 255 değerinin gönderilmesi yeterli olacaktır.
Bu komutu Visual Basic altında kullanabilmek için
inpout32.dll dosyasının proje ile aynı klasörde
bulunması gerekmektedir. Bu dosyanın download
kısmından çekilmesi mümkündür.
C ++ derleyicisinde ise
bu komutun adı outportb 'tur ve STDIO.H
kütüphanesinde yer alır. Kullanım şekli ise
aşağıdaki gibidir.
outportb (Adres,Veri)
1.2.2 Status Portu
STATUS portu sayesinde,
15 - 13 - 12 - 11- 10 numaralı pinlerden, 5 bit
sayısal giriş yapılabilir. STATUS portu paralel
portun taban adresinin +1 fazlasında bulunmaktadır.
Örneğin paralel portun taban adresi h378 ise STATUS
portu h379 da bulunacaktır. Veri paralel portun
şeklinde gözüktüğü gibi S7, S6, S5, S4, S3
pinlerinden yapılacaktır. Bu 5 pinlerden herhangi
bir müdahale bulunmadan okunacak lojik değer "1"
olacaktır. Eğer voltmetre ile bu pinlerdeki voltajı
ölçülürse +5 Volt olduğu görülecektir. Bu pinlere
bağlanacak butonlar ile pinler topraklanarak lojik
değerlerinin "0" yapılıp bir nevi veri girişi
gerçekleştirilmesi mümkündür. Fakat bu pinlerden S7,
donanım tarafından tersindirilmiştir. Bunun anlamı o
pinin toprağa çekildiği zamanki değerinin "1"
olacağıdır.
STATUS portundaki veriyi
okumak için Visual Basic ve QBASIC 'teki INP
komutunun kullanım şekli,
inp
(taban_adres+1)
C ++ derleyicisinde ise
bu komutun adi inportb 'tur ve STDIO.H
kütüphanesinde yer alır. Kullanım şekli ise
aşağıdaki gibidir.
inportb (taban_adres+1)
1.2.3 Control Portu
CONTROL portunu hem
giriş hem de çıkış için kullanmak mümkündür. Paralel
port üzerinde CONTROL portununa ait 4 tane pin
vardır. Bu pinlerden C0,C1,C3 pinleri tersinmiştir.
Yani tersinmiş olan bu pinlere veri gönderilmediği
zaman durumu "1" dir. Bu pinlerden bir tanesine veri
gönderildiğinde o pinin değeri "0" olacaktır. DATA
ve STATUS pinlerinin yetmediği zamanda CONTROL
portları ile çıkış yada giriş almak mümkündür.
Programlama sekli STATUS ve DATA portları ile
aynıdır.
Control Portlarının bir farklı özelliği C5 bitini
kullanarak biderectional port özelliğine sahip olan
paralel portlarda data registerındaki pinleri
giriş/çıkış yapabiliriz.Daha önce de anlatıldığı
gibi standart olarak data registerı çıkış(output)
olarak kullanılır.Fakat bidirectional özelliği olan
portlarda bu pinler giriş olarak ta
kullanılabilir.(Not:Bidirectional portlarda data
register’ını ya çıkış ya giriş olarak
kullanabilirsiniz.Yarısı giriş yarısı çıkış olamaz)
|
C7^ |
x |
|
C6 |
x |
|
C5 |
Data Register Giriş/Çıkış
yapılır (I/O Input/Output)
|
|
C4 |
x |
|
C3^ |
Pin 17 |
|
C2 |
Pin 16 |
|
C1^ |
Pin 14 |
|
C0^ |
Pin 1 |
Tablo 1-3
Yazılan bit abcdefgh ise:
|
a |
b |
c |
d |
e |
f |
g |
h |
|
x |
x |
C5 |
x |
C3^ |
C2 |
C1^ |
C0^ |
Tablo 1-4
I/O
:
a,b, d biti kullanılmaz c biti 0 ise data
registerına bağlı pinler çıkıştır, c biti 1 ise data
register’ına bağlı pinler giriştir.
1.3
Paralel Porttan Veri Çıkışı
Bilgisayara veri girişi
ve çıkışı port uygulamalarının temeli kabul edilir.
Yapılacak robotu yönetebilmek için bunun nasıl
olduğunu bilmek gerekir. Robot tasarlama kısmına
gelene kadar, paralel portu programlamanın iyi bir
şekilde öğrenilmesi gereklidir.
Bilgisayarda temel olan
iki değer vardır. Bilgisayar içerisinde veri bu iki
değer üzerinden akmaktadır. Temel olarak
elektronikte, "1" devrenin kapalı (aktif) "0" ise
açık (pasif) olduğunu gösterir. Bilgisayarda bu
birler ve sıfırların her birine "BIT" bunlardan
sekiz tanesinin yan yana gelmiş şekline "1 BYTE"
diyoruz.
Paralel port bilgisayarın en kolay programlanabilen
portudur. Üzerinde 25 Pin vardır 8 BIT veri
aktarabilir ve 5 Volt ile çalışır ve tabi ki
enerjisini bilgisayardaki ana karttan alır. Bu
voltaj büyük bir elektronik eşyayı çalıştırmak için
yeterli olmayabilir ancak, böyle bir cihazı
çalıştırabilecek basit bir devreyi tetiklemek için
yeterli olabilir. Aşağıdaki şekilde görüldüğü gibi
paralel port 8 BIT olduğundan veri 8 PIN üzerinden
akacaktır. Bu pinler sırası ile örnek program
ekranındaki gibidir. Bu sekiz pinin dışında aşağıda
TOPRAK olarak gösterilen pinlerin dışındaki kısmın
kullanılması gerekecek.
Şekil 1-3

Yukarıdaki bu 8 pin
özel bir durum olmadığı sürece değerleri "0" dır. Bu
pinlerden istenileni "1" durumuna getirilebilir.
Paralel port üzerindeki bir data pininin "1" olması
o pinin +5 Volt olması anlamına gelir. Bilgisayar
sistemlerinde temel rakamlar bunlar olduğundan,
yazılan diğer veri ve adresler bilgisayar içerisinde
ikilik sayı sisteminde işlenir.
Şekil 1-4
Temel amaç her pine önce
bir direnç, peşine de ledi bağlamaktır. İlk önce
direnç kullanılmasının sebebi ise kullanılacak 1.5
Voltuk ledin paralel porttan gelen 5 Voltluk akım
sebebiyle arızalanmamasıdır. Yapılacak bağlantı her
data pini üzerinde örnek programın ekranındaki gibi
olmalıdır.
Devre şu şekilde
çalışacaktır;
Paralel port üzerindeki
data pinlerinden bir tanesi "1" yapılacak,
dolayısıyla o pinin elektriksel değeri +5Volt
olacaktır. Buradan çıkan 5 Volt direnç üzerinden
geçirilerek üzerindeki akımın değeri ledi bozmayacak
değere düşürülür ve bu da led diyotun (+) ucuna
bağlanır. Ledin diğer ucu da TOPRAK kısmına
bağlanarak devre kapanır.
Aşağıdaki tabloda porta
gönderilen 8 bitlik hangi veri ile hangi ledlerin
yandığı görülecektir.
|
VERİ |
D7 |
D6 |
D5 |
D4 |
D3 |
D2 |
D1 |
D0 |
|
1 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
1 |
|
4 |
0 |
0 |
0 |
0 |
0 |
1 |
0 |
0 |
|
16 |
0 |
0 |
0 |
1 |
0 |
0 |
0 |
0 |
|
25 |
0 |
0 |
0 |
1 |
1 |
0 |
0 |
1 |
|
70 |
0 |
1 |
0 |
0 |
0 |
1 |
1 |
0 |
Tablo 1-5
1.4 Paralel Porta
Veri Girişi
Şimdi paralel porta
bağlanılan 5 tane buton ile bilgisayara sayısal veri
girişi yapılacaktır. Paralel porttan veri girişi
STATUS yada CONTROL portuna ait pinlerden
gerçekleştirilebilir. Hatta bazı ayarlamalar
yapılarak, eğer bilgisayar da destekliyorsa, DATA
pinlerinden giriş yapılması da mümkün olabilir.
STATUS portundan veri girişi incelenecektir.
STATUS portu sayesinde,
15 - 13 - 12 - 11- 10 numaralı pinlerden, 5 bit
sayısal giriş yapılabilir. STATUS portu paralel
portun taban adresinin +1 fazlasında bulunmaktadır.
Örneğin paralel portun taban adresi h378 ise STATUS
portu h379 da bulunacaktır. Veri paralel portun
şeklinde gözüktüğü gibi S7, S6, S5, S4, S3
pinlerinden yapılacaktır. Bu 5 pinlerden herhangi
bir müdahale bulunmadan okunacak lojik değer "1"
olacaktır. Eğer voltmetre ile bu pinlerdeki voltaj
ölçülürse +5 Volt olduğu görülecektir. Bu pinlere
bağlanılacak butonlar ile pinler topraklanarak lojik
değerleri "0" yapılıp bir nevi veri girişi
gerçekleştirilmiş olacaktır.
STATUS portundaki veriyi
okumak için INP komutu kullanılacaktır. Kullanım
şekli;
inp(taban_adres+1)
şeklindedir.
Şekil 1-5
Paralel porta veri giriş
işlemi, temel olarak aynı olsa da veri çıkışından
biraz daha karışıktır. Bunun sebebi STATUS portunda
bulunan sinyallerden birinin donanım tarafından
terslenmiş olmasıdır. Şimdi verinin 8 bit olarak
okunduğunu varsayalım. Bu durumda STATUS portundaki
binary (ikilik sisteme karşılık gelen) değer,
"11111111" olacaktır. Bu da 10 tabanında 255 'e denk
gelmektedir. Fakat bu porttan veri okunduğunda
bambaşka bir değer olan 127 ' ye rastlanır. Dikkat
edilirse 127 değeri binary olarak okunursa
"01111111" değeri elde edilir. İşte buradaki 127
değerinin okunmasının sebebi pinlerden bir tanesi
olan S7’nin terslenmiş olmasıdır. Yani S7’ye
karşılık gelen pine veri yollandığında o pinin
değeri "1" olacaktır. Diğerlerine veri yollandığında
ise değerleri "0" olacaktır. Verinin 8 bit olarak
okunduğu varsayılmıştı. İşte okunulan değerin son 3
biti esasında okunmuyor. Yani 127 değerinin
okunabilir karşılığı "01111xxx" olacaktır. Buradaki
x’lerin bir değeri yoktur. İptal edilmiş bitleri
göstermek için kullanılmıştır. Gerçekte okunan değer
"01111" olacaktır. Bu da STATUS portuna veri
girişinin 5 bit olduğunu bir kez daha gösterecektir.
Daha rahat işlem
yapabilmek için tersinmiş olan S7 bitinin yazılım
olarak tekrar tersindirilmesi gerekmektedir. Yani
porta hiç bir müdahalede bulunmadan okunmak
istenilen değer "11111xxx" olmalıdır. Bu durumda en
baştaki bitin tersindirilmesi gerekecektir. Bu
işlemi yapmanın en kolay yolu Xor kullanmaktır.Xor,
Exclusive-Or operatörü bir byte içerisindeki bir
veya daha fazla biti tersindirmek için
kullanılabilecek bir metottur. XOR operatörünün
BASIC 'te kullanımı aşağıdaki gibidir;
(okunan_byte)
XOR (maske_byte)
Burada maske değerinde
tersindirilmek istenilen bitler için "1" ,
dokunulmayacak bitler için "0" yazılmalıdır. Örneğin
"11100111" değeri "11111110" maskesi ile XOR
lanırsa, elde edilen değer, "00011001" olacaktır.
Paralel porta gönderilecek byte verisini "10000000"
değerinin onluk tabanındaki karşılığı olan "128" ile
XOR lanacaktır. Böylece okunulan verinin en başta
bulunan S7’den gelen kısmı "1" ise "0", "0" ise de
"1" olacaktır. Sonuçta taban adresi h378 olan
paralel porttan veri okumak için yazılması gereken
satır aşağıdaki gibi olacaktır;
Değer = inp(&h379)
XOR 128
Aşağıdaki tabloda hangi
butonlara basıldığında, yukarıdaki komutla hangi
verinin okunabileceği gösterilmektedir.
|
Butonlar |
S7 |
S6
|
S5 |
S4 |
S3 |
S2 |
S1 |
S0 |
On tabanındaki
değer |
|
S5 |
1 |
1 |
0 |
1 |
1 |
1 |
1 |
1 |
223 |
|
S4 |
1 |
1 |
1 |
0 |
1 |
1 |
1 |
1 |
239 |
|
S5 ve S4 |
1 |
1 |
0 |
0 |
1 |
1 |
1 |
1 |
207 |
|
Tümü |
0 |
0 |
0 |
0 |
0 |
1 |
1 |
1 |
7 |
Tablo 1-6
Kullanılmayan S0,S1 ve
S2 değerleri genelde "1" olarak gelmektedir fakat
bazen bu değişebiliyor. Eğer porttaki bu değerler
değişik ise farklı bir sonuç elde edilebilir.
Esasında bu veriyi XOR’lamak zorunluluğu yoktur. Bu
sadece hesaplamalarda ve mantıkta biraz kolaylık
sağlayacaktır. Önemli olan okunan verinin butona
basıldıkça değişmesidir.
|