19 Aralık 2007


Paralel port üzerinden,bir yazılım ile bir donanımı konuşturmak amaçlandı.

PROJE İÇERİĞİ VE ÇALIŞMASI:

Projemizde, bir bilgisayar yazılımı ile bir elektronik devrenin paralel port ile konuşturulması işlemi gerçekleştirilmiştir.Program arayüzünden girilen karakter “gönder” tuşuna basıldığında bu bilgi displayde görüntüleniyor.Displayde görüntülenecek karakterin görüntülenmesi için, displayde o karakterin çıkması için hangi segmentler 1 veya 0 olacaksa ona karşılık gelen binary kodun üretilip displaye gönderilmesi ile bu işlem gerçekleştirilmiştir.

Örnek:
Klaveyeden “1” rakamı girildi;

Displayde “1” rakamının görünmesi için, displaydeki b ve c segmentlerinin 1 olması ve diğerlerinin 0 olması gerekir.Bunun için uygun program yazıldı ve girilen karakterin karşılığında displaye gönderilecek binary kod inpout32.dll dosyası ile paralel porta gönderildi.
Bu işlem 0-15 arasındaki tüm sayılar için yapılabilir.
Program arayüzünden;
“10” girildiğinde displayde “A” harfi,
“11” girildiğinde displayde “B” harfi,
“12” girildiğinde displayde “C” harfi,
“13” girildiğinde displayde “D” harfi,
“14” girildiğinde displayde “E” harfi,
“15” girildiğinde displayde “F” harfi görüntülenmektedir.Klavyeden hexadesimal olarak girilen değerlerin desimal karşılıkları displayde görüntülenmektedir.D ve B harfleri,0 ve 8 ile karışmasın diye displayde küçük harflerle çıkarılmıştır.

Şekilde de Visual Studio .NET C# programlama dili yazılan arayüz programımız ile klavyeden 1 tuşuna basıldığında “gönder” butonuna basıldığında paralel portun 8 data ucuna gönderilen değerler görünüyor.Data 7 , ucuna her seferinde 0 gönderildi.Çünkü bu ucu kullanmıyoruz.

Basılan karakterin gönderileceği paralel port genelde LPT1 olarak kullanıldığından bunun hexadesimal adrsi 0x0378 dır.Eğer LPT2 ile kullanılıyorsa o zaman 0x0278 adresini programımızda kullanmamız gerekir.Fakat bu adreslerin desimal karşılıklarına veri gönderilir.Yani LPT1 için 888,LPT2 için 632 port adresler kullanılır.
Programımızda bu işlemi yapan kısım;

gonder.verigonder(888,238);

bölümüdür.Burada 888 portuna(paralelport) , 238 sayısının binary 8 bit karşılığı gönderiliyor.

8 SEGMENTLİ DİSPLAY(Gösterge):


Herhangi bir ortamda bulunan değerlerin ne olduğunu anlamak için kullanılabilecek araçlardandır.Kullandığımız değerlerin nasıl işlediğini göstergeler sayesinde görebiliriz.
İç yapısı:Göstergenin yapısında 7 adet LED bulunur.Bunlar bir düzene konmuştur.Anot ve katot sisteminde bir kod çözücü gibi davranarak bacaklarına gelen değerleri işler ve bize istediğimiz değeri verir.
Yapısında ki LED'ler sırası ile a b c d e f g dir.Bunlardan bildiğimizi 10 tabanındaki değerleri elde edebiliriz.

Örneğin: Göstergede 2 değerini görmek istiyoruz.Bu durumda 4 bitlik displayin bacaklarına
A B C D
0 0 1 0
Bu sıraya göre bacaklara bağlanırlar.Bu durumda da göstergedeki değer iki olacak ve gösterge şu şekilde gösterilecek.
Resimden de anladığımız gibi a b g e d LED'leri yanmaya başladı.Bu LED'lerin seçimini ise göstergenin içindeki kod çözücü sağlar

PARALEL PORT:
Bilgisayarın kasasının arkasında bulunan 25 pinlik D şeklindeki konnektördür. Genellikle yazıcı bağlanmak için kullanılır.Seri porta göre hızlı olmasına rağmen aynı stabiliteyi sağlayamaz. Bu baglantı noktasına aynı zamanda LPT ( LinePrinTer) de denmektedir. Bu portun bir pini bir seferde 8 bit veri gönderebilir. DB25 isimli portu kullanır. DB25 ismindeki 25 rakamı kablo girişindeki pin sayısını ifade etmektedir. Yazıcı ve tarayıcı bu portu kullanmaktadır. Paralel port, seri port gibi yerini USB'ye bırakmaya başlamıştır. Doğabilecek sorunlardan kaçınmak için uzunlukları 5 metreyi aşan kablolar kullanılmamalıdır. Hedef aygıt sadece PC tarafından gönderilen komutları işlemekle kalmaz PC' ye kendisi de veri gönderebilir.
Paralel port aslında dış devrelere güç sağlamak için iyi bir seçim değildir. Ancak elektronik bir devreyi paralel port yardımıyla beslemek elbette imkansız değildir.
Paralel port başlangıçta yazıcıların PC’ye bağlanması ve iletişimi için tasarlanmış bir porttur. Ancak zamanla donanım kilitleri, taşınabilir diskler, modemler, network adaptörleri...v.b. gibi birçok cihazın haberleşmesi için kullanılmaya başlanmıştır. Bu cihazların bir çoğunun güç kaynağı haricidir.
Paralel port da direk güç çıkışına sahip değildir (Seri Port gibi). Paralel port üzerinden beslenen en bilindik elektronik devre PC donanım kilididir. Bu kilit paralel porta bağlanır. Yazıcı kablosu ise bu cihazın üzerine bağlanır. Paralel port da güç çıkışı bulunmadığından cihaz gücü portun diğer pinlerinden çalar. Ancak bu durum genellikle yazıcıyla bilgisayarın haberleşmesinde yada donanım kilidinin haberleşmesinde problem yaratır. Ayrıca paralel portun mantsal 1 değeri 2.4V seviyesidir.
Eğer devreniz 5V’luk güç kaynağına ihtiyaç duyuyorsa, bu voltajı paralel porttan elde etmek için DC/DC dönüştürücüye ihtiyaç duyulacaktır. DC/DC dönüştürücüler genel olarak bu duruma uygun değildir. Çünkü onlar daha büyük yükler için tasarlanmışlardır. Bu nedenle çok düşük güç tüketimine sahip DC/DC dönüştürücüler kullanılmalıdır.
Maxim firmasının bu duruma uygun elektronik ürünleri bulunmaktadır.

Pin Sinyal Tanım Anlamı
1 Strobe Out Control-0
2 Data0 In/Out Data-0
3 Data1 In/Out Data-1
4 Data2 In/Out Data-2
5 Data3 In/Out Data-3
6 Data4 In/Out Data-4
7 Data5 In/Out Data-5
8 Data6 In/Out Data-6
9 Data7 In/Out Data-7
10 Ack In Status-6
11 Busy In Status-7
12 Paper-Out In Status-5
13 Select In Status-4
14 LineFeed Out Control-1
15 Error In Status-3
16 Init/Reset Out Control-2
17 Select Out Control-3
18-25 Ground - -


KARAKTERLER VE DİSPLAY’DEKİ SEGMENT KARŞILIKLARI

Aşağıda verilen bilgiler klavyeden girilen karakterlerin; displayde görünmesi için displaydeki segmentlerin durumunu gösteren binary kodlardır.Örnegin;A tuşuna basıldığında A tuşunun displayde görünebilmesi için sırası ile a,b,c,d,e,f,g segmentlerinin durumları 1,1,1,0,1,1,1 olmalıdır.1 olan segmentler yanan, 0 olanlar ise sönük olan segmentlerdir.
Karakter g f e d c b a
0 0 1 1 1 1 1 1
1 0 0 0 0 1 1 0
2 1 0 1 1 0 1 1
3 1 0 0 1 1 1 1
4 1 1 0 0 1 1 0
5 1 1 0 1 1 0 1
6 1 1 1 1 1 0 1
7 0 0 0 0 1 1 1
8 1 1 1 1 1 1 1
9 1 1 0 1 1 1 1
10(A) 1 1 1 0 1 1 1
11(B) 1 1 1 1 1 0 0
12(C) 0 1 1 1 0 0 1
13(D) 1 0 1 1 1 1 0
14(E) 1 1 1 1 0 0 1
15(F) 1 1 1 0 0 0 1


KULLANILAN DONANIM MALZEMELERİ

• 7 adet 330 ohm’luk Dirençler
• 1 adet 8 segmentli Display
• 1 adet Erkek konnector
• 1 adet Board
• Bir Dişi ve Bir Erkek konnektörden oluşmuş bir ara kablogirişi olan adet iki tarafı




ARAYÜZ PROGRAMININ KODU:

namespace odevcelal
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}

private void button1_Click(object sender, EventArgs e)
{
//int sayi,a;

if (textBox1.Text == "")
{
MessageBox.Show("Bir karakter giriniz");
return;
}
/*if (textBox1.Text.Length > 2 || Convert.ToInt32(textBox1.Text)>15)
{
MessageBox.Show("16 dan küçük bir değer gir");
return;
}
*/
if (textBox1.Text == "0")
{
label2.Text = "Data7\n0";
label3.Text = "g\n0";
label4.Text = "f\n1";
label5.Text = "e\n1";
label6.Text = "d\n1";
label7.Text = "c\n1";
label8.Text = "b\n1";
label9.Text = "a\n1";

gonder.verigonder(888,63);
}
else if (textBox1.Text == "1")
{
label2.Text = "Data7\n0";
label3.Text = "g\n0";
label4.Text = "f\n0";
label5.Text = "e\n0";
label6.Text = "d\n0";
label7.Text = "c\n1";
label8.Text = "b\n1";
label9.Text = "a\n0";

gonder.verigonder(888,6);
}
else if (textBox1.Text == "2")
{
label2.Text = "Data7\n0";
label3.Text = "g\n1";
label4.Text = "f\n0";
label5.Text = "e\n1";
label6.Text = "d\n1";
label7.Text = "c\n0";
label8.Text = "b\n1";
label9.Text = "a\n1";
gonder.verigonder(888, 91);
}
else if (textBox1.Text == "3")
{
label2.Text = "Data7\n0";
label3.Text = "g\n1";
label4.Text = "f\n0";
label5.Text = "e\n0";
label6.Text = "d\n1";
label7.Text = "c\n1";
label8.Text = "b\n1";
label9.Text = "a\n1";
gonder.verigonder(888,79);
}
else if (textBox1.Text == "4")
{
label2.Text = "Data7\n0";
label3.Text = "g\n1";
label4.Text = "f\n1";
label5.Text = "e\n0";
label6.Text = "d\n0";
label7.Text = "c\n1";
label8.Text = "b\n1";
label9.Text = "a\n0";
gonder.verigonder(888, 102);
}
else if (textBox1.Text == "5")
{
label2.Text = "Data7\n0";
label3.Text = "g\n1";
label4.Text = "f\n1";
label5.Text = "e\n0";
label6.Text = "d\n1";
label7.Text = "c\n1";
label8.Text = "b\n0";
label9.Text = "a\n1";
gonder.verigonder(888,109);
}
else if (textBox1.Text == "6")
{
label2.Text = "Data7\n0";
label3.Text = "g\n1";
label4.Text = "f\n1";
label5.Text = "e\n1";
label6.Text = "d\n1";
label7.Text = "c\n1";
label8.Text = "b\n0";
label9.Text = "a\n1";
gonder.verigonder(888,190);
}
else if (textBox1.Text == "7")
{
label2.Text = "Data7\n0";
label3.Text = "g\n0";
label4.Text = "f\n0";
label5.Text = "e\n0";
label6.Text = "d\n0";
label7.Text = "c\n1";
label8.Text = "b\n1";
label9.Text = "a\n1";
gonder.verigonder(888,224);
}
else if (textBox1.Text == "8")
{
label2.Text = "Data7\n0";
label3.Text = "g\n1";
label4.Text = "f\n1";
label5.Text = "e\n1";
label6.Text = "d\n1";
label7.Text = "c\n1";
label8.Text = "b\n1";
label9.Text = "a\n1";
gonder.verigonder(888,127);
}
else if (textBox1.Text == "9")
{
label2.Text = "Data7\n0";
label3.Text = "g\n1";
label4.Text = "f\n1";
label5.Text = "e\n0";
label6.Text = "d\n1";
label7.Text = "c\n1";
label8.Text = "b\n1";
label9.Text = "a\n1";
gonder.verigonder(888,111);
}
else if (textBox1.Text=="10" || textBox1.Text == "a" || textBox1.Text=="A")
{
label2.Text = "Data7\n0";
label3.Text = "g\n1";
label4.Text = "f\n1";
label5.Text = "e\n1";
label6.Text = "d\n0";
label7.Text = "c\n1";
label8.Text = "b\n1";
label9.Text = "a\n1";
gonder.verigonder(888,119);
}
else if (textBox1.Text=="11" || textBox1.Text == "b" ||textBox1.Text=="B")
{
label2.Text = "Data7\n0";
label3.Text = "g\n1";
label4.Text = "f\n1";
label5.Text = "e\n1";
label6.Text = "d\n1";
label7.Text = "c\n1";
label8.Text = "b\n0";
label9.Text = "a\n0";
gonder.verigonder(888,124);
}
else if (textBox1.Text=="12" || textBox1.Text == "c" || textBox1.Text == "C")
{
label2.Text = "Data7\n0";
label3.Text = "g\n0";
label4.Text = "f\n1";
label5.Text = "e\n1";
label6.Text = "d\n1";
label7.Text = "c\n0";
label8.Text = "b\n0";
label9.Text = "a\n1";
gonder.verigonder(888,57);
}
else if (textBox1.Text == "13" || textBox1.Text == "d" || textBox1.Text == "D")
{
label2.Text = "Data7\n0";
label3.Text = "g\n1";
label4.Text = "f\n0";
label5.Text = "e\n1";
label6.Text = "d\n1";
label7.Text = "c\n1";
label8.Text = "b\n1";
label9.Text = "a\n0";
gonder.verigonder(888,94);
}
else if (textBox1.Text == "14" || textBox1.Text == "e" || textBox1.Text == "E")
{
label2.Text = "Data7\n0";
label3.Text = "g\n1";
label4.Text = "f\n1";
label5.Text = "e\n1";
label6.Text = "d\n1";
label7.Text = "c\n0";
label8.Text = "b\n0";
label9.Text = "a\n1";
gonder.verigonder(888,121);
}
else if (textBox1.Text == "15" || textBox1.Text == "f" || textBox1.Text == "F")
{
label2.Text = "Data7\n0";
label3.Text = "g\n1";
label4.Text = "f\n1";
label5.Text = "e\n1";
label6.Text = "d\n0";
label7.Text = "c\n0";
label8.Text = "b\n0";
label9.Text = "a\n1";
gonder.verigonder(888, 113);
}
try
{
//gonder.verigonder(888, deger);
label10.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, EventArgs e)
{
gonder.verigonder(888,0);

label2.Text = "Data7\n0";
label3.Text = "g\n0";
label4.Text = "f\n0";
label5.Text = "e\n0";
label6.Text = "d\n0";
label7.Text = "c\n0";
label8.Text = "b\n0";
label9.Text = "a\n0";


}

}

public class gonder
{

[DllImport("inpout32.dll", EntryPoint="Out32")]
public static extern void verigonder(int portno, int sayi);


}
}

0 yorum:

Yorum Gönder

Her türlü eleştiri,yorum,ekleme ve düzeltmeye yönelik fikirlerinizi paylaşabilirsiniz.Hakaret içeren yorumlar filtrelenmektedir.

Makalelerin kötüye kullanım kullanıcının sorumluluğundadır. | networkpentest.net. Blogger tarafından desteklenmektedir.