Lcd Yavaş Çalışıyor

Başlatan saydn, 01 Ekim 2017, 20:12:22

saydn

Merhaba Arkadaşlar,
Ekrana yazı yazdırmaya çalışıyorum simülasyonda hiç bir sıkıntı yok güzel çalışıyor ancak kartta denediğimde ekranın açılması ve yazıların yazılması çok uzun sürüyor öyleki bir kelimeyi yazdırmam 2-3 dkyi buluyor her 1 snde 1-2 pixel doldurarak ilerliyor. Ekranın açılması bile çok uzun sürüyor. Konunun anlaşılması için video paylaşıyorum. Desteğiniz için teşekkür ederim.

https://www.youtube.com/watch?v=goRwfiIzq18

#include <16f877a.h>   
#fuses XT,NOWDT,NOPROTECT,NOBROWNOUT,NOLVP,NOPUT,NOWRT,NODEBUG,NOCPD
#use delay (clock=4000000) 
#include <HDM64GS12.c>
#include <graphics.c>

void main ()
{
   setup_psp(PSP_DISABLED);        
   setup_spi(SPI_SS_DISABLED);     
   setup_timer_1(T1_DISABLED);     
   setup_timer_2(T2_DISABLED,0,1); 
   setup_adc_ports(NO_ANALOGS);    
   setup_adc(ADC_OFF);            
   setup_CCP1(CCP_OFF);           
   setup_CCP2(CCP_OFF);            
    
  while(1)
  {
   char yazi1[]="Deneme";
   glcd_init(ON);
   delay_ms(100);
   glcd_text57(120,50, yazi1,2,ON);
   delay_ms(100);
  }
} 



volkanunal

Kristal ile ilgili bir problem olabilir mi acaba? 
Primum nil nocere

saydn

20 mhz lik kristal takılı düşüreyimmi ? veya kodlarken bi hata yapıyor olabilir miyim ?

volkanunal

Yazılımda 4 mhz olarak tanımlanmış kristal değeri ,
4MHz Oscillator: Period (clock cycle) = 1/4MHz = 250ns; 1 instruction = 4 clock cycles = 1us

20MHz Oscillator: Period (clock cycle) = 1/20MHz= 50ns; 1 instruction = 4 clock cycles = 200ns

Hesaba bakarsak , sizin yazılımınız ile donanımınız uyuşmuyor , delay_ms yerine delay_us kullanır mısınız ya da yazılım ile donanım değerini eşitleyin.
Primum nil nocere

baran123

CCS C de eskiden şöyle clock tanımlıyordum.
#use delay(clock=4MHz, crystal=4MHz)

ziyaretci

#5
Alıntı yapılan: volkanunal - 01 Ekim 2017, 21:15:26
Yazılımda 4 mhz olarak tanımlanmış kristal değeri ,
4MHz Oscillator: Period (clock cycle) = 1/4MHz = 250ns; 1 instruction = 4 clock cycles = 1us

20MHz Oscillator: Period (clock cycle) = 1/20MHz= 50ns; 1 instruction = 4 clock cycles = 200ns

Hesaba bakarsak , sizin yazılımınız ile donanımınız uyuşmuyor , delay_ms yerine delay_us kullanır mısınız ya da yazılım ile donanım değerini eşitleyin.

Yukarıdaki düzeltmeden sonra uzun vadede stabilizasyon için aşağıda yazdıklarımı uygulayabilirsiniz.

Sigorta ayarlarından Brownout özelliğini açın.

Bazen devre beslemesini devreden ayırdığında kondansatörler bir anda boşalmadığı için PIC gerilimi 2 V' dan küçük stabil olmayan değerlere maruz kalıyor. Bu durum nedeniyle(tespit, tecrübe) flash program belleğindeki ayarlar rastgele değerler alabiliyor ya da denetleyici içerisindeki donanımlar bu durumdan olumsuz etkilenebiliyor. Bu etki bazen devre ilk enerjilendiği anda da meydana gelebiliyor.


İlgili PIC için brownout 2 V diye hatırlıyorum. Brownout özelliği; PIC, beslemesinin değeri 2V' dan aşağıya düşer düşmez kendini donanımsal olarak resete çekmesidir. Ve böylelikle beslemede meydana gelen olumsuzluklar nedeni ile yaşadığım sorunlardan şimdiye kadar kurtuldum diyebilirim. Aksini tecrübe etmediğim sürece.   


##Yaşadığım problemler
- İşlem frekansının değişmesi
- Rom bellekte tanımladığım sabit değerlerin değişmesi(Bu bazen if deyimindeki bir değişken koşulunu sorgulamak için kullandığınız sabit değer bile olabiliyor.[yaşadım])
Örnek: if(k==2) buradaki rom belleğe kazınan 2 değişebiliyor.


Genellikle bu özellik 18F serilerinde sabit tanımlanan belli gerilim değerlerine de ayarlanabiliyor.


İlgili özellik için detaylı bilgiye ilgili PIC 'in datasheet'inde arama çubuğuna brownout yazarak kolaylıkla ulaşabilirsin.



Ek olarak; LCD(karakter)'ye karakter gönderme hızını arttırmak istiyorsan ve sadece LCD'yi arayüz olarak kullanıyorsan(okuma yapmıyorsan) LCD sürücü dosyasında LCD'nin hazır olup olmadığını sorgulayan while döngüsü var. O döngüyü sil, yerine belirli bir gecikme ver. (2 ms deneyebilirsin) sadece yazma yapacağın için bir pindende tasarruf etmiş olursun.

Yanlış bilgi vermiş isem bilgili ve tecrübelilerin beni düzeltmelerini(uyarmalarını)  rica ediyorum.