Grafik Lcd 320x240 Uygulama 1

Başlatan ahmet2004, 19 Ağustos 2008, 16:23:22

ahmet2004

tek olarak touch fiyatı 29ytl

Glcd de 120$

OptimusPrime

ahmet2004
üzerinde ( built-in ) dokunmatik kontrol bulunan bir GLCD biliyormusnuz? böyle bir şeyi yurt dışındaki malzemecimize sorduk adam bize hangi dil diye sordu? bilemediğimiz birşey mi var GLCD dilleri hakkında anlamadım ne demek istediğini. işin aslı basit bir menü oluşturup buton yerine dokunmatik ekran kullanarak bir takım yükü anahtarlamak istiyoruz. GLCD, menü ve dokunmatik ekran konusunda bir öneriniz olabilir mi?
https://donanimveyazilim.wordpress.com || Cihân-ârâ cihân içredir ârâyı bilmezler, O mâhîler ki deryâ içredir deryâyı bilmezler ||

Analyzer

Selam,

1-2 hafta önce 240x128 SAP1024 kontrolcüsü ile kontrol edilen ekranın kodlarını vermiştim. Nispeten daha ucuz (Touch panel dahil) $50+kdv civarında fiyatı. Programlaması da T6963'den çok farklı değil. 320x240 çözünürlüğe ihtiyacınız yoksa değerlendirebilirsiniz.
https://www.picproje.org/index.php/topic,19244&highlight=
Analyzer
Üşeniyorum, öyleyse yarın!

ahmet2004

*OptimusPrime*

Belki microchip'in (1.8" - 4") kullandığı TFT ler için sormuş olabilirler.

4" üzeri fiyatlar birden uçuk kaçık oluyor.

TFT ve Touch fiyatları  hala çok pahalı.

Normal Touch'lu mono ekranlar işini görürmü?

OptimusPrime

şöyle bişey düşünüyorum. mesela glcd üzerinde klima fan gibi simgeler olacak üzerine bastığınızda ilgli kontak açılacak gibi. renkli olması daha hoş olur sanırım. şimdilik araştırmadayım. ürünleri tam olarak bilmediğim gibi nasıl sürerim konusuda benim için hala bir soru işareti. :(
https://donanimveyazilim.wordpress.com || Cihân-ârâ cihân içredir ârâyı bilmezler, O mâhîler ki deryâ içredir deryâyı bilmezler ||

ahmet2004

Nasıl bir ekran boyutu düşünüyorsun ona göre konuşalım?

OptimusPrime

plastik ön panel olarak düşündüğüm bölgede 120*90mm boyutlarında bir boşluğum var. eskiden burada butonlar ve 2x16 karakter bir lcd vardı yerine glcd ve butonlar içinse dokunmatik ekran düşünüyorum. nasıl bişey olabilir?
https://donanimveyazilim.wordpress.com || Cihân-ârâ cihân içredir ârâyı bilmezler, O mâhîler ki deryâ içredir deryâyı bilmezler ||

ahmet2004

En  az 5"  Tft ve Arm7 kullanarak yapabilirsin.Özellikle Tft Lcd çıkışı olan

bir ARM7 kullanabilirsin.En uygun çözüm böyle gözüküyor.

Philips'in arm7 LH75401 vb.. leri Lcd sürücü çıkışlarına sahip.PHY sürücüleri

ile internetten bile kontrol ettirebilirsin cihazını.

Tabii şu yapılarıda inceleyebilirsin.

Freescale i.MX31 SOM-LV
Freescale MCF5329 Fire Engine
Freescale MCF5485 Fire Engine
Marvell PXA270 Card Engine
NXP LH7A400 Card Engine
NXP LH7A404 Card Engine
NXP LH79520 Card Engine
NXP LH79524 Card Engine
Renesas SH7727 Card Engine
Renesas SH7760 Card Engine

Eğer bu tür bir proje yaparsan yardımcı olmaya çalışırım teknik olarak.

OptimusPrime

biraz incelememe müsade edin.
https://donanimveyazilim.wordpress.com || Cihân-ârâ cihân içredir ârâyı bilmezler, O mâhîler ki deryâ içredir deryâyı bilmezler ||

ilker_32

Burayı inceleyebilirsiniz.

Alıntı Yaphi,

I lost days trying to figure out where CCS's drivers were wrong and I finally gave up. In two hours I coded perfectly (I guess) a working driver for it:

-It only works for 320x240 LCD, parameters such as FX, char width, etc are frozen.
- You can change any pin (DB0-DB7, A0, CS, RST, etc).
- Compatible with CCS graphic.c
- It's for 8080 mode.

Driver :

#define GLCD_RST PIN_A5 
#define GLCD_RD PIN_A1 
#define GLCD_WR PIN_A0 
#define GLCD_CS PIN_A2 
#define GLCD_A0 PIN_A3 

#DEFINE GLCD_DB0 PIN_B5 
#DEFINE GLCD_DB1 PIN_B4 
#DEFINE GLCD_DB2 PIN_B3 
#DEFINE GLCD_DB3 PIN_B2 
#DEFINE GLCD_DB4 PIN_B1 
#DEFINE GLCD_DB5 PIN_B0 
#DEFINE GLCD_DB6 PIN_C4 
#DEFINE GLCD_DB7 PIN_C3 

#define GLCD_WIDTH         320 
#define GLCD_HEIGHT        240 
#define GLCD_CHAR_WIDTH    8 
#define GLCD_CHAR_HEIGHT   8 

#define ON                 1 
#define OFF                0 
#define COMMAND_MODE   output_high(GLCD_A0); 
#define DATA_MODE       output_low(GLCD_A0); 

#DEFINE RA8835_GRAPHICSTART 0x2580 

void GlcdPutData(INT8 data); 
int8 TakeData(void); 
void GLCD_WriteCommand(int8 commandToWrite); 
void GLCD_WriteData(int8 dataToWrite); 
int8 GLCD_ReadData(void); 
void setCursorAddress(int16 addr); 
void GlcdGotoTextXY(int16 x, int16 y); 
void GlcdPutC(char c); 
void FillText(char cara); 
void FillGraphic(int1 parameter); 
void glcd_RAinit(void); 
int8 GLCD_ReadStatus(void); 

void GlcdPutData(int8 data) 
   { 
   output_bit(GLCD_DB0, bit_test(data,0));      
   output_bit(GLCD_DB1, bit_test(data,1));                    
   output_bit(GLCD_DB2, bit_test(data,2));                    
   output_bit(GLCD_DB3, bit_test(data,3)); 
   output_bit(GLCD_DB4, bit_test(data,4)); 
   output_bit(GLCD_DB5, bit_test(data,5));                    
   output_bit(GLCD_DB6, bit_test(data,6));                  
   output_bit(GLCD_DB7, bit_test(data,7)); 
   } 
    

    
int8 TakeData(VOID) 
   { 
   INT8 data = 0; 
   data += input (GLCD_DB0); 
   data += input (GLCD_DB1) * 2; 
   data += input (GLCD_DB2) * 4; 
   data += input (GLCD_DB3) * 8; 
   data += input (GLCD_DB4) * 16; 
   data += input (GLCD_DB5) * 32; 
   data += input (GLCD_DB6) * 64; 
   data += input (GLCD_DB7) * 128; 
   RETURN data; 
   } 

void GLCD_WriteCommand(int8 commandToWrite) 
{ 
GlcdPutData(commandToWrite); 

COMMAND_MODE 

output_low(GLCD_WR); 
output_low(GLCD_CS); 

delay_cycles(1); 

output_high(GLCD_WR); 
output_high(GLCD_CS); 
} 

void GLCD_WriteData(int8 dataToWrite) 
{ 
GlcdPutData(dataToWrite); 

DATA_MODE 

output_low(GLCD_WR); 
output_low(GLCD_CS); 

delay_cycles(1); 

output_high(GLCD_WR); 
output_high(GLCD_CS); 
} 

int8 GLCD_ReadData(void) 
{ 
int8 tmp; 

output_low(GLCD_RD); 
output_low(GLCD_CS); 
delay_cycles(4); 
tmp = TakeData(); 
output_high(GLCD_RD); 
output_high(GLCD_CS); 

return tmp; 
} 

void glcd_RAinit(void) 
{ 
  
   output_high(GLCD_RST); 
   output_high(GLCD_CS); 
   output_high(GLCD_RD); 
   output_high(GLCD_WR); 
    
   //system set 
   GLCD_WriteCommand(0x40); 
   GLCD_WriteData(0x30); 
   GLCD_WriteData(0x87); 
   GLCD_WriteData(0x07); 
   GLCD_WriteData(0x27); 
   GLCD_WriteData(0x2F); 
   GLCD_WriteData(0xEF); 
   GLCD_WriteData(0x28); 
   GLCD_WriteData(0x00); 
    
   //scroll 
   GLCD_WriteCommand(0x44); 
   GLCD_WriteData(0x00); 
   GLCD_WriteData(0x00); 
   GLCD_WriteData(0xF0); 
   GLCD_WriteData(0x80); 
   GLCD_WriteData(0x25); 
   GLCD_WriteData(0xF0); 
   GLCD_WriteData(0x00); 
   GLCD_WriteData(0x4B); 
   GLCD_WriteData(0x00); 
   GLCD_WriteData(0x00); 
   //HDOT SCR 
    
   GLCD_WriteCommand(0x5A); 
   GLCD_WriteData(0x00); 
    
   //OVLAY 
   GLCD_WriteCommand(0x5B); 
   GLCD_WriteData(0x01); 
    
   //erase all screen 
   FillGraphic(OFF); 
   FillText(' '); 
    
   //DISP ON 
   GLCD_WriteCommand(0x58); 
   GLCD_WriteData(0x56); 
    
   //CSRFORM 
   GLCD_WriteCommand(0x5D); 
   GLCD_WriteData(0x04);    
   GLCD_WriteData(0x86); 
    
   //DISP ON 
   GLCD_WriteCommand(0x59); 
    
   //CSDIR 
   GLCD_WriteCommand(0x4C); 
    
   //CSRW 
   setCursorAddress(0x0000); 
} 


void FillGraphic(int1 parameter) 
   { 
   long count; 
   //set cursor to 2580h 
   setCursorAddress(0x2580); 
   //put 00h in all graphic space 
   count = 9600; 
   GLCD_WriteCommand(0x42); 
   while(count != 0) 
      { 
       GLCD_WriteData(0xFF * parameter); 
      count--; 
      } 
   } 
    
void FillText(char cara) 
   { 
   long count; 
   //set cursor to 0000h 
   setCursorAddress(0x0000); 
   //put 00h in all text space 
   count = 1200; 
   GLCD_WriteCommand(0x42); 
   while(count != 0) 
      { 
       GLCD_WriteData(cara); 
      count--; 
      } 
   } 
    
void GlcdPutC(char c) 
   { 
   GLCD_WriteCommand(0x42); 
   GLCD_WriteData(c); 
   } 
    
//x and y : 1 to max    
void GlcdGotoTextXY(int16 x, int16 y) 
   { 
   int16 adress = 0; 
   adress = (y-1)*40; 
   adress = adress+ x-1; 
   setCursorAddress(adress); 
   } 
    
void setCursorAddress(int16 addr) 
{ 
   int8 adress; 
   GLCD_WriteCommand(0x46); 
   adress = addr & 0xFF; 
   GLCD_WriteData(adress); 
   adress = addr >> 8; 
   GLCD_WriteData(adress); 
} 

void GLCD_Pixel(int16 x,int16 y, int1 color) 
{ 
int8 tmp = 0; 
int16 address = 0; 

address = RA8835_GRAPHICSTART + (40 * y) + (x/8); 
setCursorAddress(address); 

GLCD_WriteCommand(0x43); 
tmp = GLCD_ReadData(); 

if(color == ON) 
  tmp |= (1 << (7 - (x % 8))); 
else 
  tmp &= ~(1 << (7 - (x % 8))); 

setCursorAddress(address); 
GLCD_WriteCommand(0x42); 
GLCD_WriteData(tmp); 
} 

void GLCD_GraphicGoTo(int16 x,int16 y) 
{ 
setCursorAddress(RA8835_GRAPHICSTART + (y * 40) + x/8); 
} 

int8 GLCD_ReadStatus(void) 
{ 
int8 tmp; 

output_low(GLCD_RD); 
output_low(GLCD_CS); 
output_low(GLCD_A0); 
delay_cycles(1); 
tmp = takedata(); 
output_high(GLCD_RD); 
output_high(GLCD_CS); 
output_high(GLCD_A0); 

return tmp; 
}


#include <16F876A.H> 
#fuses HS, NOWDT, NOPROTECT 
#use delay(clock = 20000000) 

#define LARGE_LCD 1 
#include <RA8835V2.c> 
#include <graphics.c> 

void main(void) 
   { 
    
   glcd_RAinit(); 
   printf(GlcdPutC,"test lol"); 
   GlcdGotoTextXY(20,25); 
   printf(GlcdPutC,"OMG I'M MOVING"); 
   glcd_circle(100,100,70,1,1); 
   glcd_circle(250,180,30,1,1); 
   glcd_rect(200,1,300,80,1,1); 
    
   glcd_line(10,239,110,200,1); 
   glcd_line(100,239,10,200,1); 
   glcd_line(40,220,80,220,1); 
   glcd_line(58,230,58,209,1); 
   }

OptimusPrime

megasandan 240x128 bir mono glcd temin ettim. neyle süreceğim hakkında şuan pek düşünmüş değilim. hatta bir ara esd den bir çat sesi duydum heralde artık kullnılmaz hale gelmiştir ama aklımda başka bir soru var. şöyleki; lcd ye bazı iconlar çizmek ve kullanıcının bu iconlara dokunarak birşeyler yapacağı bir uygulama düşünüyorum fakat nerden baksanız onlarca ikon var şuan aklımda ve hepsini programa tanıtmak ciddi bir zaman alacağa benziyor. peki bunu kısa yoldan nasıl yapabilirim. derleyicilerin resim formatını doğrudan glcd ye atma gibi bir hünerleri var mı acaba? veya neler tavsiye edersiniz.?
https://donanimveyazilim.wordpress.com || Cihân-ârâ cihân içredir ârâyı bilmezler, O mâhîler ki deryâ içredir deryâyı bilmezler ||

Logan

İkonları bmp olarak kaydederek aşağıda linkini verdiğim program vasıtasıyla datalarını çıkarın. Daha sonra çıkarmış olduğunuz dataları harici bir eprom belleğe gömün. Eprom yazma işlemi için yine küçük bir program yazın ve vermiş olduğunuz adresten itibaren dataları sırasıyla eproma yazsın. Hangi ikonun hangi adresten başladığını "#define" şeklinde program içerisinde tanıtın. Ekrandan göstermek istediğiniz zaman, ilgili ikonun adresini alarak epromdan bloklar halinde okur ve grafik lcd'ye basarsınız. Bu yöntem ile 320x240 grafik lcd içerisinde onlarca farklı resmi tarama hızı farkedilmeden gösterebildim. Hatta küçük küçük animasyonlar dahi hazırlamıştım. 18f452 ile 40 mhz'de çalışarak sorunsuz bir şekilde halledebilirsiniz. İyi günler, iyi çalışmalar.

http://rapidshare.com/files/2635098/GLCDtool.rar
İmza.

OptimusPrime

https://donanimveyazilim.wordpress.com || Cihân-ârâ cihân içredir ârâyı bilmezler, O mâhîler ki deryâ içredir deryâyı bilmezler ||

OptimusPrime

elimde WG240128B kodlu bir GLCD var. biraz vakit ayırmak istiyorum zaten kullanacağım mikroya göre library de bulamadım ama datasheet ini incelerken bir noktaya takıldım. Vee ( negative voltage ) bu düşündüğüm şey değil dimi :) eğer öyleyse ben datasında bu değerin ne olması gerektiğini bulamıyorum. nedir bu?
https://donanimveyazilim.wordpress.com || Cihân-ârâ cihân içredir ârâyı bilmezler, O mâhîler ki deryâ içredir deryâyı bilmezler ||