Picproje Elektronik Sitesi

MİKRODENETLEYİCİLER => Microchip PIC => Konuyu başlatan: Phenomen - 26 Mart 2012, 14:55:29

Başlık: WG240128B TOSHIBA T6963C 240x128 GLCD ÇALIŞAN PROJE
Gönderen: Phenomen - 26 Mart 2012, 14:55:29
Selam arkadaşlar. Bir süre önce WG240128B ekran ile ilgili bir proje için bayağı uğraştım. İlk olarak CCS C' nin içindeki sürücüler T6963C chipli ekranlara uygun değil bu yüzden internetten uygun bir sürücü buldum ve ekranın boyutlarına ve kullandığım 18F452' ye uygun hale getirdim. Sürücüye ek bir kaç özellik daha ekledim ve şu an düzgün biçimde çalışıyor.  Sürücüyü elinizdeki ekran boyutlarına ve kullanacağınız işlemcinin pin durumuna göre kolay biçimde adapte edebilirsiniz sürücü dosyasında gerekli açıklamalar ingilizce olarak mevcut. Takılırsanız yardımcı olurum.

Ekranı sürerken dikkat etmeniz gereken noktalar var bunları aşağıda sıraladım.

1- Ekranın pinleri sağdan başlıyor. Yani ekranı karşınıza aldığınızda 1. pin en sağdaki, alt tarafında yazıyor fakat ben ilk başta bakmadan devreyi kurdum ve bir ekranın font selektorünü bozdum şu an sadece 6x8 modunda çalışıyor. Fakat kullanışlı ve sürücüye uygun olan mod 8x8 aman dikkat.
2- Kesinlikle devrenizi kurarken Isis' te verdiğim şemaya uygun kurunuz. Pic' in elemanları standart Isis' te ekli değil ekleyin.
*3- Isis teki simülasyon bayağı yavaş çalışıyor hızlandıramadım, siz hızlandıracak bir ayar bulursanız buraya eklersiniz. Ayrıca simülasyonda ekrana alakasız pikseller falan çiziyor Isis fakat gerçek devrede düzgün çalışıyor. Isis' e  aldanarak hatalı çizim yapıldığını zannetmeyin. Bu arada kullandığım Isis sürümü 7.8 SP2 (Build 10468) -- Çözüldü
4- Harici Eeprom ile kullanılan iletişimde gerekli CCS C sürücüsünde donanımsal I2C protokolünü kullanmak için tanımlamayı şu şekilde yaptım "#use i2c(master, sda=EEPROM_SDA, scl=EEPROM_SCL, FORCE_HW)". Olduğu gibi bırakırsanızda çalışıyor.

Yazılım hakkında bilgi: (Özelllikle resim yüklemelerinde Isis yavaş çalışıyor sabırlı olun, işlem yapılmıyor sanıp simülasyonu durdurmayın)

1- İlk Olarak Rom hafızadan açılış resmi yükleniyor.
2- Rom hafızadan yeni resim yükleniyor.
3- Harici EEprom' dan resim yükleniyor.
4- Geometrik şekillerin çizimi.
5- Ekrana düz yazı ve farklı boyutlarda fontlu yazı yazılıyor.
6- Daha da birşey yok bu kadar :)

Resim kullanımı hakkında bilgiler

1- Resimleri istediğiniz resim düzenleme yazılımında bitmap(Siyah-Beyaz) modunda düzenleyip BMP formatında kaydedin.
2- Fast LCD programı ile resminizi çağırıp "BAS" tuşuna basın :)
                              Seçenekler 1- T6963C 2- 0(8 bits) 3- Image şeklinde olacak.  BAS dosyası olarak kaydedin.
3- Kaydedilen dosyayı notepad ile açıp Tüm "&h" leri "0x" olarak değiştirin. İlk 2 satırdaki tanımlama bilgilerini silin.
4- Artık resminiz CCS C' ye uygun hale geldi.

Ek olarak Harici Eeprom' a yazmaya uygun hale getirmek için *.BAS dosyasını Binary formatında kaydetmeniz gerekli. Bunun için birçok yöntem mevcut, benim kullandığım yöndem şu şekilde.

1- Fast LCD ile oluşturup düzenlediğimiz bas uzantılı dosyayı açıp tüm içeriğini kopyalıyoruz.
2- Hex Editor Neo Programını açıp kopyaladığımız verileri yapıştırıyoruz.
3- Sonra CTRL+A ya basarak yapıştırdığımız tüm verileri seçiyoruz.
4- Export seçeneğinden dosya ismimizi belirleyip alttan Raw Text Bölümünden "None"' ı seçip "Export" tuşuna basıyoruz.
5- Eeprom için kullanılan *.bin dosyamızda hazır, kullandığınız programlayıcı ile yazabilirsiniz.

Takıldığınız yerlerde bu konudan devam ederseniz bu ekranlar için derli toplu bir başvuru kaynağı oluşur.

Not: Sürücüde tanımlaması ile alakalı hatalar düzeltildi. Isis simülasyonundaki yavaşlık Data hattını PortB' ye taşıyıp dahili pullupları kullanarak düzeltildi.

Harici Pullup Dirençli Yavaş sürüm (Sadece Isis' te yavaş). Data Hattı PortD' de


Dahili Pullup Dirençli Hızlı sürüm. Data Hattı PortB' de

https://drive.google.com/file/d/0By7sRf0RIWttbFFWbmlGYjA0S1U/edit?usp=sharing

https://drive.google.com/file/d/0By7sRf0RIWttT1ljcXM4UzBlVDA/edit?usp=sharing
Başlık: Ynt: WG240128B TOSHIBA T6963C 240x128 GLCD ÇALIŞAN PROJE
Gönderen: Murat Mert - 26 Mart 2012, 19:15:24
S.A.
eline sağlık arkadaşım güzel bir projeymiş.
Başlık: Ynt: WG240128B TOSHIBA T6963C 240x128 GLCD ÇALIŞAN PROJE
Gönderen: CeMiL_mktrnk - 26 Mart 2012, 21:41:19
çok teşekkürler
Başlık: Ynt: WG240128B TOSHIBA T6963C 240x128 GLCD ÇALIŞAN PROJE
Gönderen: Phenomen - 26 Mart 2012, 22:11:50
Cemil bey umarim faydali olmustur.
Başlık: Ynt: WG240128B TOSHIBA T6963C 240x128 GLCD ÇALIŞAN PROJE
Gönderen: bolubeyi - 28 Mart 2012, 16:13:24
Paylaşım için teşekkür ederim.Port C de olan kontrol portunu diğer portlara nasıl alabilirim ve pinleri nasıl değiştirebilirm(Port a veya port b ye)?
Başlık: Ynt: WG240128B TOSHIBA T6963C 240x128 GLCD ÇALIŞAN PROJE
Gönderen: Phenomen - 28 Mart 2012, 19:31:44
Tekrar selamlar,  "T6963C.c" sürücü dosyasındaki gerekli port tanımlama satırları var görmüşsünüzdür. Dosyanın başlarında portların tanımı yapılıyor fakat çok ilginç bir durum söz konusu :) Portları değiştirdiğinizde her zaman ilk önce kontrol portu sonra data portu olması gerekiyor yoksa sürücü çalışmıyor örnek Kontrol portA-Data portB şeklinde veya Kontrol portB-Data portC. Bu durum sürücüyü yazan arkadaşın data portunu "lcd_pin_def" yapısının içinde tanımlamasından kaynaklanıyor. Sürücüde gerekli değişiklikleri yaptım port tanımlamalarının yanlarına türkçe açıklamalar ekledim istediğiniz gibi portları tanımlayabilirsiniz artık. Konunun başındaki dosyayı yeniden yüklüyorum indirirsiniz.

Kolaylık olması açısından port değiştirmek için gerekli olan satırları ekliyorum:

#define set_tris_lcd(x) set_tris_d(x) // Data hattı hangi portta ise o tanımlanacak örneğin "set_tris_c(x)"
#use fast_io(D) // Yukarıda tanımlanan data portu girilecek örneğin fast_io(C)

#byte LCD = 0xf81        // Kontrol portunun işlemcideki adresi (18f452 için B port adresi 0xf81)
#byte LCD_Data = 0xf83   // Data portunun işlemcideki adresi (18f452 için D port adresi 0xf83)

set_tris_b(0x00);  // Kontrol portunun yönlendirilmesi
set_tris_lcd(0xff);      // Data portunun yönlendirilmesi

Ayrıca kontrol portundaki pinlerin (WR, RST, vs.) yerini değiştirmek için "lcd_pin_def" yapısındaki sıradan istediğiniz sıraya taşımanız gerekektedir. Örneğin PortB_1' e bağlı WR hattını PortB_3' e taşımak için aşağıdaki gibi yapmalısınız.

struct lcd_pin_def
{
   BOOLEAN unused1;  // Kontrol hattının 0. pini
   BOOLEAN unused3;  // Kontrol hattının 1. pini
   BOOLEAN unused2;  // Kontrol hattının 2. pini
   BOOLEAN w_bar;    // Kontrol hattının 3. pini Write bar bağlı (düşükte aktif)
   BOOLEAN unused4;  // Kontrol hattının 4. pini
   BOOLEAN r_bar;    // Kontrol hattının 5. pini Read bar bağlı (düşükte aktif)
   BOOLEAN cd;       // Kontrol hattının 6. pini Command/Data bar bağlı (1=command 0=data)
   BOOLEAN reset_bar;// Kontrol hattının 7. pini Reset bağlı (düşükte aktif)
};
Başlık: Ynt: WG240128B TOSHIBA T6963C 240x128 GLCD ÇALIŞAN PROJE
Gönderen: Phenomen - 28 Mart 2012, 20:49:15
Arkadaşlar sadece bendeki Isis sürümünden mi bilmiyorum ama simülasyon çok yavaş çalışıyordu fakat sorunun nereden kaynaklandığını buldum :). Data hattını PortB' ye alıp dahili pullup dirençleri kullanınca simülasyon inanılmaz hızlandı. Şimdi sadece eprom hattında harici pullup dirençleri olduğu için epromdan okuma yaparken yavaş çalışıyor. Yani denetleyicinin io hatlarında pullup direnç kullanılınca Isis çok yavaş çalışıyor bunu anladım. Öğrenmek istediğim sizde de aynımı çalışıyordu yoksa bendeki sürümden kaynaklı bir sorun mu? Bu arada yeni projeyide ilk mesaja ekliyorum indirebilirsiniz.
Başlık: Ynt: WG240128B TOSHIBA T6963C 240x128 GLCD ÇALIŞAN PROJE
Gönderen: JKramer - 29 Mart 2012, 09:26:07
Yanlış hatırlamyorsam Isis'deki dirençler analog ya da dijital olabiliyordu. Analog olduğu zaman, simulasyon bahsettiğiniz gibi yavaş çalışıyor sanırım.
Başlık: Ynt: WG240128B TOSHIBA T6963C 240x128 GLCD ÇALIŞAN PROJE
Gönderen: Murat Mert - 29 Mart 2012, 19:02:00
Alıntı yapılan: JKramer - 29 Mart 2012, 09:26:07
Yanlış hatırlamyorsam Isis'deki dirençler analog ya da dijital olabiliyordu. Analog olduğu zaman, simulasyon bahsettiğiniz gibi yavaş çalışıyor sanırım.

S.A.
Evet dirençleri analog yapınca baya hızlı oldu.
Başlık: Ynt: WG240128B TOSHIBA T6963C 240x128 GLCD ÇALIŞAN PROJE
Gönderen: Phenomen - 31 Mart 2012, 16:16:40
Alıntı yapılan: JKramer - 29 Mart 2012, 09:26:07
Yanlış hatırlamyorsam Isis'deki dirençler analog ya da dijital olabiliyordu. Analog olduğu zaman, simulasyon bahsettiğiniz gibi yavaş çalışıyor sanırım.

Çok iyi tespit dirençleri "dijital" yapınca çok hızlı çalışmaya başladı :). Teşekkürler bilgi için.
Başlık: Ynt: WG240128B TOSHIBA T6963C 240x128 GLCD ÇALIŞAN PROJE
Gönderen: bolubeyi - 04 Nisan 2012, 12:10:03
Glcd_clr komutunun nasıl kullanıldığı hakkında bilgi sahibi olan var mı? ilk girdi olarak location ikinci girdi olarak size istiyo. glcd(0,128) diyelim 0. satırı 128. karaktere kadar temizlemesi gerekmiyor mu?
Başlık: Ynt: WG240128B TOSHIBA T6963C 240x128 GLCD ÇALIŞAN PROJE
Gönderen: mierdogan - 21 Haziran 2012, 15:29:12
Selam

16F877A ile kontrol edilir mi bu display ekran? Ona göre işlemci değiştireyim

Teşekkürler
Başlık: Ynt: WG240128B TOSHIBA T6963C 240x128 GLCD ÇALIŞAN PROJE
Gönderen: mustisal - 10 Ağustos 2012, 18:22:03
Merhabalar, dosyalar silinmiş. Tekrar yüklerseniz sevinirim. Emeğinize sağlık.
Başlık: Ynt: WG240128B TOSHIBA T6963C 240x128 GLCD ÇALIŞAN PROJE
Gönderen: Phenomen - 10 Eylül 2012, 11:36:59
Alıntı yapılan: mustisal - 10 Ağustos 2012, 18:22:03
Merhabalar, dosyalar silinmiş. Tekrar yüklerseniz sevinirim. Emeğinize sağlık.
Arkadaşlar dosyaları tekrardan yükledim.

Can_GLCD.rar (https://hotfile.com/dl/171359118/15fe77d/Can_GLCD.rar.htmll)
Can_GLCD_2.rar (https://hotfile.com/dl/171359207/c9bc28c/Can_GLCD_2.rar.html)
Başlık: Ynt: WG240128B TOSHIBA T6963C 240x128 GLCD ÇALIŞAN PROJE
Gönderen: KONYALI - 10 Eylül 2012, 15:50:27
@Phenomen
Bu model LCD'den bende de var şimdiye kadar kullanmadım hiç, arka aydınlatma için Vee ucuna negatif voltaj mı vermek gerekiyor. Siz simülasyon dışında bu devreyi kurup çalıştırdınız mı? Paylaşımınızdan dolayı teşekkür ederim.
Başlık: Ynt: WG240128B TOSHIBA T6963C 240x128 GLCD ÇALIŞAN PROJE
Gönderen: mustisal - 10 Eylül 2012, 16:41:04
@KONYALI
Vee ucu negatif voltaj çıkış ucu. Isis dosyasındaki bağlantıyı yapacaksınız.
Vee ucu 10k lık potun bir ucuna, diğer ucu gnd ye, orta ucu ise Glcd nin Vo pinine bağlanacak.
Başlık: Ynt: WG240128B TOSHIBA T6963C 240x128 GLCD ÇALIŞAN PROJE
Gönderen: Phenomen - 11 Eylül 2012, 13:27:02
mustisal arkadaşın dediği doğru bağlantıları Isis şemasına göre yapın. Ekranı bir süre önce geliştirdiğim üründe aktif olarak bu şekilde kullandım.
Başlık: Ynt: WG240128B TOSHIBA T6963C 240x128 GLCD ÇALIŞAN PROJE
Gönderen: musti463 - 19 Eylül 2013, 20:46:47
18F46K22 de çalıştırmak istiyorsak kod da nereleri değiştirmeliyiz?
Başlık: Ynt: WG240128B TOSHIBA T6963C 240x128 GLCD ÇALIŞAN PROJE
Gönderen: Phenomen - 19 Eylül 2013, 21:30:15
Hotfile dosyaları silmiş nedense. Yeni link https://rapidshare.com/share/A8D6787734BE9A9B4AC8448F94D165FF (https://rapidshare.com/share/A8D6787734BE9A9B4AC8448F94D165FF)
Başlık: Ynt: WG240128B TOSHIBA T6963C 240x128 GLCD ÇALIŞAN PROJE
Gönderen: Phenomen - 02 Mart 2014, 01:23:40
GDrive linkleri:

https://drive.google.com/file/d/0By7sRf0RIWttbFFWbmlGYjA0S1U/edit?usp=sharing (https://drive.google.com/file/d/0By7sRf0RIWttbFFWbmlGYjA0S1U/edit?usp=sharing)

https://drive.google.com/file/d/0By7sRf0RIWttT1ljcXM4UzBlVDA/edit?usp=sharing (https://drive.google.com/file/d/0By7sRf0RIWttT1ljcXM4UzBlVDA/edit?usp=sharing)

Dosya menüsünü seçip indire tıklayın.
Başlık: Ynt: WG240128B TOSHIBA T6963C 240x128 GLCD ÇALIŞAN PROJE
Gönderen: gokgokhan - 27 Şubat 2015, 01:35:18
s.a ısis dosyalarını bulamadım resimde yok
Başlık: Ynt: WG240128B TOSHIBA T6963C 240x128 GLCD ÇALIŞAN PROJE
Gönderen: gokgokhan - 27 Şubat 2015, 01:37:38
glcd_init(240,128) diyorum program T6963C dosyasındaki aşağıdaki while da sonsuz döngüye giriyo çıkamıyor nerde hata yapıyorum acaba

while (status != 0x03) {  // is LCD busy?
       LCD.r_bar= 0;
       temp = LCD_Data;
       LCD.r_bar = 1;
       status = temp & 0x03;
    }
Başlık: Ynt: WG240128B TOSHIBA T6963C 240x128 GLCD ÇALIŞAN PROJE
Gönderen: Kabil ATICI - 27 Şubat 2015, 09:58:03
O kodu parçası, LCD ekranın meşgul olup olmadığını kontrol eder. Eğer orada kalıyorsa, ya bağlantılarda bir sorun var, yada programda. Yoksa ekranın çalışması çok kolaydır.

T6963C kontroller veri gönderiminde her veride o mesgul kontrolunu yapar. Hatta  o kontrollerden 2 tane daha var. Bazı komutlarda devreye giriyor.
Başlık: Ynt: WG240128B TOSHIBA T6963C 240x128 GLCD ÇALIŞAN PROJE
Gönderen: gokgokhan - 27 Şubat 2015, 13:14:04
kodu herkez kullanmış sıkıntı yok birde farklı kodalar da denedim hepsinde bu kontrol yapılıyor ve değişik kodalarda olsa yine o wihle da takılıyor yani benim anladığım donanımsal herhalde diyecem ama isis de deniyorum..kodun iç yapısını bilen biri varsa  o döngüden çıkartan işlem ne dir acaba

mesaj birleştirme:: 27 Şubat 2015, 15:13:22


(http://s13.postimg.cc/kklt1uw4j/Ekran_Al_nt_s.jpg) (http://postimg.cc/image/kklt1uw4j/)


/////////////////////////////////////////////////////////////////////////
////    T6963C.c     -      T6963C driver                            ////
////   Not for comercial Use                                         ////
////      Driver by treitmey Graphic functions and Resolution Select ////   
////                                    by mcdoganay(mcdoganay@gmail.com) ////
////                                                                 ////
//// This file contains drivers for using a Tosiba T6963C controller ////
//// in parallel/8080(intel) mode.  The T6963C is 256 pixels across  ////
////  and 256 pixels down. The driver treats the upper left pixel 0,0 ////
////                                                                 ////
////  Connections are as follows:                                    ////
////  /WR - - C4                                                     ////
////  /RD - - C5                                                     ////
////  C//D- - C6                                                     ////
////  /RST- - C7                                                     ////
////  DATA0-7 PORTD0-7                                               ////
////  LCD's FS is tied low (FS = 0 is 8x8 font)                      ////
////                                                                 ////
/////////////////////////////////////////////////////////////////////////

// 256 x 256 in the 8x8 font mode means that 30 characters across by
// 32 rows of characters may be displayed

#define set_tris_lcd(x) set_tris_d(x) // Data hattı hangi portta ise o tanımlanacak örneğin "set_tris_c(x)"
#define LCDColorBlack 0b1
#define LCDColorWhite 0b0

#use fast_io(D) // Yukarıda tanımlanan data portu girilecek örneğin fast_io(C)

const int16 TextHome = 3968;
const int8  TextArea = 30; // how many bytes before a new line
const int16 GraphicsHome = 0;
const int8  GraphicsArea = 30; // how many bytes before a new line

const int8 AutoModeWrite = 0xB0;
const int8 AutoModeRead  = 0xB1;
const int8 AutoModeReset = 0xB2;

const int8 LCDModeSet  = 0x80;   // send this OR'd with the following
const int8 LCDMode_OR  = 0b0000;
const int8 LCDMode_XOR = 0b0001;
const int8 LCDMode_AND = 0b0010;
const int8 LCDMode_TA  = 0b0100; // TEXT ATTRIBUTE mode.
const int8 LCDMode_RAM = 0b1000; // 1=CG RAM, 0=internal CG ROM

const int8 LCDSetCursorPtr  = 0x21;  // cursor address
const int8 LCDSetCursorSize = 0xA0;  // 1 line cursor

const int8 LCDDispMode = 0x90;   // send this OR'd with the following
const int8 LCDDisp_BLK = 0b0001;
const int8 LCDDisp_CUR = 0b0010;
const int8 LCDDisp_TXT = 0b0100;
const int8 LCDDisp_GRH = 0b1000;

const int8 LCDBitSet   = 0xF8;
const int8 LCDBitReset = 0xF0;
const int8 LCDBit0 = 0b000;
const int8 LCDBit1 = 0b001;
const int8 LCDBit2 = 0b010;
const int8 LCDBit3 = 0b011;
const int8 LCDBit4 = 0b100;
const int8 LCDBit5 = 0b101;
const int8 LCDBit6 = 0b110;
const int8 LCDBit7 = 0b111;

const int8 LCDSetPtr = 0xE0;


struct lcd_pin_def
{
   BOOLEAN unused1;  // Kontrol hattının 0. pini
   BOOLEAN w_bar;    // Kontrol hattının 1. pini Write bar bağlı (düşükte aktif)
   BOOLEAN unused2;  // Kontrol hattının 2. pini
   BOOLEAN unused3;  // Kontrol hattının 3. pini
   BOOLEAN unused4;  // Kontrol hattının 4. pini
   BOOLEAN r_bar;    // Kontrol hattının 5. pini Read bar bağlı (düşükte aktif)
   BOOLEAN cd;       // Kontrol hattının 6. pini Command/Data bar bağlı (1=command 0=data)
   BOOLEAN reset_bar;// Kontrol hattının 7. pini Reset bağlı (düşükte aktif)
};
struct lcd_pin_def  LCD;

  #byte LCD = 0xf81        // Kontrol portunun işlemcideki adresi (18f452 için B port adresi 0xf81)
  #byte LCD_Data = 0xf83   // Data portunun işlemcideki adresi (18f452 için D port adresi 0xf83)
 
int   glcd_ReadByte(void);
void  glcd_WriteByte(int1 cd, int data);
void  glcd_WriteByteAuto(int data);
void  glcd_WriteCmd2(int16 data, int cmd);
void  glcd_WriteCmd1(int data, int cmd);
void  glcd_gotoxy(int x, int y, int1 text);
/////////////////////////////////////////////////////////////////////////
//// Defines a 5x7 font
/////////////////////////////////////////////////////////////////////////
const int8 FONT[51][5] ={0x00, 0x00, 0x00, 0x00, 0x00, // SPACE
                         0x00, 0x00, 0x5F, 0x00, 0x00, // !
                         0x00, 0x03, 0x00, 0x03, 0x00, // "
                         0x14, 0x3E, 0x14, 0x3E, 0x14, // #
                         0x24, 0x2A, 0x7F, 0x2A, 0x12, // $
                         0x43, 0x33, 0x08, 0x66, 0x61, // %
                         0x36, 0x49, 0x55, 0x22, 0x50, // &
                         0x00, 0x05, 0x03, 0x00, 0x00, // '
                         0x00, 0x1C, 0x22, 0x41, 0x00, // (
                         0x00, 0x41, 0x22, 0x1C, 0x00, // )
                         0x14, 0x08, 0x3E, 0x08, 0x14, // *
                         0x08, 0x08, 0x3E, 0x08, 0x08, // +
                         0x00, 0x50, 0x30, 0x00, 0x00, // ,
                         0x08, 0x08, 0x08, 0x08, 0x08, // -
                         0x00, 0x60, 0x60, 0x00, 0x00, // .
                         0x20, 0x10, 0x08, 0x04, 0x02, // /
                         0x3E, 0x51, 0x49, 0x45, 0x3E, // 0
                         0x00, 0x04, 0x02, 0x7F, 0x00, // 1
                         0x42, 0x61, 0x51, 0x49, 0x46, // 2
                         0x22, 0x41, 0x49, 0x49, 0x36, // 3
                         0x18, 0x14, 0x12, 0x7F, 0x10, // 4
                         0x27, 0x45, 0x45, 0x45, 0x39, // 5
                         0x3E, 0x49, 0x49, 0x49, 0x32, // 6
                         0x01, 0x01, 0x71, 0x09, 0x07, // 7
                         0x36, 0x49, 0x49, 0x49, 0x36, // 8
                         0x26, 0x49, 0x49, 0x49, 0x3E, // 9
                         0x00, 0x36, 0x36, 0x00, 0x00, // :
                         0x00, 0x56, 0x36, 0x00, 0x00, // ;
                         0x08, 0x14, 0x22, 0x41, 0x00, // <
                         0x14, 0x14, 0x14, 0x14, 0x14, // =
                         0x00, 0x41, 0x22, 0x14, 0x08, // >
                         0x02, 0x01, 0x51, 0x09, 0x06, // ?
                         0x3E, 0x41, 0x59, 0x55, 0x5E, // @
                         0x7E, 0x09, 0x09, 0x09, 0x7E, // A
                         0x7F, 0x49, 0x49, 0x49, 0x36, // B
                         0x3E, 0x41, 0x41, 0x41, 0x22, // C
                         0x7F, 0x41, 0x41, 0x41, 0x3E, // D
                         0x7F, 0x49, 0x49, 0x49, 0x41, // E
                         0x7F, 0x09, 0x09, 0x09, 0x01, // F
                         0x3E, 0x41, 0x41, 0x49, 0x3A, // G
                         0x7F, 0x08, 0x08, 0x08, 0x7F, // H
                         0x00, 0x41, 0x7F, 0x41, 0x00, // I
                         0x30, 0x40, 0x40, 0x40, 0x3F, // J
                         0x7F, 0x08, 0x14, 0x22, 0x41, // K
                         0x7F, 0x40, 0x40, 0x40, 0x40, // L
                         0x7F, 0x02, 0x0C, 0x02, 0x7F, // M
                         0x7F, 0x02, 0x04, 0x08, 0x7F, // N
                         0x3E, 0x41, 0x41, 0x41, 0x3E, // O
                         0x7F, 0x09, 0x09, 0x09, 0x06, // P
                         0x1E, 0x21, 0x21, 0x21, 0x5E, // Q
                         0x7F, 0x09, 0x09, 0x09, 0x76};// R

const int8 FONT2[44][5]={0x26, 0x49, 0x49, 0x49, 0x32, // S
                         0x01, 0x01, 0x7F, 0x01, 0x01, // T
                         0x3F, 0x40, 0x40, 0x40, 0x3F, // U
                         0x1F, 0x20, 0x40, 0x20, 0x1F, // V
                         0x7F, 0x20, 0x10, 0x20, 0x7F, // W
                         0x41, 0x22, 0x1C, 0x22, 0x41, // X
                         0x07, 0x08, 0x70, 0x08, 0x07, // Y
                         0x61, 0x51, 0x49, 0x45, 0x43, // Z
                         0x00, 0x7F, 0x41, 0x00, 0x00, // [
                         0x02, 0x04, 0x08, 0x10, 0x20, // \
                         0x00, 0x00, 0x41, 0x7F, 0x00, // ]
                         0x04, 0x02, 0x01, 0x02, 0x04, // ^
                         0x40, 0x40, 0x40, 0x40, 0x40, // _
                         0x00, 0x01, 0x02, 0x04, 0x00, // `
                         0x20, 0x54, 0x54, 0x54, 0x78, // a
                         0x7F, 0x44, 0x44, 0x44, 0x38, // b
                         0x38, 0x44, 0x44, 0x44, 0x44, // c
                         0x38, 0x44, 0x44, 0x44, 0x7F, // d
                         0x38, 0x54, 0x54, 0x54, 0x18, // e
                         0x04, 0x04, 0x7E, 0x05, 0x05, // f
                         0x08, 0x54, 0x54, 0x54, 0x3C, // g
                         0x7F, 0x08, 0x04, 0x04, 0x78, // h
                         0x00, 0x44, 0x7D, 0x40, 0x00, // i
                         0x20, 0x40, 0x44, 0x3D, 0x00, // j
                         0x7F, 0x10, 0x28, 0x44, 0x00, // k
                         0x00, 0x41, 0x7F, 0x40, 0x00, // l
                         0x7C, 0x04, 0x78, 0x04, 0x78, // m
                         0x7C, 0x08, 0x04, 0x04, 0x78, // n
                         0x38, 0x44, 0x44, 0x44, 0x38, // o
                         0x7C, 0x14, 0x14, 0x14, 0x08, // p
                         0x08, 0x14, 0x14, 0x14, 0x7C, // q
                         0x00, 0x7C, 0x08, 0x04, 0x04, // r
                         0x48, 0x54, 0x54, 0x54, 0x20, // s
                         0x04, 0x04, 0x3F, 0x44, 0x44, // t
                         0x3C, 0x40, 0x40, 0x20, 0x7C, // u
                         0x1C, 0x20, 0x40, 0x20, 0x1C, // v
                         0x3C, 0x40, 0x30, 0x40, 0x3C, // w
                         0x44, 0x28, 0x10, 0x28, 0x44, // x
                         0x0C, 0x50, 0x50, 0x50, 0x3C, // y
                         0x44, 0x64, 0x54, 0x4C, 0x44, // z
                         0x00, 0x08, 0x36, 0x41, 0x41, // {
                         0x00, 0x00, 0x7F, 0x00, 0x00, // |
                         0x41, 0x41, 0x36, 0x08, 0x00, // }
                         0x02, 0x01, 0x02, 0x04, 0x02};// ~
/////////////////////////////////////////////////////////////////////////

#inline
void glcd_init(unsigned int16 res_x, unsigned int16 res_y) {
   
  int16 counter;

  set_tris_b(0b00000000);  // Kontrol portunun yönlendirilmesi
  set_tris_lcd(0xff);      // Data portunun yönlendirilmesi

  LCD.w_bar = 1;      // INITIAL STATES OF CONTROL PINS
  LCD.r_bar = 1;      //
  LCD.cd = 1;         // command

  LCD.reset_bar = 0;  // perform a reset
  LCD.reset_bar = 1;  // run

  // Set up the graphics and text areas
  glcd_WriteCmd2(TextHome, 0x40);
  glcd_WriteCmd2(TextArea, 0x41);
  glcd_WriteCmd2(GraphicsHome, 0x42);
  glcd_WriteCmd2(GraphicsArea, 0x43);

  // set address to 0
  glcd_WriteCmd2(0x0000, 0x24);
  glcd_WriteCmd2(0x0000, 0x24);

  // Clear all RAM of LCD (8k)
  glcd_WriteByte(1, AutoModeWrite);
  for (counter = 0; counter < 0x1fff; counter++)
  {
    glcd_WriteByteAuto(0);    // fill everything with zeros
  }
  glcd_WriteByte(1, AutoModeReset);
}

void glcd_WriteByte(int1 cd, int data)
{
    int status = 0, temp = 0;
    set_tris_lcd(0xff);
    LCD.w_bar = 1;
    LCD.r_bar= 1;
    LCD.cd = 1;//defaults

    while (status != 0x03) {  // is LCD busy?
       LCD.r_bar= 0;
       temp = LCD_Data;
       LCD.r_bar = 1;
       status = temp & 0x03;
    }

    set_tris_lcd(0x00);    // All outputs
    LCD.cd = cd;           // Command/Data bar
    LCD_Data = data;
    LCD.r_bar = 1;         // not read
    LCD.w_bar = 0;         // write
    LCD.w_bar = 1;         // release
}


void glcd_WriteByteAuto(int data)
{
   int status = 0, temp = 0; // status bits ARE DIFFERENT BITS THAN NORMAL
   set_tris_lcd(0xff);
   LCD.w_bar = 1;
   LCD.r_bar = 1;
   LCD.cd = 1; // defaults

   while (status != 0x08) {  // is LCD busy?
     LCD.r_bar = 0;
     temp = LCD_Data;
     LCD.r_bar = 1;
     status = temp & 0x08;
   }

   set_tris_lcd(0x00);     // All outputs
   LCD.cd = 0;             // This is always data, cd=0
   LCD_Data = data;        // Put data on data bus
   LCD.w_bar = 0;          // write
   LCD.w_bar = 1;          // release
}

void glcd_WriteCmd1(int data, int cmd)
{
  glcd_WriteByte(0, data);
  glcd_WriteByte(1, cmd);
}

void glcd_WriteCmd2(int16 data, int cmd)
{
  glcd_WriteByte(0, data & 0xff);
  glcd_WriteByte(0, data>>8);
  glcd_WriteByte(1, cmd);
}

int glcd_ReadByte(void)
{
  int data = 0, status = 0, temp = 0;
  set_tris_lcd(0xff);
  LCD.w_bar = 1;
  LCD.r_bar = 1;
  LCD.cd = 1;  // defaults

  #asm nop #endasm

  while (status != 0x03) {  // is LCD busy?
    LCD.r_bar = 0;
    temp = LCD_Data;
    LCD.r_bar = 1;
    status = temp & 0x03;
  }

  LCD.cd = 0;          // Command/Data bar
  LCD.r_bar = 0;        // read
  /////////////////////////////////////////////////////////
  #asm nop #endasm    // THIS PAUSE IS VERY NESSESARY !!!//
  /////////////////////////////////////////////////////////
  data = LCD_Data;
  LCD.r_bar = 1;
  LCD.cd = 1;
  return data;        // Return the read data
}

void glcd_putc(char c) {
   glcd_WriteCmd1(c - 0x20, 0xc0);
}

void glcd_gotoxy(int x, int y, int1 text) { // sets memory location to screen location x, y
   // location 1,1 is upper left corner;  text = 1 (text area), text = 0 (graphics area)
   int16 location, home;
   int line;

   if (text==0) {
      home = GraphicsHome;
      line = GraphicsArea;
   } else {
      home = TextHome;
      line = TextArea;
   }

   location = home + (((int16)y) * line) + x;
   glcd_WriteCmd2(location, 0x24);
}

// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - //
// Purpose:       Clears LCD RAM
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - //
void glcd_clr(int16 location,int16 size)
{
  ////fprintf(DEBUG,"loc=%lu  size=%lu\n\r",location,size);
  // look very simular to the init,... doesn't it. : )
  glcd_WriteCmd2(location,LCDSetPtr);
  glcd_WriteCmd1(1,AutoModeWrite);
  for (;size;size--)
  {
    glcd_WriteByteAuto(0x00);//clear ram
  }
  glcd_WriteCmd1(1,AutoModeReset);
}

/////////////////////////////////////////
// Graphics Controller by mcdoganay (c)2010
//    mcdoganay@gmail.com
//       Not for comercial use
/////////////////////////////////////////

unsigned int8 i;  //General Purpouse variable

// glcd_pixel(x,y,c) sets pixel x,y with c color
void glcd_pixel(unsigned int8 x, unsigned int8 y, int1 c){
   unsigned int8 x_H;
   unsigned int8 x_L=0;
   x_H = (x / 8);//6x8 karaktere göre ayarlandı
   x_L = 7 - (x - 8*x_H);//6x8 karaktere göre ayarlandı
   glcd_gotoxy(x_H,y,0);    //Bug fixed, thanks to etiedon
   if(c){
      glcd_WriteCmd1(1,(LCDBitSet|x_L));
   } else {
      glcd_WriteCmd1(1,(LCDBitReset|x_L));
   }
}

// glcd_pixel8(x,y,px8) sets 8 pixels in line.
void glcd_pixel8(unsigned int8 x, unsigned int8 y, int8 pixel8){
   unsigned int8 x_H;
   x_H = (x / 8); //6x8 karaktere göre ayarlandı
   glcd_gotoxy(x_H,y,0);
   glcd_WriteCmd1(pixel8,0xc0);
}

// glcd_line(x0,y0, x1,y1, c) puts line from (x0, y0) to (x1, y1) with c color
#separate
void glcd_line(int16 x1, int16 y1, int16 x2, int16 y2, int kalilik, int1 color)
{
   
   int16        dy, dx;
   signed int8  addx=1, addy=1;
   signed int16 P, diff;

   int16 i=0;
   int8 j = 0;
   
   dx = abs((signed int16)(x2 - x1));
   dy = abs((signed int16)(y2 - y1));


   if(x1 > x2)
      addx = -1;
   if(y1 > y2)
      addy = -1;

   if(dx >= dy)
   {
      dy *= 2;
      P = dy - dx;
      diff = P - dx;

      for(; i<=dx; ++i)
      {

         glcd_pixel(x1 + j, y1, color);

         if(P < 0)
         {
            P  += dy;
            x1 += addx;
         }
         else
         {
            P  += diff;
            x1 += addx;
            y1 += addy;
         }
      }
   }
   else
   {
      dx *= 2;
      P = dx - dy;
      diff = P - dy;

      for(; i<=dy; ++i)
      {

         glcd_pixel(x1, y1 + j, color);

         if(P < 0)
         {
            P  += dx;
            y1 += addy;
         }
         else
         {
            P  += diff;
            x1 += addx;
            y1 += addy;
         }
      }
   }
   
}


// glcd_square(x0,y0,x1,y1, c) sets square
void glcd_square( unsigned int8 x0, unsigned int8 y0,
                  unsigned int8 x1, unsigned int8 y1 , int1 c){
   glcd_line(x0,y0, x1,y0,1, c);
   glcd_line(x1,y0, x1,y1, 1,c);
   glcd_line(x0,y1, x1,y1, 1,c);
   glcd_line(x0,y0, x0,y1, 1, c);
}

// glcd_box(x0,y0,x1,y1, c)
void glcd_box( unsigned int8 x0, unsigned int8 y0,
               unsigned int8 x1, unsigned int8 y1 , int1 c){
   unsigned int8 x;
   unsigned int8 y;
   for(y=y0; y<=y1;y++){
      for(x=x0; x<=x1;x++){
         if((!(x%8)) && ((x1-x)>8)){
            glcd_pixel8(x,y,0xFF*c);  //Same time to write 8 pixel
            x +=7 ;
         } else {
            glcd_pixel(x,y,c);
         }
      }
   }
}

/////////////////////////////////////////////////////////////////////////
// Purpose:       Draw a circle on a graphic LCD
// Inputs:        (x,y) - the center of the circle
//                radius - the radius of the circle
//                fill - YES or NO
//                color - ON or OFF
/////////////////////////////////////////////////////////////////////////

void glcd_circle(int16 x, int16 y, int16 radius, int1 fill, int1 color)

{
   #ifdef LARGE_LCD
   signed int16 a, b, P;
   #else
   signed int8  a, b, P;
   #endif

   a = 0;
   b = radius;
   P = 1 - radius;

   do
   {
      if(fill)
      {
         glcd_line(x-a, y+b, x+a, y+b, 1, color);
         glcd_line(x-a, y-b, x+a, y-b, 1, color);
         glcd_line(x-b, y+a, x+b, y+a, 1, color);
         glcd_line(x-b, y-a, x+b, y-a, 1, color);
      }
      else
      {
         glcd_pixel(a+x, b+y, color);
         glcd_pixel(b+x, a+y, color);
         glcd_pixel(x-a, b+y, color);
         glcd_pixel(x-b, a+y, color);
         glcd_pixel(b+x, y-a, color);
         glcd_pixel(a+x, y-b, color);
         glcd_pixel(x-a, y-b, color);
         glcd_pixel(x-b, y-a, color);
      }

      if(P < 0)
         P += 3 + 2 * a++;
      else
         P += 5 + 2 * (a++ - b--);
    } while(a <= b);
}

//glcd_image8 (*Pic, x, y, size_x, size_y)
void glcd_image8(int8 *pic_px, unsigned int8 x, unsigned int8 y,
                 unsigned int8 size_x, unsigned int8 size_y){
   
   unsigned int16 px_y;
   unsigned int16 px_x;
   unsigned int16 px=0;
   
   for(px_y=y; px_y<(y+size_y); px_y++){
      for(px_x=x; px_x<(x+size_x); px_x+=8) //6x8 karaktere göre ayarlandı
      {
         glcd_pixel8(px_x, px_y, *(!pic_px+px));
         px+=1;
      }
   }
}
void glcd_text57(int16 x, int16 y, char* textptr, int8 size, int1 color)
{
   int8 j, k, l, m;                       // Loop counters
   int8 pixelData[5];                     // Stores character data

   for(; *textptr != '\0'; ++textptr, ++x)// Loop through the passed string
   {
      if(*textptr < 'S') // Checks if the letter is in the first font array
         memcpy(pixelData, FONT[*textptr - ' '], 5);
      else if(*textptr <= '~') // Check if the letter is in the second font array
         memcpy(pixelData, FONT2[*textptr - 'S'], 5);
      else
         memcpy(pixelData, FONT[0], 5);   // Default to space

      // Handles newline and carriage returns
      switch(*textptr)
      {
         case '\n':
            y += 7*size + 1;
            continue;
         case '\r':
            x = 0;
            continue;
      }

      if(x+5*size >= 240)          // Performs character wrapping
      {
         x = 0;                           // Set x at far left position
         y += 7*size + 1;                 // Set y at next position down
      }
      for(j=0; j<5; ++j, x+=size)         // Loop through character byte data
      {
         for(k=0; k < 7; ++k)             // Loop through the vertical pixels
         {
            if(bit_test(pixelData[j], k)) // Check if the pixel should be set
            {
               for(l=0; l < size; ++l)    // These two loops change the
               {                          // character's size
                  for(m=0; m < size; ++m)
                  {
                     glcd_pixel(x+m, y+k*size+l, color); // Draws the pixel
                  }
               }
            }
         }
      }
   }
}

Başlık: Ynt: WG240128B TOSHIBA T6963C 240x128 GLCD ÇALIŞAN PROJE
Gönderen: gokgokhan - 27 Şubat 2015, 16:24:42
while (status != 0x03) {  // is LCD busy?
       LCD.r_bar= 0;
       temp = LCD_Data;
       LCD.r_bar = 1;
       status = temp & 0x03;
    }
burda döngüden çıkması için tempin son iki basamağı 11 olması gerekiyor oda LCD_Data ya eşitlenmiş LCD_Data ise oraya gelince değeri ilk değer atanmadığı için 0 gözküyo doğal olarak çıkmıyo döngüden arkadaşlar çok öenmli bi prjem bilen ardakaşlar yardımcı olursa şimdiden teşekkürler
Başlık: Ynt: WG240128B TOSHIBA T6963C 240x128 GLCD ÇALIŞAN PROJE
Gönderen: RaMu - 27 Şubat 2015, 23:24:15
Kodun o kısmında bir problem yok,
cd ile r bacaklarını ters bağlamışsın, yer değiştir.

mesaj birleştirme:: 27 Şubat 2015, 23:24:54

Ve kodlarınızı kod tag ı içine alın:
https://www.picproje.org/index.php/topic,57135.0.html (https://www.picproje.org/index.php/topic,57135.0.html)
Başlık: Ynt: WG240128B TOSHIBA T6963C 240x128 GLCD ÇALIŞAN PROJE
Gönderen: gokgokhan - 28 Şubat 2015, 03:17:38
Dediğiniz gibi bacakları değiştirdim. Daha önce D portunda hiç değişme yoktu bu sefer d portunda çıkışlar oldu fakat yine o while da takıldı..bende
while (status != 0x03) {  // is LCD busy?
       LCD.r_bar= 0;
       //temp = LCD_Data;
       LCD.r_bar = 1;
       temp = LCD_Data;
       status = temp & 0x03;
    }
temp = LCD_Data; yı bir altı satıra indirdim artık takılmıyor fakat ekrana yine yazı gelmiyor. İlgilendiğiniz için teşekkürler olmadı  128x64 devam etcez napalım  :)
Başlık: Ynt: WG240128B TOSHIBA T6963C 240x128 GLCD ÇALIŞAN PROJE
Gönderen: kartal0689 - 04 Mart 2015, 10:36:28
Arkadaşlar,

Büyük karakterlerle yazı yazıyorum. Fakat, Normal LCD kullandığımızda bir yazının üzerine aynı x,y koordinatlarında yazı yazdığımızda üzerine silip yazar.
Fakat burada o yazılan karakterler kalıyor ve üzerine yazıyor. Ekranda salak saçma şeyler oluşuyor. Bunun önüne nasıl geçebilirim.(Winstar T6963C 240x128)
Başlık: Ynt: WG240128B TOSHIBA T6963C 240x128 GLCD ÇALIŞAN PROJE
Gönderen: Murat Mert - 04 Mart 2015, 14:48:06
S.A.
İlk yazdığın değişkeni negatif görüntüsü ile tersle ve yeni veriyi yekrar yazdır. Bende 64*128 bu problemi yaşadım böyle çözdümdeğişken ekranda anlık yanıp sönerek değer değiştiriyor. Pic programlamada daha önce proton kullanıyordum onda olmuyordu ccs c de böyle olunca ilk zamanlar şaşırmıştım. :)
Başlık: Ynt: WG240128B TOSHIBA T6963C 240x128 GLCD ÇALIŞAN PROJE
Gönderen: kartal0689 - 04 Mart 2015, 17:11:11
Rica etsem örnek kod verebilir misin?
Başlık: Ynt: WG240128B TOSHIBA T6963C 240x128 GLCD ÇALIŞAN PROJE
Gönderen: kartal0689 - 24 Mart 2015, 12:02:00
Sayın Murat Mert,

konuyla ilgili mümkünse bir örnek kod paylaşabilir misiniz? Çok acil yardıma ihtiyacım var.
Teşekkür ederim
Başlık: Ynt: WG240128B TOSHIBA T6963C 240x128 GLCD ÇALIŞAN PROJE
Gönderen: Murat Mert - 25 Mart 2015, 12:26:28
S.A.
akşam evdeki bilgisayarıma bakıp yazayım.

mesaj birleştirme:: 25 Mart 2015, 14:08:35

S.A.
Sn. kartal0689
can_glcd2 yi indirip denemeyi yazdım yazdım. kolay gelsin.



#include <18F452.h>
#Device PASS_STRINGS=IN_RAM
#use delay(clock=20000000)

#include <T6963C.c>


#fuses HS, BROWNOUT, BORV27, PUT, STVREN, NOLVP

int say=0;
char yaz[10];


void main()
{

   setup_psp(PSP_DISABLED);
   setup_wdt(WDT_OFF);
   setup_adc_ports(NO_ANALOGS); // An0-An1-An3 Portları Analog giriş için ayarlanıyor
   
   port_b_pullups (TRUE);
     

   glcd_init(240,128); // Grafik LCD ektran hazırlanıyor
   glcd_WriteByte(1, (LCDModeSet|LCDMode_XOR)); // Grafik LCD ekran XOR moda göre ayarlanıyor
   glcd_WriteByte(1, (LCDDispMode|LCDDisp_TXT|LCDDisp_GRH)); // Grafik LCD ekran hem metin hem grafik modunda çalışacak şekilde ayarlanıyor
   
   
   while(1)
   {

sprintf(yaz,"%d",say);
glcd_text57(20,20,yaz,3,0);

   say++;
   
sprintf(yaz,"%d",say);
glcd_text57(20,20,yaz,3,1);

   delay_ms(500);
 
   }