LCD'ye 20'den fazla yazı yazdırıldığında karşılaşı

Başlatan fatihvelid, 21 Eylül 2006, 10:47:48

fatihvelid

Sevgili Arkadaşlar
Aşağıda linki verilen uygulama LCD'ye yazı gönderme uygulamasıdır. 21 farklı yazı yazdırıyorum, burda problem yok. 22. ci kez farklı bir yazı yazdırmak istediğimde LCD'ye hiçbirşey yazmıyor.Ve benzeri uygulamalarda programlanan diğer görevleride yerine getirmiyor Bu uygulama MikroC'de yazılmıştır. Problem kullandığım derleyicinin demo olmasından mı kaynaklanıyor acaba. Ama demo versiyonundan kaynaklanıyor olsa programı derlemez. Zaten struct bölümünde birkaç yazı daha tanımladınız mı programın boyu 2k'yı geçtiğinden demo limit hatası verip derlemiyor.

Aşağıdaki linkten programı, kodunu ve proteus simulasyonunu indirebilirsiniz. Aşağıdaki uygulama çalışıyor. Birkaç kelime daha LCD'ye gönderdiğinizde çalışmıyor.

İlgili arkadaşlardan acil cevap bekliyorum

http://www.hemenpaylas.com/download/1624715/LCD_prob.rar.html
Kainatta her canlı "DNA" diliyle yazılmış bir programdır...

fatihvelid

Yazdığım kod aşağıdadır. Aşağıdaki kod problemsiz çalışıyor. Ama LCD'ye yeni bir yazılar yazdırmaya çalıştığımda ekrana hiç bir şey yazmıyor.

Acil cevap bekliyorum.

struct MenuItem 
{ 
char text[20]; 
}; 
const struct MenuItem MyMenu0 = {"Fatih" }; 
const struct MenuItem MyMenu1 = {"Velid"}; 
const struct MenuItem MyMenu2 = {"Deneme1"}; 
const struct MenuItem MyMenu3 = {"Deneme2"}; 
const struct MenuItem MyMenu4 = {"Deneme3"}; 
const struct MenuItem MyMenu5 = {"Deneme4"}; 
const struct MenuItem MyMenu6 = {"Deneme5"}; 
const struct MenuItem MyMenu7 = {"Deneme6"}; 
const struct MenuItem MyMenu8 = {"Deneme7"}; 
const struct MenuItem MyMenu9 = {"Deneme8"}; 
const struct MenuItem MyMenu10 = {"Deneme9"}; 
const struct MenuItem MyMenu11 = {"Deneme10"}; 
const struct MenuItem MyMenu12 = {"Deneme11"}; 
const struct MenuItem MyMenu13 = {"Deneme12"}; 
const struct MenuItem MyMenu14 = {"Deneme13"}; 
const struct MenuItem MyMenu15 = {"Deneme14"}; 
const struct MenuItem MyMenu16 = {"Deneme15"}; 
const struct MenuItem MyMenu17 = {"Deneme16"}; 
const struct MenuItem MyMenu18 = {"Deneme17"}; 
const struct MenuItem MyMenu19 = {"Deneme18"}; 
const struct MenuItem MyMenu20 = {"Deneme19"}; 
const struct MenuItem MyMenu21 = {"Deneme20"}; 
const struct MenuItem MyMenu22 = {"Deneme21"}; 
const struct MenuItem MyMenu23 = {"Deneme22"}; 
char lcdptr[20]; 
unsigned char *value; 

char* strcpy2(char * to, const char * from) 
{ 
char * cp; 

cp = to; 
while(*cp++ = *from++) 
continue; 
return to; 
} 
void Baslangic() 
{ 
Lcd_Cmd(LCD_CLEAR); 
strcpy2(lcdptr, MyMenu0.text); 
LCD_Out(2,2,lcdptr); 
Delay_ms(1000); 

Lcd_Cmd(LCD_CLEAR); 
strcpy2(lcdptr, MyMenu1.text); 
LCD_Out(2,2,lcdptr); 
Delay_ms(1000); 

Lcd_Cmd(LCD_CLEAR); 
strcpy2(lcdptr, MyMenu2.text); 
LCD_Out(2,2,lcdptr); 
Delay_ms(1000); 

Lcd_Cmd(LCD_CLEAR); 
strcpy2(lcdptr, MyMenu3.text); 
LCD_Out(2,2,lcdptr); 
Delay_ms(1000); 

Lcd_Cmd(LCD_CLEAR); 
strcpy2(lcdptr, MyMenu4.text); 
LCD_Out(2,2,lcdptr); 
Delay_ms(1000); 

Lcd_Cmd(LCD_CLEAR); 
strcpy2(lcdptr, MyMenu6.text); 
LCD_Out(2,2,lcdptr); 
Delay_ms(1000); 

Lcd_Cmd(LCD_CLEAR); 
strcpy2(lcdptr, MyMenu7.text); 
LCD_Out(2,2,lcdptr); 
Delay_ms(1000); 

Lcd_Cmd(LCD_CLEAR); 
strcpy2(lcdptr, MyMenu8.text); 
LCD_Out(2,2,lcdptr); 
Delay_ms(1000); 

Lcd_Cmd(LCD_CLEAR); 
strcpy2(lcdptr, MyMenu9.text); 
LCD_Out(2,2,lcdptr); 
Delay_ms(1000); 

Lcd_Cmd(LCD_CLEAR); 
strcpy2(lcdptr, MyMenu10.text); 
LCD_Out(2,2,lcdptr); 
Delay_ms(1000); 

Lcd_Cmd(LCD_CLEAR); 
strcpy2(lcdptr, MyMenu11.text); 
LCD_Out(2,2,lcdptr); 
Delay_ms(1000); 

Lcd_Cmd(LCD_CLEAR); 
strcpy2(lcdptr, MyMenu12.text); 
LCD_Out(2,2,lcdptr); 
Delay_ms(1000); 

Lcd_Cmd(LCD_CLEAR); 
strcpy2(lcdptr, MyMenu13.text); 
LCD_Out(2,2,lcdptr); 
Delay_ms(1000); 

Lcd_Cmd(LCD_CLEAR); 
strcpy2(lcdptr, MyMenu14.text); 
LCD_Out(2,2,lcdptr); 
Delay_ms(1000); 

Lcd_Cmd(LCD_CLEAR); 
strcpy2(lcdptr, MyMenu15.text); 
LCD_Out(2,2,lcdptr); 
Delay_ms(1000); 

Lcd_Cmd(LCD_CLEAR); 
strcpy2(lcdptr, MyMenu16.text); 
LCD_Out(2,2,lcdptr); 
Delay_ms(1000); 

Lcd_Cmd(LCD_CLEAR); 
strcpy2(lcdptr, MyMenu17.text); 
LCD_Out(2,2,lcdptr); 
Delay_ms(1000); 

Lcd_Cmd(LCD_CLEAR); 
strcpy2(lcdptr, MyMenu18.text); 
LCD_Out(2,2,lcdptr); 
Delay_ms(1000); 

Lcd_Cmd(LCD_CLEAR); 
strcpy2(lcdptr, MyMenu19.text); 
LCD_Out(2,2,lcdptr); 
Delay_ms(1000); 

Lcd_Cmd(LCD_CLEAR); 
strcpy2(lcdptr, MyMenu20.text); 
LCD_Out(2,2,lcdptr); 
Delay_ms(1000); 

/* 
Lcd_Cmd(LCD_CLEAR); 
strcpy2(lcdptr, MyMenu21.text); 
LCD_Out(2,2,lcdptr); 
Delay_ms(1000); 

Lcd_Cmd(LCD_CLEAR); 
strcpy2(lcdptr, MyMenu22.text); 
LCD_Out(2,2,lcdptr); 
Delay_ms(1000); 

Lcd_Cmd(LCD_CLEAR); 
strcpy2(lcdptr, MyMenu23.text); 
LCD_Out(2,2,lcdptr); 
Delay_ms(1000); 
*/ 
} 
void main_init() 
{ 
TRISD = 0; 
Lcd_Init(&PORTD); // Initialize LCD connected to PORTB 
Lcd_Cmd(Lcd_CLEAR); // Clear display 
Lcd_Cmd(Lcd_CURSOR_OFF); // Turn cursor off 
Baslangic(); 
} 

void main() 
{ 
unsigned char text; 
unsigned int i; 
main_init(); 
}
Kainatta her canlı "DNA" diliyle yazılmış bir programdır...

arslan74

Merhaba,
MicroC böyle kodlarda hata üretiyor, buglara sahib. Onun yerine direkt string kullan.

Lcd_Cmd(LCD_CLEAR); 
strcpy2(lcdptr, MyMenu0.text); 
LCD_Out(2,2,lcdptr); 
Delay_ms(1000);


yerine aşağıdaki kodu kullan.

Lcd_Cmd(LCD_CLEAR); 
strcpy2(lcdptr, "Fatih" ); 
LCD_Out(2,2,lcdptr); 
Delay_ms(1000);



Selamlar.

westcoast

MikroC'de bir değişkenin içeriğini LCD'de göstermek için ne yapmak gerekir.
Protondan sonra epey farklı geldide..

arslan74

Merhaba,

Alıntı YapMikroC'de bir değişkenin içeriğini LCD'de göstermek için ne yapmak gerekir.
Protondan sonra epey farklı geldide..

Değişken derken ne tür bir değişkenden bahs ediyorsunuz. Daha ayrıntılı anlatırsanız size daha net cevab vermiş olurum. C de bir cok değişken türleri var ona göre değişkenlerinde gösterimi farklı oluyor. Siz nasıl bir değişken istediğini anlatmanız lazım. Bununla ilgili örnek programları sample klasöründe bulabilirsin.

Selamlar.

westcoast

Alıntı yapılan: "arslan74"Merhaba,

Alıntı YapMikroC'de bir değişkenin içeriğini LCD'de göstermek için ne yapmak gerekir.
Protondan sonra epey farklı geldide..

Değişken derken ne tür bir değişkenden bahs ediyorsunuz. Daha ayrıntılı anlatırsanız size daha net cevab vermiş olurum. C de bir cok değişken türleri var ona göre değişkenlerinde gösterimi farklı oluyor. Siz nasıl bir değişken istediğini anlatmanız lazım. Bununla ilgili örnek programları sample klasöründe bulabilirsin.

Selamlar.

Mesela 8 bitlik bir char değişkeni için konuşacak olursak ve bununda adının a olduğunu farzedersek
a'nın ilk değeri başlangıçta 1 ve 1 saniyede 1 arttırılıp lcd'de gösteriliyor.
böylesine basit bir örneği mikroc'de nasıl yapabilirim?
teşekkürler.
(lcdout komutu ile yapamadım)

arslan74

Sana hi-tech ie yazılmış örnek kod veriyorum. ANSI-C standartı uygun oluğu için kolaylıkla diğer derleyicilerde kullanılabilir.
void lcd_write_char( unsigned char val){
	
	unsigned int	temp= 0;
	unsigned int	t= 100;
	char 	flag=1;
	char 	flag_minus=0;

	if (val == 0){
	lcd_puts("  0");
		return;
	}
	
/*	if (val < 0){
		flag_minus= 1 ;
		val*= -1;
	}
*/

	do{

	temp= val/t;

	if (flag)
		if (temp==0){
			lcd_puts(" ");
			continue;
		}
		
		else {
			flag= 0;
			if(flag_minus)
				lcd_putch('-');
		}
		
	lcd_putch('0'+temp);

	val= val - temp*t;
	
	}while(t/=10);


void
lcd_putch(char c)
{
	LCD_RS = 1;	// write characters
	lcd_write( c );
}



}

westcoast

hocam teşekkür ederim
ama benim sorunum mikroc ile daha doğrusu mikroc ansic uyumu pek yok.

arslan74

Alıntı YapTarih: Cmt Eyl 23, 2006 10:20 am    Mesaj konusu:  

--------------------------------------------------------------------------------

hocam teşekkür ederim
ama benim sorunum mikroc ile daha doğrusu mikroc ansic uyumu pek yok.

Merhaba,

MicroC nin ansiC standartı uyumu olmaması, onun kodları başka derleyicilere aktarmanda sorun cıkartır. Ancak Ansi-C koduna göre yazılmış bir kod bütün C derleyiciler anlar ve derleyebilir. Aksi takdirde bu C dili olmaz başka bir dil olurdu.

Selamlar.

westcoast

hocam extra bir soru soruyorum.
mikroc'de demo limit diye bir uyarı alıyorum programı compile ederken
eğer float değişkeni tanımlanmışsa
nedeni ne olabilir.
program krekli tam kıramadık mı sence?

arslan74

Bilmiyorum, ben MicroC kullanmiyorum. Ancak dediğin gibi senin düzgün ckrack yapamamandan kaynaklaniyor olabilir.

Neden illa MicroC 'de israr ediyorsun. Sana avantajlı gelecek, sadece görsel olayları var. Ama asıl iş olan arka plandaki derlemede zor zayıf kalıyor. Onun yerine hiç olmaz ise CCS kullan ona nispeten daha düzgün bir derleyici. Hi-Tech ilk başta sana zor gelebilir ve içinde öyle hazır bir sürü kodu yok. Ama içlerinde en iyi dereyici olarak onu görüyorum. IAR derleyicisini denemediğim için onu bunun içine katmadım.

Selamlar.

westcoast

Alıntı yapılan: "arslan74"Bilmiyorum, ben MicroC kullanmiyorum. Ancak dediğin gibi senin düzgün ckrack yapamamandan kaynaklaniyor olabilir.

Neden illa MicroC 'de israr ediyorsun. Sana avantajlı gelecek, sadece görsel olayları var. Ama asıl iş olan arka plandaki derlemede zor zayıf kalıyor. Onun yerine hiç olmaz ise CCS kullan ona nispeten daha düzgün bir derleyici. Hi-Tech ilk başta sana zor gelebilir ve içinde öyle hazır bir sürü kodu yok. Ama içlerinde en iyi dereyici olarak onu görüyorum. IAR derleyicisini denemediğim için onu bunun içine katmadım.

Selamlar.

hocam haklısın ben ilk hitech ile başladım picc'ye sonra arabirimden dolayı ccs ve mikroc denedim.
Mikroc içlerinde en janjanlısı ama dediğin gibi çok zayıf kalıyor bana daha başında bir çok problem çıkardı.
galiba gene hitech'e döneceğim.zaten borland c++ 3.1 dos arabirimi onuda kullanıyorum.birbirine benziyor.

fatihvelid

Alıntı Yap

MicroC böyle kodlarda hata üretiyor, buglara sahib. Onun yerine direkt string kullan.

Kod:
Lcd_Cmd(LCD_CLEAR);
strcpy2(lcdptr, MyMenu0.text);
LCD_Out(2,2,lcdptr);
Delay_ms(1000);



yerine aşağıdaki kodu kullan.

Kod:
Lcd_Cmd(LCD_CLEAR);
strcpy2(lcdptr, "Fatih" );
LCD_Out(2,2,lcdptr);
Delay_ms(1000);  


Teşekkür ederim,
Sanırım problem kısmen 16f877'nin stack kapasitesini doldurmasından kaynaklanıyor. Söylediğin şekilde yaptığım zaman birkaç mesaj daha yazabiliyorum. Benim ilk yazdığım kodda senin verdiğin koda nispeten dallanma daha fazla olduğu için stack'ta taşma oluyor.

Ama 18f452'nin stack kapasitesi daha fazla. 18F serisine geçmeye karar verdim . 18f serisinin stack kapasitesi 16f877'nin stack kapasitesinden en nerdeyse 4 katı.
Kainatta her canlı "DNA" diliyle yazılmış bir programdır...