Paralel Porttan Veri Almak ve Oyun Kumandası Yapımı
Makale - PC ile Otomasyon
Yazar ugokhan   
Pazar, 26 AÄŸustos 2007 21:59

 

Şimdiye kada ki örneklerde hep paralel porta sinyal yollayarak dış devreleri kontrol ettik. Şimdi dışarıdan sinyal yollayıp, program içerisinden sonuçlar almayı göstereceğim. Bunun için ekran üzerinde "Kutu İten Adam" oyunu yapıp, hazırlayacağımız devredeki butonlara basarak bu adamı hareket ettireceğiz. Bir nevi kendi oyun kumandamızı yapmış olacağız.

Paralel Portu Dinlemek

Paralel porta sinyal yollamak istediğiniz port adresinin +1 fazlasını porttan okuma yapmak için kullanırız. Eğer paralel port adresiniz &H378 ise &H379 değeri ile paralel portu dinlemeye alırız (Yani STATUS Portu). Porttan gelen değerleri okuyan komut INP komutudur. Bu komutun tek parametresi vardır o da port adresi. Tabi ki bu adres değeri paralel portunuzun STATUS port değeridir.

 

'Inp Komutunun Kullanılması
OkunanDeger = INP(&H379)

 

UYARI : Paralel portunuzun adres değerinin &H378 olup olmadığını kontrol edin. Çoğu bilgisayarda bu değer &H378 olmasına rağmen bazı bilgisayarlarda farklılık gösterebilir. Bu değeri bilgisayarınızın açılışından veya BIOS ayarlarından görebilirsiniz.

Status portu ile ilgili bazı bilgiler vereyim. Status portu üzerinde 5 pin bulunmaktadır. Bunların yerleşimleri aşağıdaki şekilde gösterilmiştir. Biz Status portunu okuduğumuzda 8 bitlik değer döner. Yani fazladan 3 pin daha gelir. Bunlar Control portuna ait olan 14,16 ve 17 nolu pinlerdir. Bu pinlerin değeri hep sabittir. Bu değer bilgisayarlara göre farklılık gösterebilir ve aynı anda ya 1 yada 0 dır. Biz gelen veri içindeki ilk 5 pin değerine bakarız. Dolayısıyla Status portundan sadece 5 bitlik veri girişi yapabiliriz.

 

www.gokhanca.com

 

Status portunun bir özelliği de S7 pininin terslenmiş olmasıdır. Bu pin donanım tarafından terslenmektedir. Eğer hiçbir şey yapmadan Status portunu dinlersek 01111111 değerini okuruz. Bazı bilgisayarlarda bu değer 01111000 olarak gözükebilir. Yukarıda da dediğim gibi control portu pinleri bazı bilgisayarlarda değişik olabilir. Eğer status portu üzerinde daha iyi bir fikir edinmek istiyorsanız daha önce yapmış olduğum "Paralel Port" projesini "Dosya İndir" sayfasından indirebilirsiniz.

Status portundaki S7 pininin bu ters davranışını XOR ile değiştirebiliriz. XOR operatörü ile iki veri karşılaştırılır ve maske değerinde 1 olan değer ters çevrilir. Örnek :

Data  : 0 1 1 1 1 0 0 0
Maske : 1 0 0 0 0 0 0 0
Sonuc : 1 1 1 1 1 0 0 0

Ben örnek projemde XOR operatörünü daha farklı bir amaç için kullandım. Amacım basılan butonun status numarasını elde etmekti. Bunun için okunan buton değerini 120 ile XOR'ladım. Örnek : S5 butonuna basılmış olsun.

Data  : 0 1 0 1 1 0 0 0 
Maske : 0 1 1 1 1 0 0 0  (120)
Sonuc : 0 0 1 0 0 0 0 0  (Sadece S5 butonunun pini yüksek olarak kaldı)

XOR maskesinin 120 seçilmesinin sebebi control pinlerinin 0 olmasından dolayıdır. Eğer kullandığınız bilgisayarda bu pinler 1 olarak gelirse XOR işlemini 127 (01111111) değeri ile yapın. Bunun için programımızda aşağıdaki kodları kullanalım. Böylece programımız farklı bilgisayarlarda da doğru sonuçlar üretsin.

 

'Porttan gelen veri data değişkenine atılıyor
data = INP(&H379)

IF data = 127 Then
data = data Xor 127
ELSE
data = data Xor 120
END IF

 

Gelelim port nasıl dinlenir? Port üzerinde her an hareket olabileceği için bu değişimleri nasıl yakalarız.? Bu soruyu şöyle cevaplayayım. Sürekli bir döngü ile port değerlerini okuruz. Bunun için Do-Loop döngüsü kullanabilirsiniz. Ama ben Timer nesnesi kullanacağım. Sebebi de istediğim zaman Enable = True / False yaparak okumayı kontrol edebilirim. Okuma kodlarını Timer içine yazarız ve okunan değere göre hareket işlemini gerçekleştiririz.

 

Private Sub Timer1_Timer()

'Porttan gelen veri data değişkenine atılıyor
data = Inp(&H379)

If data = 127 Then
data = data Xor 127
Else
data = data Xor 120
End If

Select Case data
Case 128:   ' Yukarı Hareket
Case 64:    ' Aşağı Hareket
Case 32:    ' Sağa Hareket
Case 16:    ' Sola Hareket
Case 8:     ' Oyundan Çıkış
End Select

End Sub

 

Programımız için kullanacağımız kumanda devresi 5 adet tuş-buton dan oluşan basit bir devredir. Tuş-butonları her elektronikçe de çok ucuza bulabilirsiniz. Devre bağlantıları aşağıdaki gibidir. Aslında buna devre bile denmez. Sadece buton kullandık :)) 4 adet butonu klavyedeki yön tuşları şeklinde dizdim. Diğer butonu ise programdan çıkmak için kullandım.

 

www.gokhanca.com

 

 

Programın tam proje halini buradan indirebilirsiniz. Program içinde, aynı anda birden fazla yön tuşuna basılınca hareket etme olayı iptal edilmiştir. Siz buna izin verip çapraz hareketler de ekleyebilirsiniz. Ayrıca XOR olayını kendi isteğinize göre ayarlayıp kendi değerlerinizi kullanabilirsiniz. Bu işin geri kalan kısmı tamamen programı nasıl süsleyeceğinizle alakalıdır.

 

Yorumlar  

 
0 #2 2011-06-05 22:19
Gerekli linkler düzeltildi. Üst menüdeki Dosya İndir linkine basarak programlar sayfasına girebilir ve paralel port kontrol programını Visual Basic Projeleri sayfasından da indirebilirsini z.
Alıntı
 
 
0 #1 2011-01-27 10:53
İyi günler Gökhan Bey. Projeniz ilgimi çekti buna benzer bir projede ben yapmak istiyorum. Programı incelemek istedim fakat projeyi maalesef indiremiyorum eğer yardımda bulunabilirseni z çok sevinirim. Teşekkürler, çalışmalarınızd a başarılar.
Alıntı
 

Yorum ekle

TCK'ya aykırı, yasadışı ve genel ahlaka aykırı yazılar ile konu dışında yazılar, istekler, spam ve reklam amaçlı mesajlar yazılması YASAKTIR. Bu tür yazılar görüldüğü anda tarafımdan silinecektir. Herhangi bir uygunsuzluğun olduğunu düşündüğünüz yazılar için lütfen bana eposta yoluyla haber veriniz.


Güvenlik kodu
Yenile