Not 10: T6963c 240×128 Grafik LCD Uygulaması

Yayınlandı: 09 Aralık 2011 / Microchip PIC Programlama...
Etiketler:, , , , , , , , ,

Grafik LCD’ler karakter LCD’lerden farklı olarak üzerindeki bütün piksellerin tek tek kontrol edilebildiği ekran çeşitleridir. 128×64,240×64,240×128 gibi çok farklı boy ve ebatta bulunabilirler. Biz bu yazımızda 240×128 boyutlarındaki bir LCD’nin nasıl kullanılacağına bakacağız.

MikroC derleyicisinin piyasada en çok kullanılan iki farklı grafik lcd kontrolcüsü için iki ayrı kütüphanesi bulunmaktadır. Bu kontrolcülerden birisi KS0108 diğeri ise T6963c’dir. Biz bu yazıda Toshiba firmasının üretmiş olduğu T6963c kontrolcüsünü kullanan bir grafik lcd kullanacağız dolayısı ile MikroC’nin T6963c kütüphanesini kullanmak zorundayız. Bu kütüphanenin kodlarını uzun uzun anlatmayacağım. MikroC’nin yardım dosyasında çok detaylı bilgi zaten verilmiş durumda. Ben burada sadece yapmış olduğum örnek uygulamanın kodlarını paylaşmak istiyorum. Kodlar üzerinde değişiklik yaparak hangi kodun ne iş yaptığını kolayca görebilirsiniz.

Grafik lcd’de resim bastırmak için bilinmesi gereken en önemli şey resimlerin hex kodlarına dönüştürüldükten sonra projemize eklenmesidir. Bunu yapmak için MikroC derleyicisindeki Project menüsünün altında bulunan Add To Project seçeneği kullanılarak hex kodlarına dönüştürdüğümüz resim dosyalarımızı projeye dahil etmemiz gereklidir. Bilinmesi gereken bir diğer önemli konus ise aynı seçenek kullanılarak ” T6963.h” dosyasının da projemiz ile aynı klasör altında bulunması ve projeye dahil edilmesidir. Ayrıca bu dosya kodların başında “#include” komutu ile projeye dahil edilmektedir. Peki resim dosyalarını nasıl hex kodlarına dönüştüreceğiz? Bunu yapmak için burada bulunan “Image To LCD” programını kullanıyoruz. Bu programın ekran görüntüsü aşağıda görülebilmekte.

Programdaki “Max width and Height” yazan kısma resim dosyamızın en ve boy bilgilerini pixel cinsinden girdikten sonra, kırmızı ile işaretlediğim seçenekte bulunan tiki kaldırmamız gerekiyor. Eğer bunu yapmaz isek resim lcd’ye düzgün bir biçimde yansımayacaktır. Daha sonra “save” ikonuna tıklayarak dosyamızı isimlendirebilir ve kaydedebiliriz. Eğer hareketli animasyonlar oluşturmak istiyor isek gif dosyaları bizim için biçilmiş kaftandır. Bu gif dosyalarındaki her bir resim karesini bu program ile çıkartabilir ve LCD’mize arka arkaya bastırarak hareketli görüntüler oluşturabiliriz. (benim aşağıdaki uygulamada yapmış olduğum gibi…)

Bu da uygulamamızın videosu;

Bu da devre şemamız. Simülasyon için çizdiğimiz devrede tabiki gerçeğe uyaralanacak asgari elemanlar gösterilmedi. (Bu devreyi gerçekte çalıştırabilmek için mikrodenetleyiciye osilatör bağlanmalı, enerji temin edilmeli, lcd’nin boşta kalan uçları uygun şekilde gerekli yerlere bağlanmalı ve kontrast ayarı yapmak için gerekli elemanlar devreye bağlanmalı.)Devrede 18F2550 mikrodenetleyicisini kullandım çünkü 48MHZ hızda çalışabiliyor. İsterseniz 16f628A’ yı da kullanabilirsiniz. Bunun için LCD’nin “T6963C_init” kısmında çok küçük bir değişiklik yapmanız gerekir.

Sıra geldi kodlarımıza göz atmaya..

#include "T6963C.h"
char i;
extern const char img0[];
extern const char img1[];
extern const char img2[];
extern const char img3[];
extern const char img4[];
extern const char img5[];
extern const char img6[];
extern const char gImage_dun0[];
extern const char gImage_dun1[];
extern const char gImage_dun2[];
extern const char gImage_dun3[];
extern const char gImage_dun4[];
extern const char gImage_dun5[];
extern const char gImage_dun6[];
extern const char gImage_dun7[];
extern const char gImage_dun8[];
extern const char gImage_dun9[];
extern const char gImage_dun10[];
extern const char gImage_dun11[];
extern const char ata[] ;

void main()
{
T6963C_init(240, 128, 8, &PORTB, &PORTC, 5, 7, 6, 4) ;
T6963C_graphics(1) ;
T6963C_text(1) ;
T6963C_sprite(75, 0, ata, 90, 118) ;
T6963C_write_text(" IZINDEYIZ! ", 8, 15, T6963C_ROM_MODE_XOR);
delay_ms(4000);
T6963C_panelFill(0);

while(1)
{
for(i=0;i<20;i++)
{
T6963C_sprite(60, 20, img0, 150, 90); //X ekseninde 60., Y ekseninde 20. pikselden başlayarak resmi bastır.
delay_ms(10);                         // Resmin eni 150, boyu 90 piksel.
T6963C_sprite(60, 20, img1, 150, 90);
delay_ms(10);
T6963C_sprite(60, 20, img2, 150, 90);
delay_ms(10);
T6963C_sprite(60, 20, img3, 150, 90);
delay_ms(10);
T6963C_sprite(60, 20, img4, 150, 90);
delay_ms(10);
T6963C_sprite(60, 20, img5, 150, 90);
delay_ms(10);
T6963C_sprite(60, 20, img6, 150, 90);
delay_ms(10);
}
T6963C_panelFill(0);
for(i=0;i<70;i++)
{
T6963C_sprite(60, 20, gImage_dun0, 88, 88);
delay_ms(50);
T6963C_sprite(60, 20, gImage_dun1, 88, 88);
delay_ms(50);
T6963C_sprite(60, 20, gImage_dun2, 88, 88);
delay_ms(50);
T6963C_sprite(60, 20, gImage_dun3, 88, 88);
delay_ms(50);
T6963C_sprite(60, 20, gImage_dun4, 88, 88);
delay_ms(50);
T6963C_sprite(60, 20, gImage_dun5, 88, 88);
delay_ms(50);
T6963C_sprite(60, 20, gImage_dun6, 88, 88);
delay_ms(50);
T6963C_sprite(60, 20, gImage_dun7, 88, 88);
delay_ms(50);
T6963C_sprite(60, 20, gImage_dun8, 88, 88);
delay_ms(50);
T6963C_sprite(60, 20, gImage_dun9, 88, 88);
delay_ms(50);
T6963C_sprite(60, 20, gImage_dun10, 88, 88);
delay_ms(50);
T6963C_sprite(60, 20, gImage_dun11, 88, 88);
delay_ms(50);
}

}
}

Buradan bu notumuz ile alakalı bütün dosyaları indirebilirsiniz. İyi çalışmalar..
Aşağıdaki bölümden tüm sorularınızı ve görüşlerinizi bana iletebilirsiniz.

yorum
  1. Güneş SARAÇ dedi ki:

    mrb öncelikle paylaşım için teşekkürler,

    klasörü indirdim ve proteusda çalıştırdım, ancak! örneğin gif.c içinde yer alan ana kodda “izindeyiz” yazısı yerine başka birşey yazıp CCS de compile ettiğimde direkman T6963C.h için bana hata vermektedir.

    daha önceden bu T6963C.h’ı PICC içersindeki driver kısmına ekledim dosya bulamama gibi bir sıkıntısı yok hataya bakdığımda bana

    “void T6963C_init(unsigned int w, unsigned char h, unsigned ” hatasını göstermekte…

    özetle göndermiş olduğunuz kod içersini olduğu gibi compile edemiyorum kesin bende bir hata vardır bunu nasıl giderebilirim…

    yardımlarınızı bekliyorum…

    iyi çalışmalar…

  2. mustafa dedi ki:

    Hocam baska resim göstermek için otomatik resmin kodlarını yazan programı yükleyebilirmisin?

  3. hasan dedi ki:

    Güzel bir yazı

  4. Uğur dedi ki:

    Merhabalar, öncelikle makaleniz için teşekkür ederim, oldukça açıklayıcı olmuş. Entegrenizin config ayarlarını da paylaşabilmeniz mümkün mü acaba ?

    Tekrar teşekkürler.

  5. Uğur dedi ki:

    özür dilerim dikkat etmemişim, ihtiyacım olan bilgilere ulaştım. Çok büyük bir yükten kurtardınız beni, teşekkürler 🙂

  6. Uğur dedi ki:

    Tekrardan merhabalar, yine bu yazı üzerine size bir sorum olacak, cevaplayabilrseniz çok memnun kalırım.

    Yapmış olduğunuz projeyi SPI üzerinden tekrarlamak istedim. Öncelikle MMC card içerisinde bulunan resim dosyasının hex komutlarını SPI ile okuyup, yine SPI ile (tabi çoğaltıcı kullanarak) SPI_T6963c kütüphanesinin yardımı ile Glcd’ ye göndermek istedim ancak bir türlü başarılı olamadım. Dışarıdan projeye eklenen resim gayet rahat aktarılıyor ancak bir dosyadan okunan resim nasıl aktarılır bunun cevabını bulamadım. Örnekle açıklamak gerekirse MMC dosyamın içeriğinde şunlar mevcut;

    0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X7F,0XFC,0X7F,
    0XFF,0XFE,0X60,0X40,0X0E,0X30,0X00,0XDA,0X38,0X00,0X32,0X2C,0X00,0X62,0X26,0X00,
    0XC2,0X21,0X81,0X82,0X20,0XC3,0X02,0X20,0X66,0X02,0X38,0X18,0X02,0X24,0X00,0X02,
    0X20,0X00,0X02,0X20,0X08,0X06,0X30,0X28,0X0A,0X20,0XDF,0XFE,0X3F,0XDF,0XC0,0X00,
    0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00

    bu verileri text olarak ekrana basabiliyorum, yani okumada sıkıntı çekmiyorum. Ancak aşağıdaki şu kodu kullandığımda;

    unsigned char veri[100];

    void main()


    if(mmc_error == 0) {
    SPI_T6963C_graphics(1);
    for(i=0; i<100; i++)
    veri[i] = SectorData[i]; //SectorData, mmc dosyasının içeriğini okuyor.
    }
    SPI_T6963C_sprite(76, 4, veri, 20, 20);

    ekranda şöyle bir hata çıktısı alıyorum : "Illegal pointer conversion"
    Problemimi MikroC' nin forumunda da paylaştım, resim dosyamı sabit olarak tanımlamam gerektiğini söylediler. Ancak ben anlık olarak okuduğum bir veriyi ekrana bastırıyorum nasıl sabit olabilir bir türlü anlamadım. Bu hususta yardımcı olabilirseniz çok sevinirim. Problemi açıklayıcı olarak anlatamamış olabilirim belki anlamadığınız yer olursa tekrardan açıklayabilirim.

    İyi çalışmalar…

  7. Uğur dedi ki:

    evet, pointer ile de denedim ama olmadı :/

  8. Emrullah dedi ki:

    Hocam MikroC de osilator ayarını yapamıyorum. Usb kullanmaya çalışıyorum full speed de çalışacak ve aynı zamanda pic in kullanacağı frekansta 48MHZ olacak. 20MHZ lik kristal takılı. Acaba rica etsem bu ayarların uygulandığı “edit project” bölümünün fotoğrafını çekip yollayabilir misiniz? Şimdiden teşekkürler.

    • mikrodunya dedi ki:

      Yazının en altında paylaşmış olduğum proje dosyasındaki ayarlar 20MHz kristal için yapılmıştır ve PLL ile 48MHz’de çalıştırılmaktadır işlemci.

  9. hasan dedi ki:

    Slm
    Güzel çalışmalar paylaşıyorsunuz.
    Çalışmalarınızın devamını diliyorum.
    Bende bir Mikroc kullanıcısı olarak sizi takipteyim.
    Ufak tefek bende kendi çapımda PIC ve ARM ile bir şeyler yapıyorum
    İsterseniz yaptığım şeyleri size gönderebilirim.
    Sitenizde yayınlarsanız sevinirim.
    Tüm bu işlerle uğraşan arkadaşlara yardımcı olabilecek şeyler paylaşmak güzel
    olur diye düşünüyorum.

    İyi çalışmalar
    Saygılarımla
    Hasan

    • mikrodunya dedi ki:

      Son zamanlarda vakit bulamıyorum yeni yazılar yayınlamak için. Aslında ARM ile bir çok çalışma yaptım fakat yayınlamak için zaman bulamıyorum. Sizin göndereceğiniz çalışmaları tabiki yayınlayabilirim. Mail adresime gönderirseniz düzenleyip yayınlarım. Saygılar.

  10. metaltrrocker dedi ki:

    Merhabalar
    Aldığım hatalar bunlar.Oluşturduğum proje dosyasını da atacağım.
    0 1 mikroCPIC1618.exe -MSF -DBG -pP18F2550 -DL -O11111114 -fo48 -N”C:\Users\Psefit\Documents\Mikro C denemeleri\GLCD2\GLCD2.mcppi” -SP”C:\Users\Public\Documents\Mikroelektronika\mikroC PRO for PIC\defs\” -SP”C:\Users\Public\Documents\Mikroelektronika\mikroC PRO for PIC\uses\P18\” -SP”C:\Users\Psefit\Documents\Mikro C denemeleri\GLCD2\” -IP”C:\Users\Psefit\Documents\Mikro C denemeleri\GLCD2\” “GLCD2.c” “__Lib_Math.mcl” “__Lib_MathDouble.mcl” “__Lib_System.mcl” “__Lib_Delays.mcl” “__Lib_CType.mcl” “__Lib_CString.mcl” “__Lib_CStdlib.mcl” “__Lib_CMath.mcl” “__Lib_Conversions.mcl” “__Lib_Sprintf.mcl” “__Lib_PrintOut.mcl” “__Lib_Sprinti.mcl” “__Lib_Sprintl.mcl” “__Lib_Time.mcl” “__Lib_Trigonometry.mcl” “__Lib_Button.mcl” “__Lib_Keypad4x4.mcl” “__Lib_Manchester.mcl” “__Lib_OneWire.mcl” “__Lib_PS2.mcl” “__Lib_Sound.mcl” “__Lib_SoftI2C.mcl” “__Lib_SoftSPI.mcl” “__Lib_SoftUART.mcl” “__Lib_ADC_A_D.mcl” “__Lib_EEPROM_256.mcl” “__Lib_FLASH_w32_e64.mcl” “__Lib_I2C_b10.mcl” “__Lib_PWM_c21.mcl” “__Lib_SPI_b10c7.mcl” “__Lib_UART_c67.mcl” “__Lib_USB_genHID.mcl” “__Lib_PortExpander.mcl” “__Lib_CANSPI.mcl” “__Lib_GlcdFonts.mcl” “__Lib_Glcd.mcl” “__Lib_LcdConsts.mcl” “__Lib_Lcd.mcl” “__Lib_Mmc.mcl” “__Lib_MmcFat16.mcl” “__Lib_RS485.mcl” “__Lib_T6963C.mcl” “__Lib_SPIGlcd.mcl” “__Lib_SPILcd.mcl” “__Lib_SPILcd8.mcl” “__Lib_SPIT6963C.mcl” “__Lib_EthEnc28j60.mcl” “__Lib_EthEnc24j600.mcl” “__Lib_TouchPanel.mcl”
    0 1139 Available RAM: 2027 [bytes], Available ROM: 32768 [bytes]
    0 126 All files Preprocessed in 578 ms
    0 122 Compilation Started t6963c.h
    26 313 Too many actual parameters GLCD2.c
    26 300 Syntax Error: ‘)’ expected, but ‘&’ found GLCD2.c
    26 402 ; expected, but ‘PORTB’ found GLCD2.c
    26 424 ‘}’ expected ‘;’ found GLCD2.c
    54 371 Specifier needed GLCD2.c
    54 300 Syntax Error: ‘)’ expected, but ‘0’ found GLCD2.c
    54 402 ; expected, but ‘,’ found GLCD2.c
    54 393 ‘T6963C_fill ‘ Identifier redefined GLCD2.c
    54 371 Specifier needed GLCD2.c
    54 396 Invalid declarator expected'(‘ or identifier GLCD2.c
    54 396 Invalid declarator expected'(‘ or identifier GLCD2.c
    54 300 Syntax Error: ‘)’ expected, but ‘+’ found GLCD2.c
    54 402 ; expected, but ‘T6963C_txtMemSize’ found GLCD2.c
    54 393 ” Identifier redefined GLCD2.c
    54 393 ‘T6963C_grMemSize’ Identifier redefined GLCD2.c
    54 312 Internal error ” GLCD2.c
    0 102 Finished (with errors): 07 Haz 2013, 05:24:57 GLCD2.mcppi

  11. metaltrrocker dedi ki:

    Kusura bakmayın hocam blogunuzu takip ediyorum.MikroC ye yeni başladım.Basit bir hata yaptıysam affola.
    Proje linki===>
    https://www.dropbox.com/s/w4qabfjuyz8d1ev/GLCD2.rar

  12. metaltrrocker dedi ki:

    Yeni versiyon için ne gibi düzenlemeler yapmam gerekir peki?
    2010 kullanıyorum bu arada,

    • mikrodunya dedi ki:

      Help dosyasında örnek uygulamalar ve kodların detaylı anlatımları mevcut. Oradan bakabilisiniz değişikliklere. Help dosyasını açmak için program açıkken F1 tuşuna basmanız yeterli.
      Saygılar.

  13. metaltrrocker dedi ki:

    söylediğiniz versiyonu kurup yeni proje oluşturdum.şöyle bir hata aldım
    routine ?table___ gImage_dun11 not defined

  14. metaltrrocker dedi ki:

    hocam tüm tanımlı dizilerde aynı sorunu veriyor.Bir çözüm bulamadım,

    • mikrodunya dedi ki:

      Project sekmesinden o tanımlı dizileri projenize dahil ediyor musunuz?
      Project/Add Project sekmesinden değişkenlerin tanımlı olduğu dosyaları dahil etmeniz lazım projeye.
      Saygılar.

  15. oğuzhan dedi ki:

    Merhaba hocam yazı için çok teşekkürler öncelikle. Ben biraz daha hızlı olan 18f26k22 pic’ini kullanıcam ama pic’i dışardan getirttim. pic fazlasıyla küçük devreye nasıl bağlayacağım bunu bilgilendirirseniz çok sevinirim.

  16. barış çakır dedi ki:

    hocam öncelikle çoooook ama çok teşekkürler emeğinize sağlık. image2lcd programında resim çevrilirken resim üzerine image2lcd yazısı ekleniyor program tarafından bunu nasıl kaldırabilirim rica etsem yardımcı olabilir misiniz?

  17. İsmail dedi ki:

    öncelikle merhaba.
    oldukça güzel bir çalışma olmuş. Ben MikroPascal Dspic pro kullanıyorum.
    T6963C library ‘ de standart olan karekterlerin dışında “GLCD Font Creator” programıyla büyük fontlar oluşturuyorum. Ancak T6963C için seçeneği işaretleyemiyorum. Dolayısıyla fontları yapamıyorum derleyicide. Bu konuda yardımcı olabilir misiniz?

  18. İsmail dedi ki:

    Peki büyük fontlu yazı nasıl yazabilirim bir yöntem ya da örnek kod söyleyebilir misiniz.

Yorum bırakın