Bu site emekli olmuştur. Arşiv amaçlı olarak BT AKADEMİ sponsorluğunda yayın hayatına devam etmektedir.




C#nedir?com
 
YAZAR HAKKINDA
Sami Ventorero
Sami Ventorero
http://www.csharpnedir.com/
İletişme geçmek için tıklayın.
1 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: (resim adinda bilgileri bilgilerinin bulunmaktadir. ekrana ekranlarin farkli ilgili karakter kolaylikla paralel projemizde satirda sinifini C# / VC#/.NET Sami Ventorero
 
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 : 25.2.2006
Okunma Sayısı : 29813
Yorum Sayısı : 2     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Ş
Silindi
emre TAŞ
yazının devamı >
emre TAŞ
silindi
emre TAŞ
yazının devamı >
emre TAŞ
silindi
emre TAŞ
yazının devamı >
emre TAŞ
silindi
emre TAŞ
yazının devamı >
emre TAŞ
silindi
emre TAŞ
yazının devamı >
Makale Gönder Bende Yazmak İstiyorum
.net TV RSSBlogroll
Turhal Temizer
Conda install environment.yml Package 28.3.2024
Turhal Temizer
Mac OS/X Removing CUDA 28.3.2024
Burak Selim Şenyurt
Kurumsal Yazılımcının Oyun Geliştirme ile İmtihanı 28.3.2024
Burak Selim Şenyurt
Matematik ve Oyun Programlama - Missile Command - Final 28.3.2024
  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
LCD Ekranlar, ITunes/Media Player ve .Net
 
Kapat
Sayfayı Yazdır Sık Kullanılanlara Ekle Arkadaşıma Gönder MySpace Del.Ico.Us Digg Facebook Google Mixx Reddit StumbleUpon
Daha önce kasa modifikasyonu ya da paralel port programlama ile uğraşanlar küçücük LCD ekranların boyundan büyük işler yapabildiklerini bilirler. Bu yazımda size MediaPlayer ya da iTunes ta çaldığınız bir parçanın LCD ekrana nasıl yazılabileceğinden bahsedeceğim. Böylece kasanıza ya da harici bir kutuya bağlayabileceğiniz LCD ekranı ile yeni bir görünüm elde edeceksiniz. Bu işin nasıl yapıldığını anlatmadan önce bu sitedeki Caner Şahan’ın "C# ile Paralel Port Kontrolü" adlı makalesini incelemenizde fayda var. O makalede paralel port ile ilgili detaylı bilgi bulunmaktadır. Projemize geçmeden önce LCD ekranların yapısından ve MediaPlayer’da çalan şarkıların bilgilerini nasıl çekebilecemizden bahsedeceğim.

LCD’nin yapısı;

Aslında bu yazımda size uzun uzun LCD (Liquid Crystal Display) ’lerin tarihinden ve yapısından bahsetmeyeceğim. Merak edenler internette bol bol kaynak bulabilirler. Bizim için asıl önemli olan bu küçük ekranların bilgisayar ile iletişimleri ve verilerin bilgisayarda nasıl işlenip gönderilmesi gerektiğidir. En başta belirteyim bu ekranları temin etmek çok kolay. Karaköy Selanik Pasajında ya da Perpa’da 10$ a satılmakta. Bizim kullanacağımız 2 x 16  bir LCD ekran olacaktır. Farklı boyutlarda ve fiyatlarda ekranlarda bulmak mümkün. Bu ekran tipini seçmemin nedeni fiyatının ucuz olması ve bu projemiz için yeterli olmasıdır.

Standart  LCD ekranlar 8 bit ile programlanır ve 5Volt ile çalışırlar. İhtiyacınız olan voltajı adaptör ya da bilgisayarın içerisindeki hard-disk kablosu ile almanız mümkündür. Ben voltametre ile ölçtüm biçtim  uygun buldum (Resim 1). Benim önerim hard-disk kablosunu kullanmanız (Resim 2). Resimde de gördüğünüz gibi siyah uçlar topraktır. Kırmızı +5V, Sarı ise +12V gerilimi sağlamaktadır. Yaklaşık 1$’a alacağınız hard-disk gerilim uzatma kablosunu kesip sarı ucunu kullanacağız. Kasaya monte edeceğimiz LCD ekranlarında kablo dertlerinden kurtulmuş oluruz.

                  - Resim 1 -                     - Resim 2 -
Standart 2 x 16’lık LCD panellerde 14 uç bulunur (Resim 3). Bunların 8 tanesi paralel portun DATA pinlerine bağlanır. Aşağıdaki tabloda LCD ekranın pinlerinin bağlantıları verilmektedir. 15 ve 16 numaralı ayaklar ise LCD panelinin ışığını yakmak için kullanılır.

Pin Sembol İşlev
1 Vss Power supply (GND)
2 Vdd/Vcc Power supply (+5V)
3 Vee/Vo Contrast adjust
4 RS 0 = Instruction input / 1 = Data input
5 R/W 0 = Write to LCD module / 1 = Read from LCD module
6 E Enable signal
7 DB0 Data pin 0
8 DB1 Data pin 1
9 DB2 Data pin 2
10 DB3 Data pin 3
11 DB4 Data pin 4
12 DB5 Data pin 5
13 DB6 Data pin 6
14 DB7 Data pin 7
                                                     - Resim 3 -
Tabloda belirtilern bağlantılar çok açıklayıcı olmayabilir. Bu yüzden Resim 4’te bağlantı şemasıda* belirtilmiştir. Biraz lehim yapmasını bilen arkadaşlar bu bağlantıyı kolaylıkla yapabilirler. Bağlantımız bittikten sonra işin rahat kısmına yani kod kısmına geçeceğiz.



                                                 - Resim 4 -

Daha öncede bahsettiğim gibi bu projede amacımız LCD’nin yapısı üzerinde uzun uzun çalışmak değildir. Asıl önemli olan bilgisayarımızdan LCD panelimize verileri gönderebilmektir. Yazının aşağısında kaynaklar bölümünde LCD ekran yapıları ile ilgili kaynak siteleri inceleyebilirsiniz. Evet en sonunda geldik işin zevkli tarafına yani kodlamaya...

LCD panele veri göndermek;

Paralel Port ile herhangi bir işlem yapabilmek için öncelikle inpout32.dll dosyasını "WINDOWS/system32" klasörü içerisine kopyalamanız gerekmektedir. Bu dll dosyası paralel protundan veri iletişimini sağlamaktadır. Projemizde de bu dll dosyasını çağırmak için öncelikle PortInterop.cs adında bir c# dosyası yaratmalıyız. Aşağıdaki kodda da belirtildiği gibi PortAccess adında bir sınıf oluşturuyoruz. PortAccess.Output metodu sayesinde paralel portumuzdan dışarıya artık veri gönderebilecek duruma geldik. Bundan sonra LCD panelimize veri gönderebilmek için PortAccess.Output metodunu kullanacağız.

using System;
using System.Runtime.InteropServices;

public class PortAccess
{

    [DllImport("inpout32.dll", EntryPoint = "Out32")]
    public static extern void Output(int adress, int value);

    [DllImport("inpout32.dll", EntryPoint = "Inp32")]
    public static extern int Input(int adress);
}
Şimdi ise MediaPlayerda çalan müzük bilgilerinin nasıl çekildiğini göreceğiz. Daha sonra ise projemizde LCD ekrana MediaPlayerdaki müzik bilgilerinin nasıl yazıldığını göreceğiz.

MediaPlayer’dan veri çekme (ve iTunes);

Windows Media oynatıcısı bir çok plug-in içermektedir. Bizimde bu projede ihtiyacımız olan plug-in "Windows Media Player 9 Series Fun Pack" sitesinde bulunmaktadır. Bu siteden Blogging Plug-in programını kurup çalıştırmalısınız. Bu plug-in Media Player 9 ve 10 ile çalışmaktadır. Bu plug-in’nin 2 işlevi bulunmaktadır. Birincisi şarkı, şarkıcı, albüm isimlerini ve şarkı süresini Media Player’da title barda yazması, ikinci ve bizim için önemli tarafı ise registry’de şarkı bilgilerinin yazılmasıdır. Bu sistemin tasarlanmasının asıl amacı adından da belli olduğu gibi blog sitenize o anda çalan şarkı bilgilerinin yazılmasıdır(blogging programı gerekli). Bu programı kurduktan sonra Start --> Run --> regedit yazın, daha sonra ise HKEY_CURRENT_USER\Software\Microsoft\MediaPlayer\CurrentMetadata bölümüne gelin. Resim 4’te de gördüğünüz gibi çalan şarkının bilgileri registry’e yazılacaktır. Daha sonra programımız sayesinde bu bilgileri buradan çekip LCD ekrana yazmayı göreceğiz.



                                                    - Resim 4 -

Geldik eğlenceli bölüme şimdiye kadar uyguladıklarımızı projemizde birleştireceğiz.

private void Form1_Load(object sender, EventArgs e)
{
    Microsoft.Win32.RegistryKey currentMetadata = Microsoft.Win32.Registry.CurrentUser.OpenSubKey(@"Software\Microsoft\MediaPlayer\CurrentMetadata", false);

    string title = currentMetadata.GetValue("Title", "Belirtilmemis") as string;
    string album = currentMetadata.GetValue("Album", "Belirtilmemis") as string;
    string author = currentMetadata.GetValue("Author", "Belirtilmemis") as string;
    string duration = currentMetadata.GetValue("durationString", "Belirtilmemis") as string;

    label1.Text = title;
    label2.Text = author;
    label3.Text = duration;
    label8.Text = album;

    notifyIcon1.ShowBalloonTip(2, "Şimdi Çalıyor", author + ’\n’ + title + " (" + duration + ")" ,ToolTipIcon.Info);

    writetoLCD(title, duration);

    currentMetadata.Close();
}
Programımız derlenip çalıştığında ilk yapacağı şey daha öncede bahsettiğim gibi registry’e gibip isteğimiz bilgileri çekecektir. Registry’e Microsoft.Win32.RegistryKey sınıfı ile kolaylıkla ulaşabiliriz. Daha sonra title, album, author ve duration adında 4 adet string oluşturalım. Bu stringler Media Player’da çalan şarkının registry den alınmış bilgileridir. Alınan bilgileri label’lara yazıyoruz (Resim 5). Eğer şarkıda bazı bilgiler eksikse "Belirtilmemistir" yazacaktır. Daha sonra ise Toolbarda da şarkı bilgilerinin görünmesi için notifyIcon sınıfını kullandım (Resim 6). Burada sadece notifyIcon sınıfınında nasıl kullanıldığını göstermek istedim. İsterseniz bunu kullanmayabilir ya da farklı metodlarla farklı özelliklerde katabilirsiniz.

                     - Resim 5 -

 
               

     - Resim 6 -

 
writetoLCD fonksiyonunda ise şarkının adı ve süresi çağırılıyor. Bu string değerlerini ise LCD panelimize yazdırıyoruz.

private void writetoLCD(string title, string duration)
{

    PortAccess.Output(data, 1);
    PortAccess.Output(control, 8); Thread.Sleep(1);
    PortAccess.Output(control, 9); Thread.Sleep(1);

    int a;
    char[] line1_ch_buffer, line2_ch_buffer;
    string line1_st_buffer, line2_st_buffer;

    line1_st_buffer = title;
    line1_ch_buffer = line1_st_buffer.ToCharArray();
    line2_st_buffer = duration;
    line2_ch_buffer = line2_st_buffer.ToCharArray();

    HangiSatir(1, 1);
    for (a = 0; a < line1_ch_buffer.Length; a++)
    {
        int delay = 100;
        PortAccess.Output(control, 4); Thread.Sleep(1);
        PortAccess.Output(data, (int)line1_ch_buffer[a]);
        Thread.Sleep(delay);
        PortAccess.Output(control, 5); Thread.Sleep(1);
    }

    HangiSatir(2, line1_ch_buffer.Length);
    for (a = 0; a < line2_ch_buffer.Length; a++)
    {
        int delay = 100;
        PortAccess.Output(control, 5); Thread.Sleep(1);
        PortAccess.Output(control, 4); Thread.Sleep(1);
        PortAccess.Output(data, (int)line2_ch_buffer[a]);
        Thread.Sleep(delay);
        PortAccess.Output(control, 5); Thread.Sleep(1);
    }
}
Görüldüğü gibi kısa bir kodumuz var. PortAccess.Output(data, 1) kodu LCD ekranımızı temizlemeye yarar. Daha sonraki 2 satır kod ise paralel portun kontrol bitlerine değer atar. Bu değerlerin ne olduğu ve neye göre atandığı hakkındaki bilgileri yazının sonundaki kaynaklardan bulabilirsiniz. Daha öncede belirttiğim gibi burada amacımız LCD ekran yapısını ya da paralel port yapısını incelemek değil. line1_ch_buffer ve line2_ch_buffer karater dizisini oluşturmamızın amacı şarkı adını(line1_st_buffer) ve süresini(line2_st_buffer) LCD ekrana karakter karakter aktarmamızdır. Bu yüzden her string’i karakter dizi kümesine dönüştürdük. HangiSatir fonksiyonu ise LCD ekranımızda yazacağımız karakter dizisinin hangi satırda olması gerektiğini belirtir. for döngüsünü ise her karakteri tek tek LCD ye göndermemizi sağlar. Ben her karakterin gönderilmesi için bir gecikme olmasını istedim. Bu yüzden delay adında bir int değişkeni kullandım. Böylelikle her karakter yazıldıktan sonra program 100ms beklemekte. Bu bence ekranda daha hoş gözükmekte. Yalnız unutmamak gerekir ki Thread.Sleep sınıfını kullanmak için kodumuzun başına "using System.Threading;" yazmamız gerekli. Bu sınıfı çağırmadan Thread.Sleep sınıfını çağıramayız. Şimdi ise kısaca HangiSatir sınıfını inceleyelim;

private void HangiSatir(int line, int column)
{
      PortAccess.Output(control, 8);

    if (line == 1)
      PortAccess.Output(data, 127 + column);

   if (line == 2)
  {
     int sayi = 39 - column;
     for (int i = 0; i <= sayi; i++)
    {
          PortAccess.Output(control, 4); Thread.Sleep(1);
          PortAccess.Output(data, 16);
          PortAccess.Output(control, 5); Thread.Sleep(1);
    }
  }
}
Bu sınıfta beni en çok şaşırtan durum satırı belirleme oldu. Normal koşullarda birinci satırda yazmak için (public static extern void Output(int adress, int value)) value değerine 128, ikinci satıra yazmak için ise 128+64 yani 192 belirtmemiz gerekir. Bunu belirttikten sonra paralel porttan göndereceğimiz veri LCD de isteğimiz satırda yazılıyor. Gerek türkçe gerekde ingilizce kaynaklarda yapı bu şekilde belirtiliyor. Benim bitirme tezim paralel port üzerinden ev otomasyonuydu bu yüzden farklı LCD modelleriylede (Samsung 1602, Hitachi HD44780) bunu denedim Fakat her iki modelde alt satıra geçeceğine farklı bir karakteri ekrana yazıyordu. Bu yüzden deneme yanılma yoluyla alt satıra geçmenin yöntemini buldum. İlk satırı 39 karaktere tamamlamak. Yani aslında ilk satırda 40. karaktere yazacağınız yazı 2.satırda ilk karakter olarak cıkıyor. Resim 7 de standart bir LCD ekranın karakter kümesi bulunmaktadır.



                - Resim 7 -

Sonuç;

Artık projemizin sonuna geldik. Projemizde görüldüğü gibi çok basit ve kısa bir kod derledik. LCD ekranımızı lehimlemek biraz vaktinizi alabilir. Ama en sonunda kolaylıkla yeni bir kasa modifikasyonu geliştirdiniz. Kod ya da bağlantı ile ilgili sorularınızı, bana ulaştırırsanız size yardımcı olabilirim. Resim 8’de projemizin son hali görünmektedir. Hepinize iyi çalışmalar...



                                        - Resim 8 -

Uygulamayı indirmek için tıklayınız

Sami Ventorero (Bilgisayar Müh.)
[email protected]

Kaynak;

http://www.codeproject.com/csharp/cspplcds.asp (LCD yapısı ile ilgili)

*http://www.elektronikhobi.com/dokuman.asp?id=94&user_enc= (LCD yapısı ile ilgili)

http://www.microsoft.com/windowsxp/downloads/powertoys/wm_create.mspx (Media Player Blogging Plug-in)
Makale:
LCD Ekranlar, ITunes/Media Player ve .Net C#, Visual C# ve .NET Sami Ventorero
  • Yazılan Yorumlar
  • Yorum Yaz
ŞUB
27
2006
Teşekkür ederim. Bu tip konularda bir makale açığı var. En yakın zamanda yeni makalelerde hazırlayacağım...
ŞUB
26
2006
Çok güzel ve bir o kadar da ilginç bir makale olmuş Sami Bey.Bu konulara ilgi duyanlar adına bu tür makalelerinizin devamını bekliyoruz. Teşekkürler.
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