Günümüzde hizla degisen müsteri istekleri ve yogun rekabet sonucu ürün ömürleri çok kisalmistir. Böylesine çetin kosullar karsisinda alisilmis tasarim ve imalat teknolojileri yetersiz kalmis, bu ihtiyaci gidermek üzere yeni kavram ve yöntemler dogmustur. Bunlardan biriside mekatronik kavramidir Aslinda mekatronigin çok fazla tanimi yapilmakla birlikte, bunlarin temelde ifade etmek istedikleri görüs benzerdir.

Bu tanimlamalardan bazilari belirtilirse;

• Mekatronik; makine, elektrik/elektronik ve bilgisayar teknolojisinin es amaçli tümlesik bir yapida gerçeklestirilmesi ve uygulamasidir.

Read more text
C# ile Paralel Port Kontrolü PDF Yazdır ePosta
Zafer Erim tarafından yazıldı   
Salı, 29 Nisan 2008 19:22

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∧)>>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

Bu ePosta adresi istek dışı postalardan korunmaktadır, görüntülüyebilmek için JavaScript etkinleştirilmelidir

University of Istanbul Dept.of Electronics Engineering 3.

NOT: Alıntıdır

Yorumlar
Yeni Ekle Ara RSS
Yorum yaz
Adýnýz:
E-posta:
 
Baţlýk:
UBB Kodu:
[b] [i] [u] [url] [quote] [code] [img] 
 
:angry::0:confused::cheer:B):evil::silly::dry::lol::kiss::D:pinch:
:(:shock::X:side::):P:unsure::woohoo::huh::whistle:;):s
:!::?::idea::arrow:
Lütfen resimdeki güvenlik kodunu giriniz.

3.23 Copyright (C) 2007 Alain Georgette / Copyright (C) 2006 Frantisek Hliva. All rights reserved."

Son Güncelleme ( Cuma, 06 Haziran 2008 16:33 )