Not 27: Nokia 3310-5510 LCD Kullanımı

Yayınlandı: 03 Ocak 2015 / Microchip PIC Programlama...
Etiketler:, , , , , , ,

Adsız  Merhabalar. Uzun zamandır kendime ve bloğuma zaman ayıramadım. Yılbaşı tatilini fırsat bilerek daha önce yapmış olduğum çalışmalardan birini paylaşmak  istedim.

Boyutunun küçük olması, nadir bulunuşu gibi sebeplerle sağda solda görmeme rağmen hiç uğraşmadığım fakat DIY projecilerinin de sıkılıkla kullandığı bir grafik lcd ekran olan Nokia 3310-5110 ekranı ile biraz ilgilendim ve PIC-MikroC  için bir kütüphane oluşturdum.  Kütüphane dosyalarını paylaşmadan önce isterseniz bu ekranın nasıl çalıştığına biraz göz atalım.

PCD8544 isimli sürücüye sahip bu ekranlar 84×48 piksel (enlemesine 84, boylamasına 48 piksel) boyutlarındadır .  SPI arayüzüne sahip PCD8544 sürücüsü sayesinde az sayıda pin kullanılarak mcu bağlantısı yapılabilir.

Adsız

Büyük halini görmek için tıklayın.

Yukarıdaki şemada Nokia3310-5110 LCD ekranının PIC16f628A ile bağlantısı görülebilir.  Burada dikkat edilmesi gereken nokta, besleme voltajının maksimum 3.3V minimum 2.7V olması gerektiğidir. Ayrıca Vout pinine en az 1uF kapasitör bağlı olmalıdır.

Sürücü entegrenin datasheetinden yararlanarak hazırlamış olduğum kütüphane dosyasını Libstock.com isimli siteye yükledim. Libstock.com isimli site mikroelektronika firmasına ait derleyicilerle uyumlu kodların facebook’u olarak adlandırılabilir. Bu sitede pek çok kullanıcı kendi kütüphane dosyalarını, örnek kodlarını ve projelerini paylaşmaktadır. Oldukça faydalı bir sitedir. Üye olmanızı ve arada sırada göz atmanızı tavsiye ederim.  Benim kütüphane dosyalarını yüklediğim sayfaya buradan ulaşabilirsiniz. İndireceğiniz klasörün içerisinde .mpkg uzantılı bir dosya bulacaksınız. İşte bu dosya bizim kütüphanemizdir. Bu kütüphaneyi yükledikten sonra mikroC pro for pic derleyicisini çalıştırdığınızda, library manager’ın içerisinde aynen diğer mikroC kütüphaneleri gibi bulunduğunu göreceksiniz. Library manger aracılığı ile bu kütüphaneyi aşağıdaki resimde gösterildiği gibi seçip kullanabilirsiniz.

Büyük halini görmek için tıklayın.

Büyük halini görmek için tıklayın.

Kütüphane dosyasını ekleyebilmek için ilk önce package manager isimli programı bilgisyarımıza yüklememiz gerekmektedir. Bu programcığı da şuradan indirebilirsiniz. Programı yükledikten sonra mpkg uzantılı kütüphane dosyasına çift tıklayarak yükleme işlemini gerçekleştirebilirsiniz.

Nokia 3310-5110 ekranlarına resim basabilmek amacıyla mikroc pro for pic derleyicisi içerisinde bir dönüştürme aracı bulunmaktadır. Bu araç sayesinde maksimum 84*48 boyutlarındaki tek renkli .bmp dosyalarını hex kodlarına dönüştürebilir ve ekrana basabiliriz. Bu araca ulaşabilmek için Tools menüsü altından GLCD bitmap Editor isimli aracı seçmemiz ve bu araçtaki Nokia 3310 sekmesine gelmemiz yeterlidir. Aşağıda bu işlemin nasıl yapılacağı gösterilmiştir.

Büyük hali için tıklayın..

Büyük hali için tıklayın..

GLCD Bitmap Editor aracılığı ile istediğimiz tek renkli bmp resmini seçip hex kodlarını üretebiliriz.

Aşağıda kütüphanenin örnek kullanımna ait kodları görebilirsiniz.

// NOKIA 3310 PCD8544 PIN DEFS
sbit nok_res  at PORTB.B3;
sbit nok_sce  at PORTB.B4;
sbit nok_dc   at PORTB.B5;
sbit nok_sdin at PORTB.B6;
sbit nok_sclk at PORTB.B7;

sbit nok_res_dir  at TRISB.B3;
sbit nok_sce_dir  at TRISB.B4;
sbit nok_dc_dir   at TRISB.B5;
sbit nok_sdin_dir at TRISB.B6;
sbit nok_sclk_dir at TRISB.B7;
// End of NOKIA 3310 PCD8544 PIN DEFS

/////////////////////////////////////////////////////////
// ------------------------------------------------------
// Picture name: mikro_bmp
// GLCD Model: Nokia3310 Like
// ------------------------------------------------------

unsigned char const mikro_bmp[504] = {
  0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
  0, 255, 255,   0, 255, 255, 255,   7,  71,  99,  99,  99,
 99,  99,  99,  99, 103,   7, 143, 255, 255,  63,  63,  31,
 15,  15,   7,   7,   7,   3,   3,   3,   3,   3,   3,   3,
  3,   3,   7,   7,   7,  15,  15,  31,  31,  63, 255, 255,
255, 255, 255, 255, 255,   0, 255, 255,   0,   0,   0,   0,
  0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
  0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
  0, 255, 255,   0, 255, 255, 255,  14,  12,  12,  28,  60,
 60,  60,  60,  60, 252, 254, 255,   3,   0,   0,   0,   0,
  0,   0,   0,   0,   0,   0,   0, 248, 254, 254, 254, 252,
  0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   1,
 15, 255, 255, 255, 255,   0, 255, 255,   0,   0,   0,   0,
  0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
  0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
  0, 255, 255,   0, 255, 255, 255,  34, 102,   6,   6,  30,
 14,   6,   6,  34, 255, 255, 255,   0,   0,   0,   0,   0,
  0,   0,   0,   0,   0,   0,   0,   1,   3,   3,   3,   3,
  0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
  0, 255, 255, 255, 255,   0, 255, 255,   0,   0,   0,   0,
  0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
  0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
  0, 255, 255,   0, 255, 255, 255, 196, 254, 222, 198, 198,
198, 198, 198, 198, 255, 255, 255,   0,   0,   0,   0,   0,
  0,   0,   0,   0,   0,   0,   0, 254, 255, 255, 255, 255,
255,   7,   7,   7,   7,   7,   7,   7,   7,   7,   7,   7,
  7, 255, 255, 255, 255,   0, 255, 255,   0,   0,   0,   0,
  0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
  0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
  0, 255, 255,   0, 255, 255, 255,  16,  24,  24,  24,  24,
 24,  24,  24,  24,  27,  63, 255, 224, 128,   0,   0,   0,
  0,   0,   0,   0,   0,   0,   0,  15,  63, 127,  63,  63,
 15,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 128,
240, 255, 255, 255, 255,   0, 255, 255,   0,   0,   0,   0,
  0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
  0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
  0, 255, 255,   0, 255, 255, 255, 224, 227, 227, 227, 227,
227, 227, 227, 227, 227, 227, 227, 227, 231, 238, 252, 248,
248, 240, 240, 224, 224, 224, 224, 224, 224, 224, 224, 224,
224, 224, 224, 224, 224, 240, 240, 248, 252, 254, 255, 255,
255, 255, 255, 255, 127, 128, 255, 255,   0,   0,   0,   0,
  0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0
};

/////////////////////////////////////////////////////////

// ------------------------------------------------------
// Picture name: asd_bmp
// GLCD Model: Nokia3310 Like
// ------------------------------------------------------
unsigned const char asd_bmp[60] = {
  2,  15,  63, 252, 252, 132,   6,   6,  66, 227,   3, 195,
 34, 230,   4, 236, 172, 236,  12, 196,  38,  38,  35,   3,
  3, 131, 230, 254,  63,  14,
  0,   0,   0,   0,   7,  31, 126, 248, 224, 227, 224, 225,
226, 225, 224, 224, 224, 224, 224, 225, 226, 226, 225, 240,
252,  63,   7,   1,   0,   0
};

/////////////////////////////////////////////////////////

void main() {
int i,j;
char letter='A';

NOKIA_Init();// Init function of PCD8544

NOKIA_Chr(2,5,'X'); // Put 'X' letter 2. row, 5. column of LCD. There are 6  rows and 14 columns available.
//NOKIA_Dot(30,24);// Set dot on 30,24 coordinates.
delay_ms(2000);
NOKIA_Clear();      // Clear LCD



for(i=1;i<7;i++)
                {
                 for(j=1;j<15;j++)
                                  {
                                    NOKIA_Chr(i,j,letter++);// Print all available characters
                                    delay_ms(5);            //
                                  }
               }
delay_ms(2000);
NOKIA_Clear(); // Clear LCD


NOKIA_Out(3,6, "MikroE"); // Print string 3. row, 6. column
delay_ms(1000);           // There are 6  rows and 14 columns available.
NOKIA_Clear();

NOKIA_Image(mikro_bmp); // Print an image whole LCD (image's array length must be 504 bytes)
delay_ms(1000);
NOKIA_Clear();

NOKIA_Partial_Image(3,38,30,60,asd_bmp); // Print a partial image on 3rd row, 38th pixel of LCD
                                         //Image's x_length is 30 pixels and image array has 60 bytes.
}

Kodlarda “unsigned char const mikro_bmp[504]” olarak tanımlanmış olan hex dizisi anlamış olduğunuz gibi dönüştürülen resim dosyamızdır.
Libstock uluslararası bir site olduğu için kodların açıklamalarını ingilizce olarak yaptım. Kodlar zaten açık ve anlaşılır şekilde olduğu için problem olacağını sanmıyorum.
Tek açıklamam gereken yerin “Nokia_Image” ve “Nokia_Partial_Image” satırları olduğunu düşünüyorum. Nokia_Image komutu tüm ekrana resim basmaya yararken, Nokia_Partial_Image komutu ekranın sadece belirli bir bölgesine küçük bir resim basmamıza yarar.

Nokia 3310 LCD ekranını Proteus ile simüle edebilmek için önce model dosyalarını Proteus içerisine kopyalamamız gerekmektedir, çünkü prteus içerisinde hazır olarak bulunmamaktadır.
Nokia 3310 model dosyalarını buradan indirebilirsiniz. İndirdiğiniz dosyaları “Labcenter Electronics\Proteus 7 Professional” klasörüne kopyalamanız yeterlidir.

Gerekli bütün dosyaları buradan indirebilirsiniz.
Eğer kodlarda anlamadığınız yerler olursa çekinmeden sorabilirsiniz.

yorum
  1. Ümit dedi ki:

    Yazınız çok ilgi çekici ve bilgilndirici. Çok teşekkür ederim.

  2. muhammed dedi ki:

    Merhaba,öncelikle kütüphane için çok teşekkür ederim çok faydalı oldu ama burada sormak istediğim bir husus var,ekrana tanımlı tüm karakterlerin basıldığı for döngülerini ben şu şekilde yaptım for(i=1;i<7;i++)
    {
    for(j=1;j<15;j++)
    {
    nokia_chr(i,j,k);
    k++;
    delay_ms(250);
    } ama ekranın yarısına gelince ekrandan görüntü gidiyor ve tekrar ekran geldiği zaman kaldığı yerden devam ediyor aynı karakter sırasıyla,birde siz burada j&lt kullanmışsınız en son parantezden sonrada </pre> diye bir satır var bunlar ne anlama geliyor neden kullandınız kısaca açıklarsanız sevinirim,teşekkürler.

  3. ali dedi ki:

    yazı fontları büyütebilirmiyiz? nasıl yapabiliriz.teşekkürler

  4. ali dedi ki:

    sayın mikro dünya sizin verdiğiniz kütüphanedeki 3310.c dosyasındaki D harfi için şöyle bir karakter oluşturdum 0x1ff,0x101,0x101,0x101,0x101,0x101,0x82,0x75, ama yazı ekranda yarım çıktı başka hangi değişiklikleri yapmam gerekir.Yardımlarınız için şimdiden teşekkürler

  5. mehmet dedi ki:

    Merhaba,
    Karakterlerin ölçüsünü değiştirebilmek için ne yapabilirim.Siz 5×7 font kullanmışsınız.Örneğin bu ölçüyü 2 katına çıkartmak istesem nasıl yardımcı olabilirsiniz.

    Paylaşımınız için teşekkür ederim…

  6. Shiladitya Chatterjee dedi ki:

    First of all I like To thank You For the Library.

    But When I need To display stored value in a array of string like

    char j[4];
    int s=56;

    inttostr(s,j);
    ltrim(j);

    NOKIA_Chr(2,5,j);
    or
    NOKIA_out(2,5,’X’);

    it display nothing… How can I display stored number in a variable or string;

    • mikrodunya dedi ki:

      If you want to display a string you have to use nokia_out command. If you want to display a character you have to use nokia_chr. Nokia_out(0,1,”xyz”); nokia_chr(1,1,’x’);nokia_out(1,3,j);

      • Shiladitya Chatterjee dedi ki:

        Thank You for the reply. But I tried your above mentioned way; When ever I am using the j=5; nokia_out (1.3, j); Instead of displaying 5 in the screen it display nothing.Only Blank screen .Please Help me . I have to display x[4] array in the screen while x[4] contains only number like 15 or like anything reading it from adc_read . Thank you once again for Your Reply . Please Help me with this.

      • mikrodunya dedi ki:

        Hi.
        If you want to see ADC result on PCD8544 display using my library you may use this example;
        char thousands,hundreds,tens,ones;
        int reading;
        char array[5];

        reading=ADC_read(0);
        thousand=(reading/1000)+48;
        hundreds=((reading/100)%10)+48;
        tens=((reading/10)%10)+48;
        ones=(reading%10)+48;
        nokia_chr(0,1,thousands);
        nokia_chr(0,2,hundreds);
        nokia_chr(0,3,tens);
        nokia_chr(0,4,ones);

  7. Shiladitya Chatterjee dedi ki:

    hi Thanks once again for your precious Reply.

    I am using below code for adc read

    int Adread;
    float voltage;
    char volt[4];
    void main() {
    PORTA = 0;
    TRISA = 0X01;
    PORTB = 0;
    TRISB = 0;
    Nokia_Init();
    ADC_Init();
    NOKIA_Out(1, 1, “Digital voltmeter”);
    delay_ms(1000);
    while (1)
    {
    adread = ADC_Read(0);
    voltage = (adread * 5 * 10)/ (1024);
    inttostr(voltage,volt); // it converts integer value into string
    NOKIA_Out(2,1,”Volt = “);
    NOKIA_Out(2,11,Ltrim(v));
    NOKIA_Out(2,13,”V”);
    }
    }

    For the above code every thing is coming to display except the value of voltage …….

    While I am testing the same code using 16×2 Ch display using the Micro c Pro pic default Library it is working fine no problem. but not working with NOKIA 5110.

    • Muhammed ak dedi ki:

      öncelikle mikro c ile ilgili çalışmalarınız icon tebrikler çok başarılı olmus. Sizin çalışmalarınız takip ederek Mikro c ogrendim. Çok tşk ederim. Şu an Bende aynı problemle karşılaştım analog okuduğum değeri glcd yazamadım. Sizin belirttiğiniz şekilde olmadı. Rica etsem Yardımcı olabilir mısınız?

      • mikrodunya dedi ki:

        Bunu yapabilmek için karakterleri tek tek bulmanız gerekli. Kodunuzu gönderirseniz yardımcı olayım.

      • muhammed ak dedi ki:

        Okullar acildiginden dolayi bakamaya firsat bulamadim da biraz gec dondum kusura bakmayin
        /////////////////////////////////////////////////////////
        PİC16F877A 20MHZ İLE ADC OKUMA VE GLCD GÖSTERME
        /////////////////////////////////////////////////////////
        sbit nok_res at PORTB.B0;
        sbit nok_sce at PORTB.B1;
        sbit nok_dc at PORTB.B2;
        sbit nok_sdin at PORTB.B3;
        sbit nok_sclk at PORTB.B4;

        sbit nok_res_dir at TRISB.B0;
        sbit nok_sce_dir at TRISB.B1;
        sbit nok_dc_dir at TRISB.B2;
        sbit nok_sdin_dir at TRISB.B3;
        sbit nok_sclk_dir at TRISB.B4;

        int a;

        int binler,yuzler,onlar,birler;

        void main()
        { ADCON0=0X85;
        ADCON1=0x00;
        adc_Init();
        NOKIA_Init();
        NOKIA_Clear();

        while(1)
        {

        a=adc_read(0);
        delay_ms(2);
        birler=a%10;
        onlar=(a%100-birler)/10;
        yuzler=(a%1000-onlar)/100;
        binler=(a%10000-yuzler)/1000;

        nokia_chr(1,1,birler);
        nokia_chr(1,2,onlar);
        nokia_chr(1,3,yuzler);
        nokia_chr(1,4,binler);

        }

        }

      • mikrodunya dedi ki:

        birler=(a%10)+48;
        onlar=((a/10)%10)+48;
        yuzler=((a/100)%10)+48;
        binler=((a/1000)%10)+48;

  8. Burak yıldırım dedi ki:

    Merhabalar. Kütüphane çalışmanız için tebrik ederim. Benim sorum yazı boyutuyla ilgili. Yukarıda bazı arkadaşlar sormuş yazı boyutunu nasıl artırabiliriz diye. Ben kütüphane dosyalarınızı inceledim. Tablo dizileri ile karakter tanımlaması yapmışsınız. Yalnız ne kadar uğraşsamda yazı boyutunu artıramadım. Glcd font editor ile istediğim yazı boyutuna ait karakter tanımlamalarını oluşturdum. Kütüphane içerisindeki dizileri değiştirdim. Fakat olmadı. Bu problemi bir an önce çözmem gerekiyor. Yardımcı olursanız çok memnun olurum. Teşekkürler. İyi çalışmalar….

Bir Cevap Yazın

Aşağıya bilgilerinizi girin veya oturum açmak için bir simgeye tıklayın:

WordPress.com Logosu

WordPress.com hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap / Değiştir )

Twitter resmi

Twitter hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap / Değiştir )

Facebook fotoğrafı

Facebook hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap / Değiştir )

Google+ fotoğrafı

Google+ hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap / Değiştir )

Connecting to %s