C#nedir?com
 
YAZAR HAKKINDA
Caner Şahan
Caner Şahan
http://www.csharpnedir.com/
İletişme geçmek için tıklayın.
24 Makalesi yayınlanmakta.
Yazar hakkında detaylı bilgi için tıklayın.
Yayınlanan diğer makaleleri için tıklayın.
İlgili etiketler:  C# / VC#/.NET Caner Şahan
 
YAZI HAKKINDA
Türü : Makale
Serbest Köşede C#nedir?com üyelerinin hazırladıkları yazılar yayınlanır. Bu yazılar editör incelemesine girmeden yayınlanır.
Seviyesi : İleri
Kategori : C# / VC#/.NET
Yayınlanma Tarihi : 26.3.2004
Okunma Sayısı : 49529
Yorum Sayısı : 13     yorum yaz
Site İçi AramaSİTE İÇİ ARAMA
Üye Girişini AçÜye GİRİŞİ
Üye girişi için tıklayın.
Kullanıcı Adı
Şifre
 
Beni her zaman hatırla
Bir hafta boyunca kullanıcı bilgilerinizi kullanıcı çıkışı yapana kadar hatırlar. (Paylaşılan bilgisayarlarda önerilmez.)
 
Şifremi / Kullanıcı Adımı unuttum.
 
.net TV RSS Serbest KÖŞE (?)
Serbest Köşede C#nedir?com üyelerinin hazırladıkları yazılar yayınlanır. Bu yazılar editör incelemesine girmeden yayınlanır.
emre TAŞ
XML - Deniz Kılınç
emre TAŞ
yazının devamı >
emre TAŞ
Decompiling and Reverse Engineering .Net Radyo
emre TAŞ
yazının devamı >
emre TAŞ
Masaüstü mü ? İnternet Mi? .Net Radyo
emre TAŞ
yazının devamı >
emre TAŞ
.Net Kavramları - .Net Radyo
emre TAŞ
yazının devamı >
emre TAŞ
Yeni Başlayanlar için - .Net Radyo
emre TAŞ
yazının devamı >
Makale Gönder Bende Yazmak İstiyorum
.net TV RSSBlogroll
Turhal Temizer
Conda install environment.yml Package 12.4.2021
Turhal Temizer
Mac OS/X Removing CUDA 12.4.2021
Burak Selim Şenyurt
Tie Fighter Değil, Project Tye! 12.4.2021
Burak Selim Şenyurt
Stackoverflow Sevgi Anketinde Yıllardır Bir Numara Çıkan Programlama Dili Rust Kimdir? 12.4.2021
  Diğer Herşey
Sponsorlar
BT Akademi
Medya Portakal
Video Hosting Sponsoru
Csharpnedir.com bir Ineta üyesidir
Uzman Abi
Her Yönüyle C# - Sefer Algan
C# ile Paralel Port Kontrolü
 
Kapat
Sayfayı Yazdır Sık Kullanılanlara Ekle Arkadaşıma Gönder MySpace Del.Ico.Us Digg Facebook Google Mixx Reddit StumbleUpon
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

canersahan@hotmail.com

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
  • Yazılan Yorumlar
  • Yorum Yaz
MAR
9
2010
bu benim yıllık ödevim lütfen bana yardımcı olun nasıl indircem ben bunu veya başka bi şekilde açıklayın bu programı...
AĞU
2
2005
guzel bir yazı olmus tesekkurler ben bir sey soracagım ben bu port numarasını kodun icinden ogrene biliyormuyum. yani sen gonder(888,deger) demisssin ben yollarken her bilgisayarda 888 nolu porta yolluyabilirmiyim
OCA
27
2005
sorununuzu canersahan@yahoo.com adresine mail olarak atarsanız önümüzdeki günler içinde ilgilennicem.
OCA
26
2005
gerekli olan maksimum hızdaki devri ölçecek bir yazılım bana visual bir dil lazım çünkü ben görsel sonuçlar almak istiyorum ve c de bu sıkıntı birde dataequation kartı mı kullanıyım paralel portmu daha iyi olur teşekkür ederim
OCA
26
2005
gerekli olan dakikada 5000 maksimum 5000 devir yapan bir motorun bir sensörle devrini ölçmek.1 peryodunu bulmak ve 360 derecedeki süreden 1 derecedeki süreyi bulmak
OCA
26
2005
çok fazla hızdan kastınız gerçek ile sanallık arasında ise araya virtual makina sokmayınız.Yani bu iş için C# uygun bir değildir.C programlama dilini kullanınız. Saygılar.
OCA
25
2005
bu programda kullanılan sınıfı kendiniz yazmışsınız peki bir kumanda devresinde sinyal almak için hız yeterlimi ,birde ben paralel porta sinyal geldiği yada değiştigi zaman aktif olan bir program yazmak istiyorum. ayni döngüde sürekli veri kontrolü programı çok hantallaştırıyo(ben tezimde motor ateşleme sistemi (araç motoru) yapmak istiyorum çok fazla hıza ihtiyacım var teşekkür ederim
TEM
28
2004
using System.Text; class stringconv; { public void stringTobyte(string data) { byte[]b_veri=Encoding.ASCII.GetBytes(data); for(int i=0;i
TEM
28
2004
bu örnek çok güzel ama lpt1 e string nasıl göndereceğiz? onu bilen var mı?
MAR
29
2004
hata düzeltildi.uyarı için teşekkürler
MAR
29
2004
dll linki çalışıyo codeproject linki çalışmıyo?
MAR
25
2004
Caner merhaba, Yazın güzel, Sefer e ben söz verdiydim benim yazıyı türkçeye çeviricem diye fakat sonrasında iş güç vakit olmadı neyse sen açığı kapamışsın. Bu arada referans olayına da saygından dolayı seni kutlarım. Arada eleştri işin tuzudur diye düşünürsek, keşke yazıyı biraz daha ileriye götürüp porttan okumada yapsaydın. Örn: /* Senin gonder sınıfını biraz degistiriyorum */ public class PortErisim { /* Porta Sinyal Göndermek için */ [DllImport("inpout32.dll", EntryPoint="Out32")] public static extern void verigonder(int adres,int deger); /* Porttan Sinyal Almak için */ [DllImport("inpout32.dll", EntryPoint="Inp32")] public static extern int Input(int adres); } Yani ileriye götürmek derken ne biliim bi klasik buton-switch ile makinayı başlatıp kapatmak veya bi buton set ile çeşitli windows uygulamalarını kontrol gibi... Ginede güzel yazı... Bi öneri: Benim yazıya bazı tepkiler geldi fakat zamansızlıktan yazıyı update edemedim. Tepki şöyle eski anakartlarda bazı devreler şimdiki anakartlardaki gibi olmadığından kısadevreye karşı önlemini kendin almalısın Cypress in bufferları (7425 serisi veya Philips inde o ayarda bufferları var...) bu işi gayet güzel görüyor (Ben öyle önlemimi aldım. Detaylı bilgi için benim yazının forumlarına bakabilirsin.) Sana da belki tepkiler gelir diye diyorum, çünkü işin sonunda anakartı duman etmek var. Saygılar, Levent S.
MAR
25
2004
bir çok kişinin merak ettiği bir konu bu..faydalı bir yazı olmuş..tebrikler.
Sayfalar : 1 
Yorum yazabilmek için üye girişi yapmalısınız. Üye girişi için tıklayın.
Üye değilseniz Üyel Ol linkine tıklayarak üyeliğinizi hemen başlatabilirisniz.
 
  • Bu Konuda Son 10
  • 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