Picproje Elektronik Sitesi

DERLEYİCİLER => CCS C => Konuyu başlatan: saydn - 01 Ekim 2017, 20:12:22

Başlık: Lcd Yavaş Çalışıyor
Gönderen: saydn - 01 Ekim 2017, 20:12:22
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 (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);
  }


Başlık: Ynt: Lcd Yavaş Çalışıyor
Gönderen: volkanunal - 01 Ekim 2017, 20:54:52
Kristal ile ilgili bir problem olabilir mi acaba? 
Başlık: Ynt: Lcd Yavaş Çalışıyor
Gönderen: saydn - 01 Ekim 2017, 21:02:52
20 mhz lik kristal takılı düşüreyimmi ? veya kodlarken bi hata yapıyor olabilir miyim ?
Başlık: Ynt: Lcd Yavaş Çalışıyor
Gönderen: 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.
Başlık: Ynt: Lcd Yavaş Çalışıyor
Gönderen: baran123 - 01 Ekim 2017, 21:34:05
CCS C de eskiden şöyle clock tanımlıyordum.
#use delay(clock=4MHz, crystal=4MHz)
Başlık: Ynt: Lcd Yavaş Çalışıyor
Gönderen: ziyaretci - 02 Ekim 2017, 12:45:41
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.