|
C# ile Paralel Port Kontrolü |
|
Gönderiliyor lütfen bekleyin... |
|
|
Arkadaşlar bu makalemiz tamamen olmasada kısmen
elektronik üzerine programlamaya temel olacağına inanıyorum.Elektronik
programlama ile kastetdiğim paralel porta veri yollamakla ilgili.Programa
başlamadan önce genel paralel port özellikleri ile ilgili bilgi vermek
istiyorum.
PARALEL PORT: Bilgisayarımızda genellikle
yazıcılar için kullandığımız LPT portu olarakta hatırlayabilirsiniz.Paralel port
üzerinde 25 adet pin bulunur.Bu pinlerin ne işe yaradığına gelirsek;
Bu şekilde görüldüğü gibi S0,S1,S2 konnektörleri
gözükmüyor.Bu konnektörlerden S0 timeout bitini temsil
eder.10,11.12.13.15 numaralı S bitleri ise paralel portun aldığı
hexadecimal sayı olan port adresini belirtir.Yani portumuzun adres
bitleri buradan gelir.Bu adres her bilgisayarda farklı olabilir fakat
istisnalar harici aynıdır ve bu adres DATA+1 olarak tanımlanır.DATA
adresi ise bilgisayarımızda kayıtlı olan adrestir.Bu adrese windows XP
veya windows 2000’de bakmak için Settings > Control
Panel > System > Hardware > Device Manager > Ports (COM & LPT) > Printer
Port(LPT1) > Properties = in Resources > Resource
yoluyla ulaşabiliriz.Benim bilgisayarımda bu adres resimdede görüldüğü
gibi 0378-037F yazıyor buradaki DATA adresi 0x378 dir.Bu sayı
hexadesimal(16 lıktabanda)dır.Bu DATA adresinin decimal(10 luk
)karşılığı ise 888 dir.Biz daha çok decimal sayıyı kullanacağız.
Paralel portta bizi en fazla
ilgilendiren yer D0-D7 bitleridir.Görüldüğü gibi 8 bitimizin geleceği yerler
buralarıdır.Paralel portumuza veri gelip gelmediğini kontrol etmek için ise
portumuzun önüne 8 adet led yerleştirerek bu kontrolü gerçekleyebiliriz.Tabiki
ledlerin önüne direnç koymalıyız ki ani gerilim değişmesinden
etkilenmesin.Ledlerin önüne 47K’lık direnç işimizi görecektir.Her devrenin
mutlaka bir toprağı olmalıdır bizim devremizin toprağını ise G7 bitini
kullanarak alacağız.
Bilgisayarı ilk açtığımızda portlara
11111111(decimal=255) gidicektir.Bunun anlamı yani her 1’in anlamı
+5 volttur.0 olduğu zaman ise 0 voltla ledimiz sönük durumda
olacaktır.Zaten yapacağımız şeyde porta veri yollayıp istediğimiz
ledi bilgisayar aracılığı ile yakmaktan başka bir şey olmayacak.
Programımız:
Amaç:Yapacağımız
programla port kontrolüne bir giriş yapacağız.8 biti işaret eden 8
pictureBoxımız olacak.Yanan bit olduğu zaman bu resimler yanan resim olarak
değişecek.Ve birde girdiğimiz decimal sayıyı binary olarak ledlerde
görebileceğiz.Son olarak bütün ledleri söndüren bir söndür buttonu
yapacağız.Programın tasarımı şekildeki gibidir.
Programımıza verileri yollarken port numarasını decimal
formatta yollarız.Benim paralel portumun decimal karşılığı 888 olduğu
için ben program içinde 888 yazacağım.Verileri porta yollamak için ise
inpout32.dll dosyasını kullanacağız.Bu dll dosyasını programımıza dahil
ederek işe başlayalım.
using
System.Runtime.InteropServices; // ile dll dosyası kullanacağımızı gösterdik.
Daha sonra bu dll’yi işleteceğimiz bir class yaratıp
bu classa dll’yi ekledik.
public class gonder
{
[[DllImport("inpout32.dll", EntryPoint="Out32")]
public static extern void verigonder(int portno,int sayi);
} |
Son olarak ledlerin yanık olup olmadığının program
içinde yanıklığını veya sönüklüğünü göstermek için pictureBoxları
kullandık.Ve girilen sayımızı bitlerine ayırıp bu bitleri bir diziye
aktardık.Aktardığımız bu dizinin 0.elemanı bir ise 1.biti yak gibi bir
olayı if-else ile kontrol ettik.Tabiki burda yakma olayı sadece resim
değiştirme.
private void button1_Click(object sender,
System.EventArgs e)
{
byte bit,and;
byte[]donusum=new byte[8];//0-255 arası girilen
sayımızın bitler ayırdığımız zaman aktaracağımız dizi
if(textBox1.Text=="")
{
MessageBox.Show("Sayı
girmeniz gerekiyor");
return;
}
long degeregec=Convert.ToInt64(textBox1.Text);
if(degeregec>255)
{
MessageBox.Show("0-255
arası veri giriniz");
if(textBox1.CanFocus)
{
textBox1.Focus();
}
return;
}
byte deger=Convert.ToByte(textBox1.Text);
for(byte k=8;k>=1;k--)
{
and=1;
for(int l=1;l<=k-1;l++)
{
and*=2;
}
bit=(byte)((deger&and)>>k-1);
donusum[k-1]=bit;
}
if(donusum[7]==1)
{
sekiz.Image=yanık.Image;
}
else if(donusum[7]==0)
{
sekiz.Image=sonuk.Image;
}
if(donusum[6]==1)
{
yedi.Image=yanık.Image;
}
else if(donusum[6]==0)
{
yedi.Image=sonuk.Image;
}
if(donusum[5]==1)
{
altı.Image=yanık.Image;
}
else if(donusum[5]==0)
{
altı.Image=sonuk.Image;
}
if(donusum[4]==1)
{
bes.Image=yanık.Image;
}
else if(donusum[4]==0)
{
bes.Image=sonuk.Image;
}
if(donusum[3]==1)
{
dort.Image=yanık.Image;
}
else if(donusum[3]==0)
{
dort.Image=sonuk.Image;
}
if(donusum[2]==1)
{
uc.Image=yanık.Image;
}
else if(donusum[2]==0)
{
uc.Image=sonuk.Image;
}
if(donusum[1]==1)
{
iki.Image=yanık.Image;
}
else if(donusum[1]==0)
{
iki.Image=sonuk.Image;
}
if(donusum[0]==1)
{
bir.Image=yanık.Image;
}
else
{
bir.Image=sonuk.Image;
}
try
{
gonder.verigonder(888,deger);
label1.Text="Veri
başarıyla gönderildi";
textBox1.ResetText();
}
catch(Exception hata)
{
string
error=hata.Message;
MessageBox.Show("Veri
gönderilirken hata
oluştu","hata",MessageBoxButtons.OK,MessageBoxIcon.Warning);
}
}
private void button2_Click(object sender, System.EventArgs e)
{
gonder.verigonder(888,0);
sekiz.Image=sonuk.Image;
yedi.Image=sonuk.Image; altı.Image=sonuk.Image;
bes.Image=sonuk.Image; dort.Image=sonuk.Image;
uc.Image=sonuk.Image; iki.Image=sonuk.Image;
bir.Image=sonuk.Image; }
private void Form1_Load(object sender,
System.EventArgs e) { gonder.verigonder(888,0);
}
private void Form1_Closing(object sender,
System.ComponentModel.CancelEventArgs e) {
gonder.verigonder(888,0); } |
Arkadaşlar bu programla temel bir gösterim
yaptık.Bundan sonra timerları kullanarak ledleri haraket ettirebilir
yada bazı bitleri 1 göndererek bir step motor kontrol
edebiliriz.Yani bitlerle hayal edebileceğiniz herşeyi yapabilirsiniz.
Kolay gelsin. Umarım port kullanımı hakkında yardımcı
olmuşumdur.
Örnek uygulamayı indirmek için tıklayın.
CANER
ŞAHAN
[email protected]
University of Istanbul Dept.of Electronics
Engineering 3.
KAYNAK:
Bu makalede adı geçen paralel port ile haberleşme
örneği ilk olarak codeproject sitesinde Levent S.
tarafından gerçeklenmiştir.Ve dll’ dosyasının referansı
http://www.logix4u.net/ sitesinden alımıştır.
dll’:::http://www.logix4u.net/
codeproject::http://www.codeproject.com/csharp/csppleds.asp
Makale:
C# ile Paralel Port Kontrolü C#, Visual C# ve .NET Caner Şahan
|
|
|
-
-
Eklenen Son 10
-
Bu Konuda Geçmiş 10
Bu Konuda Yazılmış Yazılmış 10 Makale Yükleniyor
Son Eklenen 10 Makale Yükleniyor
Bu Konuda Yazılmış Geçmiş Makaleler Yükleniyor
|
|