WG240128 GLCD Satır sütun ayarlama?

Başlatan crypto, 27 Ekim 2006, 13:45:09

crypto

Başlıktan da anlayacağınız gibi; glcd de istediğim satır ve sütuna (X-Y) ulaşamıyorum bir türlü.

Hem grafik, hem text ve hem de cursor pozisyonunu nasıl ayarlayacağım hakkında bilgi arıyorum. ISIS te mevcut glcdleri kullanmada problem çıkmıyor. Ancak kullandığım glcd ISIS te olmadığından simülasyonunu da yapamıyorum.
Konu hakkında bilgisi olan arkadaşların acil yardımını bekliyorum.

Belki datasheetini okumamı önereceksiniz, ama defalarca okudum ve bir türlü işin içinden çıkamadım.

EES

ISIS'te  LM4229=240x128 GLCD.
Winstar'ın WG240x128 ile proje yapıyorum ve simulasyonda da sorun yok.
GLCD header file gönderebilirm. Ama C.

crypto

İlgine teşekkür ederim. Ben de LM4229 la sim. yapıyorum. Ancak kullandığım lcd de aynı sonucu alamıyorum.
C yi pek bilmiyorum. Mümkünse eğer; lcd ye gönderdiğiniz kodları, satır sütun ayarlamalarını metin şeklinde yazarsanız ( örneğin, ikinci satır, beşinci sütun değerleri ve komut değeri gibi) bana çok yardımcı olursunuz.

YARGICH

Bende bi ara LCD de konumlama ile ilgili sorun yaşadım. Belki alakasız gelecek size ama gözle görülmeyecek şekilde soketin içinde kısa devre olduğunu fark ettim. Kısa devrede Data pinlerinden 5.si ile 4.sü kısa devre olmuş. Buda adresleme 16 ya geldiğinde otomatikmen 48 e atlıyodu. Similasyonda sorun yok dediğin için bu deneyimi seninle paylaşmak istedim.

Konuyu dağıtmak istemiyorum ama Winstar 240x128 LCD yi kaça ve kimden temin ediyorsunuz ? Ayrıca aldığınız yerde Mavi olanlarından var mı? Beni bu konularda bilgilendirirseniz sevinirim.


Kolay Gelsin, İyi Çalışmalar.
Uçurtmalar, rüzgarın kuvvetiyle değil, rüzgara karşı koydukları direnç ile yükselirler.

crypto

@YARGICH

Data hatlarında bir sorun yok. İstediğim karakteri yazdırabiliyorum. Ancak istediğim noktaya yazdıramıyorum.

LCD yi ÖZDİSAN' dan almıştım.

Led ışıklı ve mavi.

EES

www.özdisan.com
ww.astraelektronik.com


240x128 fiyatı ~130ytl

EES

void setpixGLCD(unsigned int row,unsigned int col)
{
  	adr6963(t6963_gr0+(row*t6963_col)+(col/8));
  	cmd6963(0xf8|((7-col%8)));
}
void clrpixGLCD(unsigned int row, unsigned int col)
{
  	adr6963(t6963_gr0+(row*t6963_col)+(col/8));
  	cmd6963(0xf0|((7-col%8)));
}

crypto

Alıntı yapılan: "EES"
void setpixGLCD(unsigned int row,unsigned int col)
{
  	adr6963(t6963_gr0+(row*t6963_col)+(col/8));
  	cmd6963(0xf8|((7-col%8)));
}
void clrpixGLCD(unsigned int row, unsigned int col)
{
  	adr6963(t6963_gr0+(row*t6963_col)+(col/8));
  	cmd6963(0xf0|((7-col%8)));
}

Bu kodları biri tercüme ederse memnun olurum.

OG

crypto,

PBP ile istediğine göre proton+ sana yabancı gelmez sanıyorum. ISIS içinde ( C:\Program Files\Labcenter Electronics\Proteus 6 Professional\SAMPLES\Proton Plus ) PICBASIC.DSN dosyası var. Güzel bir örnek. Noktayı yıldız gibi kaydırarak konumlandırmış. Kodları çok basit. Xpos, Ypos , Plot ve  UnPlot işi bitiriyor

' Display text and graphics on a graphic LCD

		Include "PROTON_G4.INT" 
        
' Set up some Variables
        
        Dim Xpos		as	Byte
        Dim	Ypos		as	Byte

        Cls
        Print at 0 , 2 , "Graphic LCD Test"
        
Again:        
        For Xpos = 0 to 63
        	Ypos = SIN Xpos
        	Plot Xpos , Ypos
        	Delayms 10
        Next
        For Xpos = 0 to 63
        	Ypos = SIN Xpos
        	UnPlot Xpos , Ypos
        	Delayms 10
        Next                
		Goto Again
        
		Include "FONT.INC"
FORUMU İLGİLENDİREN KONULARA ÖM İLE CEVAP VERİLMEZ.

crypto

@EES

Kodlarda kullandığın değişkenlerin ne olduğunu da yazarsan sevinirim. Çözemedim bir türlü.

EES

//	Graphic LCD (Tt6963C) Library

#define t6963_DATP 		24
#define t6963_DATA 	(0xff<<t6963_DATP)
#define t6963_CE   	bit(23)
#define t6963_WR   	bit(22)
#define t6963_RD   	bit(21)
#define t6963_CD		bit(20)
#define t6963_RST		bit(19)
#define t6963_gr0		0     //Graphic Page 0
#define t6963_gr1 	3840  //Graphic Page 1
#define t6963_txt 	7680  //Text Page
#define t6963_col		30    //Maximum Column
#define t6963_row		16    //Maximum Row

void wr6963(unsigned char data)
{
unsigned b0=VICIntEnable;
	VICIntEnable=0;IODIR1|=t6963_DATA;
	IOSET1=((unsigned long)data<<t6963_DATP); 
 	IOCLR1=t6963_WR;IOCLR1=t6963_CE;IOSET1=t6963_CE;IOSET1=t6963_WR;
	IOCLR1=((unsigned long)data<<t6963_DATP); 
	VICIntEnable=b0;
}
unsigned char rd6963()
{
unsigned char c0;
unsigned b0=VICIntEnable;
	VICIntEnable=0;IODIR1=~t6963_DATA;
   IOCLR1=t6963_CD;IOCLR1=t6963_RD;IOCLR1=t6963_CE;
	c0=(IOPIN1&t6963_DATA)>>24;
	IOSET1=t6963_CE;IOSET1=t6963_RD;IOSET1=t6963_CD;
   VICIntEnable=b0;return(c0);
}   
void chk6963(unsigned char chk)
{
unsigned b0=VICIntEnable;
	VICIntEnable=0;IODIR1=~t6963_DATA; 
   IOSET1=t6963_CD;IOCLR1=t6963_RD;IOCLR1=t6963_CE;
	while(((IOPIN1&0xff000000)>>24&chk)!=chk);
   IOSET1=t6963_CE;IOSET1=t6963_RD;
   VICIntEnable=b0;
}
void cmd6963(unsigned char cmd)
{
   chk6963(3);IOSET1=t6963_CD;wr6963(cmd);
}
void dat6963(unsigned char dat)
{
   chk6963(3);IOCLR1=t6963_CD;wr6963(dat);
}
void adr6963(unsigned int adr)
{
	dat6963(adr%256);dat6963(adr>>8);cmd6963(0x24);
}
void init6963()
{
   IOCLR1=t6963_RST;IOSET1=t6963_CD;IOSET1=t6963_CE;IOSET1=t6963_RD;IOSET1=t6963_WR;IOSET1=t6963_RST;
	cmd6963(0x81);
	adr6963(t6963_gr0);cmd6963(0x42);
   adr6963(t6963_col);cmd6963(0x43);
	adr6963(0x1e00);cmd6963(0x40);
   adr6963(t6963_col);cmd6963(0x41);
   cmd6963(0x98);
}


void setpixGLCD(unsigned int row,unsigned int col)
{
  	adr6963(t6963_gr0+(row*t6963_col)+(col/8));
  	cmd6963(0xf8|((7-col%8)));
}
void clrpixGLCD(unsigned int row, unsigned int col)
{
  	adr6963(t6963_gr0+(row*t6963_col)+(col/8));
  	cmd6963(0xf0|((7-col%8)));
}

crypto

Sorunumu hala çözebilmiş değilim. Aşağıdaki kodlar isiste text bölümü normal çalışıyor. Grafik kısmında kısmen hatalar var ve gideremedim. ISIS te kullandığım GLCD LM4229 ve PIC 16F877.

Bu kodlarla kurmuş olduğum devrede yaptığım denemede ise şu sonuç çıktı: Text Address Point kodlarda gördüğünüz gibi. Simülasyonda normal yazıyor, ancak asıl devrede her karakteri 16 satırın tamamına aynı anda yazıyor. Dolayısıyla bir sonraki satıra da geçiş olmuyor. Grafik çizimi daha da karmaşık görünüyor.

Artık bilen ustalardan biri çıkıp şu derdime bir deva olsa çok ama çok hayır duamı alacaktır.

ISIS Dosyası burada

Herkese saygı ve selamlar.

trisa=%111111
trisb=%11111111
trisc=%00000000
trisd=%00000000
;trise=%111
define osc 20
cd var portd.3      ;komut yazma cd=H, data yazma cd=L
rd var portd.1      ;data okumak için L olacak. Normalde H olacak
wr var portd.0      ;L ye düşüşte komut yada data yazar
ce var portd.2      ;chip enable. L
lcdrst var portd.4  ;lcd reset biti açık pozsyon=H
md2 var portd.5     ;colon (karakter) adet belirleyici. H=32 kolon, L=40 kolon
fs1 var portd.6     ;font selector. fs1=H 6X8, fs1=L 8X8 font
led var portd.7
dummyw1 var word
dummyw2 var word
dummyw var word
dummyb1 var byte
dummyb2 var byte
dummyb3 var byte
lcdcmd var byte
lcddata var byte
lbyte var byte
hbyte var byte
row var byte
col var byte
max_row var byte
max_col var byte
char var byte
text_col var word
pozisyon var word
text_pg var word  ;7680 hex=1E00
graphic_pg0 var word    ;0
graphic_pg1 var word    ;3840 hex=F00
;************************
;**komut değişkenleri****
setc_poz var byte       ;cursor pozisyon komutu ($21)
seto_reg var byte       ;set offset register komutu ($22)
setadr_point var byte   ;set address pointer ($24)
sett_home var byte      ;set text home address ($40)
sett_area var byte      ;set text area ($41)
setg_home var byte      ;set grephic home address ($42)
setg_area var byte      ;set graphic area ($43)
set_auwrite var byte    ;data otomatik yazma ($B0)
set_auread var byte     ;data otomatik okuma ($B1)
aoreset var byte        ;otomatik reset ($B2)
dwrite_inc var byte     ;data yazma ve adresi 1 arttırma ($C0)
dread_inc var byte      ;data okuma ve adresi 1 arttırma ($C1)
dwrite_dec var byte     ;data yazma ve adresi 1 eksiltme ($C2)
dread_dec var byte      ;data okuma ve adresi 1 eksiltme ($C3)
dwrite_none var byte    ;data yazma, adres değişmez ($C4)
dread_none var byte     ;data okuma, adres değişmez ($C5)
scr_peek var byte       ;screen peek ($E0)
scr_copy var byte       ;ekran kopyalama ($E8)
;************************
;************************
;mode set değişkenleri
mode_set var byte       ;lcd mode byte ı. ($80 or mode) (text attribute ve text-graphic seçim byte ıyla birlikte değer atanacak)
exor_mode var byte      ;lcd exor mode (+ mode_set)
and_mode var byte       ;lcd and mode (+ mode_set)
textatt_mode var mode_set.2   ;text attribute mode (1=attribute mode)
intexcg_mode var mode_set.3  ;internal-external cg rom-ram mode (dahili=0, harici=1 karakter tablosu seçimi)
;************************
;************************
;diplay mod değişkenleri
dsp_mode var byte           ;display mode (off=$90)
cursor_on var dsp_mode.1    ;cursor on=1
blink_on var dsp_mode.0     ;blink on=1
text_on var dsp_mode.2      ;text on=1
graphic_on var dsp_mode.3   ;graphic on=1
;************************
cur_line var byte      ;cursor 1 satır ($A0) (+ 7 ye kadar)
;************************
;**komut değişkenleri****
setc_poz = $21       ;cursor pozisyon komutu ($21)
seto_reg = $22      ;set offset register komutu ($22)
setadr_point = $24   ;set address pointer ($24)
sett_home = $40      ;set text home address ($40)
sett_area = $41      ;set text area ($41)
setg_home = $42      ;set grephic home address ($42)
setg_area = $43      ;set graphic area ($43)
set_auwrite = $B0    ;data otomatik yazma ($B0)
set_auread = $B1     ;data otomatik okuma ($B1)
aoreset = $B2        ;otomatik reset ($B2)
dwrite_inc = $C0     ;data yazma ve adresi 1 arttırma ($C0)
dread_inc =$C1       ;data okuma ve adresi 1 arttırma ($C1)
dwrite_dec = $C2     ;data yazma ve adresi 1 eksiltme ($C2)
dread_dec = $C3      ;data okuma ve adresi 1 eksiltme ($C3)
dwrite_none = $C4    ;data yazma, adres değişmez ($C4)
dread_none = $C5     ;data okuma, adres değişmez ($C5)
scr_peek = $E0      ;screen peek ($E0)
scr_copy = $E8       ;ekran kopyalama ($E8)
;************************
;************************
;mode set değişkenleri
mode_set = $80       ;lcd mode byte ı. ($80 or mode) (text attribute ve text-graphic seçim byte ıyla birlikte değer atanacak)
exor_mode =  $1      ;lcd exor mode (+ mode_set)
and_mode = $3       ;lcd and mode (+ mode_set)
textatt_mode = 0   ;text attribute mode (1=attribute mode)
intexcg_mode =0  ;internal-external cg rom-ram mode (dahili=0, harici=1 karakter tablosu seçimi)
;************************
;diplay mod değişkenleri
dsp_mode = $90           ;display mode (off=$90)
cursor_on = 1    ;cursor on=1
blink_on = 1     ;blink on=1
text_on = 1      ;text on=1
graphic_on =1   ;graphic on=1
;************************
cur_line = $A0      ;cursor 1 satır ($A0) (+ 7 ye kadar)
cursor_on=1
blink_on=1
text_on=1
graphic_on=0
max_row=16
max_col=30
text_pg =7680  ;7680 hex=1E00
graphic_pg0 =0    ;0
graphic_pg1 =3840    ;3840 hex=F00
portc=0
adcon1=6
lcdrst=0
led=1
    gosub lcd_init
;-----set text home address---
    lbyte=0
    hbyte=0
    lcdcmd=sett_home
    gosub send_2data
;-----set graphic home address---
    lbyte=0
    hbyte=$40
    lcdcmd=setg_home
    gosub send_2data
;-----set text area----- 
    lbyte=$1E
    hbyte=0
    lcdcmd=$41
    gosub send_2data
;-----set graphic area---
    lbyte=$1E
    hbyte=0
    lcdcmd=$43
    gosub send_2data
;------set display mode
    lcdcmd=$80  ;or mode, internal CG ROM on
    gosub send_cmd
;-----graphic on text on 
    lcdcmd=$9C
    gosub send_cmd
;---------------------------
start:
    gosub showchar  ;karakter tablosu yaz
    gosub lcd_grf   ;grafik çiz
    lcdcmd=$9C  ;graphic on, text on
    gosub send_cmd
    pause 5000
    gosub lcd_clr   ;glcd sil
    goto start
;*******************
;lcd silme rutini
;*******************
lcd_grf:
    lbyte=$F
    hbyte=0
    lcdcmd=$43  ;set graphic area 
    gosub send_2data
    lcdcmd=$98  ;set graphic mode
    gosub send_cmd
    pozisyon=$4000  ;graphic home address
    lbyte=pozisyon.byte0
    hbyte=pozisyon.byte1
    lcdcmd=$24  ;set address point
    gosub send_2data
    lcdcmd=$B0  ;auto write on
    gosub send_cmd
    char=%10101110
    for dummyb1=1 to 128
        for dummyb2=1 to 15
            hbyte=char
            gosub awrite    ;auto write
            pause 1
        next dummyb2
        lcdcmd=$B2  ;auto write off
        gosub send_cmd 
        pozisyon=pozisyon + 30  ;sonraki satır adresi hesaplama
        lbyte=pozisyon.byte0
        hbyte=pozisyon.byte1
        lcdcmd=$24  ;set address poind
        gosub send_2data
        lcdcmd=$B0  ;auto write on
        gosub send_cmd        
    next dummyb1
    lcdcmd=$B2  ;auto write off
    gosub send_cmd            
    led=1
    pause 1000
    led=0
    RETURN
;************************
;***karakter yazma rutini
;************************    
showchar:
    lcdcmd=$80   ;or mode, internal cg rom
    gosub send_cmd
    lcdcmd=$94   ;text on, graphic off
    gosub send_cmd
    pozisyon=15
    hbyte=pozisyon.byte1
    lbyte=pozisyon.byte0
    lcdcmd=$24  ;set adres point
    gosub send_2data
    lcdcmd=$B0  ;auto write on
    gosub send_cmd
    for dummyb1=1 to 2
        char=1
        for dummyb2=1 to 8
            for dummyb3=1 to 15
                hbyte=char
                gosub awrite    ;auto write
                led=1
                pause 20
                led=0
                pause 20
                char=char+1
            next dummyb3
            lcdcmd=$B2  ;auto write off
            gosub send_cmd 
            pozisyon=pozisyon + 30  ;bir alt satıra geçiş için adrese 30 ekleme
            hbyte=pozisyon.byte1
            lbyte=pozisyon.byte0
            lcdcmd=$24  ;set adres point
            gosub send_2data
            lcdcmd=$B0  ;auto write on
            gosub send_cmd
        next dummyb2
    next dummyb1
    lcdcmd=$B2  ;auto write off
    gosub send_cmd            
    return
;*************************
;***glcd silme    
;*************************
lcd_clr:    ;lcd clear
    lbyte=$1E
    hbyte=0
    lcdcmd=$43  ;graphic address area
    gosub send_2data
    lcdcmd=$9C  ;graphic on, text on
    gosub send_cmd
    pozisyon=$4000
    lbyte=pozisyon.byte0
    hbyte=pozisyon.byte1
    lcdcmd=$24  ;set address point
    gosub send_2data
    lcdcmd=$B0  ;auto write on
    gosub send_cmd
    char=0
    for dummyb1=1 to 128
        for dummyb2=1 to 30
             hbyte=char
            gosub awrite    ;auto write
            pause 5
        next dummyb2
    next dummyb1
    lcdcmd=$B2  ;auto write off
    gosub send_cmd            
    led=1
    pause 1000
    led=0
    RETURN    
;*******************
send_2data:
    gosub stt_read
    cd=0
    portc=lbyte
    wr=0
    ce=0
    pauseus 5
    wr=1
    ce=1
;*******************
send_1data:
    gosub stt_read
    cd=0
    portc=hbyte
    wr=0
    ce=0
    pauseus 5
    wr=1
    ce=1
;*******************
send_cmd:
    gosub stt_read
    cd=1
    portc=lcdcmd
    ce=0
    wr=0
    pauseus 5
    ce=1
    wr=1
    return
;*******************
awrite:
    gosub stt_read
    portc=hbyte
    cd=0
    wr=0
    ce=0
    pauseus 5
    wr=1
    ce=1
    return
;*******************
lcd_init:
    lcdrst=0
    cd=1
    rd=1
    wr=1    
    ce=0
    md2=1
    fs1=0
    pause 1
    lcdrst=1
    return
;*******************    
lcd_write_set:
    portc=0
    cd=1
    rd=1
    wr=1    
    ce=0
    md2=1
    fs1=0
    trisc=0
    return
;*******************
;status okuma rutini
;*******************
stt_read:
    portc=0
    trisc=255   ;portc giriş
    rd=0    ;.........
    wr=1    ;.status biti okuma
    ce=0    ;..............
    cd=1    ;..............
stt_read1:
    if portc.0=1 and portc.1=1 then 
        goto lcd_write_set
    endif
    goto stt_read1 
;*******************
end

EES

Basic anlamam ama,

;-----set graphic home address--- 
    lbyte=0 
    hbyte=$40 
    lcdcmd=setg_home 
    gosub send_2data


GLCD adresi  max. 0x1fff=8191,  sanırım burda 0x4000 ayarlanmış.

CeMiL_mktrnk

arkadaşlar bu grafik lcdyi kullanmak için hangi kütüphaneyi kullanıyorsunuz ve ne gibi değişiklikler yaptınız? Acil yardım lazım bana elimde aynı glcd var ve dikdörtgen, yazı gibi işleri sorunsuz yapmam gerekiyor
Mekatronik Mühendisi/Mechatronic Engineer