LCD DISPLAYDE KUTUCUK GÖZÜKÜYOR

Başlatan myprayer14, 23 Ekim 2016, 22:02:02

myprayer14

Lcd devresş kurdum ama kutucuk gözüküyor sadece. Ekte resmini attım. Simülasyonda çalışıyor. Olası sebebler nedir acaba yardımcı olur musunuz?

#include <18F2520.h>

#FUSES NOWDT                    //No Watch Dog Timer
#FUSES HS
#FUSES NOPUT                    //No Power Up Timer
#FUSES NOBROWNOUT               //No brownout reset
#FUSES NOLVP                    //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O
#FUSES NODEBUG                  //No Debug mode for ICD
#FUSES NOPROTECT                //Code not protected from reading
#FUSES NOCPD                    //No EE protection
#FUSES NOWRT                    //Program memory not write protected

#use delay (clock=4000000)

#use fast_io(b) //Port yönlendirme komutları B portu için geçerli

#define use_portb_lcd TRUE   // LCD B portuna bağlı

#include <lcd.c>   // lcd.c dosyası tanıtılıyor

int x;      // Tamsayı tipinde değişken tanımlanıyor
float y;    // Ondalıklı tipte değişken tanımlanıyor
char z;     //  Karakter tipinde değişken tanımlanıyor

void main()
{
//setup_psp(PSP_DISABLED);        // PSP birimi devre dışı
   setup_spi(SPI_SS_DISABLED);     // SPI birimi devre dışı
   setup_timer_1(T1_DISABLED);     // T1 zamanlayıcısı devre dışı
   setup_timer_2(T2_DISABLED,0,1); // T2 zamanlayıcısı devre dışı
   setup_adc_ports(NO_ANALOGS);    // ANALOG giriş yok
   setup_adc(ADC_OFF);             // ADC birimi devre dışı
   setup_CCP1(CCP_OFF);            // CCP1 birimi devre dışı
   setup_CCP2(CCP_OFF);            // CCP2 birimi devre dışı
   
   setup_oscillator(OSC_4MHZ);
   

   set_tris_b(0x00);   // B portu komple çıkış
   output_b(0x00);

   lcd_init();   // LCD hazırlanıyor

   x=10;   // x değişkenine değer veriliyor
   y=32.6; // y değişkenine değer veriliyor


   

   while(1) // Sonsuz döngü
   {
      lcd_send_byte(0,0x0d);   // LCD'ye komut gönderiliyor. İmleç yanıp sönsün komutu.

      printf(lcd_putc,"\f     CCS C"); // LCD'ye veri gönderiliyor.
      delay_ms(1000); // 1 sn gecikme
      printf(lcd_putc,"\n  Derleyicisi");
      delay_ms(1000); // 1 sn gecikme
      lcd_gotoxy(1,2);   // Kursör 1.sütun, 2.satıra konumlandırılıyor.
      printf(lcd_putc,"\fX DEGERI=%d",x); // LCD'de tamsayı olarak x değişken değeri görüntüleniyor.
      delay_ms(1000); // 1 sn gecikme
      printf(lcd_putc,"\f\nY DEGERI=%f",y); // LCD'de ondalıklı olarak y değişken değeri görüntüleniyor.
      delay_ms(1000); // 1 sn gecikme
      printf(lcd_putc,"\fDIRENC"); // LCD siliniyor ve "Direnc" stringi yazdırılıyor.
      delay_ms(1000); // 1 sn gecikme
      z=lcd_getc(3,1);  // LCD'de o an 3.Sütun ve 1.Satırda olan karakter alınıyor. Alınan değer z değişkenine aktarılıyor.
      printf(lcd_putc,"\f%c",z);    // z değişkeni LCD'ye aktarılıyor
      delay_ms(2000); // 2 sn gecikme
   }
     
   

}         
         
   

     
     



ete

Tek sıra kutucuk gördüğüne göre PİC çalışmıyor demektir. Bir çok sebebi olabilir. En başta, besleme voltajına, Kristal ve onun kondansatörlerine, MCLR pininde pullup direnci varmı ona bakmalısın. Tabiiki LCD nin bağlantı uçları da bağlımı diye kontrol edilmeli. Ayrıca LCD 3 nolu pininde 10K lık trimpotun orta ucu olmalı ve trimpotun diğer iki ucu GND ve +5V ta bağlı olmalıdır. Bu trimpot ile kontrast ayarı yapılmalıdır.
Daha fazlası için sitede önemli bilgiler başlığı altında bulunan aşağıdaki linki incelemeni öneririm.

Ete

myprayer14

Alıntı yapılan: ete - 24 Ekim 2016, 07:36:33
Tek sıra kutucuk gördüğüne göre PİC çalışmıyor demektir. Bir çok sebebi olabilir. En başta, besleme voltajına, Kristal ve onun kondansatörlerine, MCLR pininde pullup direnci varmı ona bakmalısın. Tabiiki LCD nin bağlantı uçları da bağlımı diye kontrol edilmeli. Ayrıca LCD 3 nolu pininde 10K lık trimpotun orta ucu olmalı ve trimpotun diğer iki ucu GND ve +5V ta bağlı olmalıdır. Bu trimpot ile kontrast ayarı yapılmalıdır.
Daha fazlası için sitede önemli bilgiler başlığı altında bulunan aşağıdaki linki incelemeni öneririm.

Ete

Ete hocam, osilatör tavsiyeniz hariç dediklerinizin hepsini denedim. Sonuç ne yazık ki değişmedi. Dahili osilatör kullandığım için o kısımla ilgili fazla yapacak bişeyim var mı bilmiyorum. Pic'te sorun yok diğer işlemlerde çalıştırıyorum. 2-3 saattir bakmama rağmen bir sonuca varamadım açıkçası. Başka ekleyeceğiniz tavsiyeleriniz varsa beklerim yoksa yine de çok teşekkür ederim...

İlyas KAYA

İşlemci açılışında bir led yakıp söndürün. Eğer LED yanıp sönüyor ise işlemci çalışıyor demektir.
Ya DATA / RW/EN/RS bacaklarını doğru takmadınız yada küthaneneniz bozuk.

RW bacağını da kütüphanedeki pin'e takmayı unutmayın.

lcd.c dosyasını açıp nereye hangi pin bağlı görebilirsiniz. Eğer sihirbaz ile oluşturdu iseniz tekrar kontrol edin.
Göz odur ki dağ ardını görsün,
Akıl odur ki başa geleceği bilsin.!

myprayer14

Alıntı yapılan: İlyas KAYA - 24 Ekim 2016, 23:09:47
İşlemci açılışında bir led yakıp söndürün. Eğer LED yanıp sönüyor ise işlemci çalışıyor demektir.
Ya DATA / RW/EN/RS bacaklarını doğru takmadınız yada küthaneneniz bozuk.

RW bacağını da kütüphanedeki pin'e takmayı unutmayın.

lcd.c dosyasını açıp nereye hangi pin bağlı görebilirsiniz. Eğer sihirbaz ile oluşturdu iseniz tekrar kontrol edin.

Bağlantı şunun gibi yapıldı doğru değil mi?


onun haricinde pic ve lcd'nin solunda ki ve sonunda ki besleme ve şaselerini de bağladım.
1-3 bacaklarına kısa devre yerine 3. bacaktan  trimpotun orta bacağına diğer iki bacaklara besleme ve şase yine verdim.
pici motor kontrolü için program değiştirip deneyince çalışıyor. Onun için pic çalışıyor varsayımında bulundum.
kütüphane bozuk ise bilmiyorum ne yapılır çok derin bir bilgim yok açıkçası.

ete

Tek denenecek şey LCD nin Vee (3 nolu pin) ile GND arasına 680 ohmluk bir direnç bağlamak. Bu bağlantı şemadaki gibi direk GND ye bağlı olursa aşırı kontrast yapılmış olur ve bazı LCD lerde bu dolu kutucuk olarak belirir.

Ete

İlyas KAYA

#include <lcd.c>         

den hemen önce aşağıdaki tanımlamayı eklermisin.



#define LCD_ENABLE_PIN PIN_B0
#define LCD_RS_PIN PIN_B1
#define LCD_RW_PIN PIN_B2
#define LCD_DATA4 PIN_B4
#define LCD_DATA5 PIN_B5
#define LCD_DATA6 PIN_B6
#define LCD_DATA7 PIN_B7


Göz odur ki dağ ardını görsün,
Akıl odur ki başa geleceği bilsin.!

myprayer14

Alıntı yapılan: İlyas KAYA - 25 Ekim 2016, 14:41:46
#include <lcd.c>         

den hemen önce aşağıdaki tanımlamayı eklermisin.



#define LCD_ENABLE_PIN PIN_B0
#define LCD_RS_PIN PIN_B1
#define LCD_RW_PIN PIN_B2
#define LCD_DATA4 PIN_B4
#define LCD_DATA5 PIN_B5
#define LCD_DATA6 PIN_B6
#define LCD_DATA7 PIN_B7

denedim ancak sonuç değişmedi. Lcd bozuk olabilir mi? daha önce hiç kullanmadım gerçi.

myprayer14

Alıntı yapılan: ete - 25 Ekim 2016, 07:30:18
Tek denenecek şey LCD nin Vee (3 nolu pin) ile GND arasına 680 ohmluk bir direnç bağlamak. Bu bağlantı şemadaki gibi direk GND ye bağlı olursa aşırı kontrast yapılmış olur ve bazı LCD lerde bu dolu kutucuk olarak belirir.

Ete

Ete bey sizi tekrar rahatsız ediyorum ama şöyle bi değişikli yapınca çalıştı lcd ama b portundan çalışmıyor.

#define LCD_ENABLE_PIN PIN_C7
#define LCD_RS_PIN PIN_C5
#define LCD_RW_PIN PIN_C6

#define LCD_DATA4 PIN_B4
#define LCD_DATA5 PIN_B5
#define LCD_DATA6 PIN_B6
#define LCD_DATA7 PIN_B7

komutlarıyla çalıştı. Ama ben enable rs vs rw pinlerine b portunu atadığımda ise çalışmıyor. Program olarak bi yanlışlık eksiklik var ama anlamadım.
Son kod şöyle ;
#include <18F2520.h>
#FUSES INTRC
#FUSES NOWDT                    //No Watch Dog Timer
#FUSES XT
#FUSES NOPUT                    //No Power Up Timer
#FUSES NOBROWNOUT               //No brownout reset
#FUSES NOLVP                    //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O
#FUSES NODEBUG                  //No Debug mode for ICD
#FUSES NOPROTECT                //Code not protected from reading
#FUSES NOCPD                    //No EE protection
#FUSES NOWRT                    //Program memory not write protected
//#FUSES NOMCLR

//#use delay (clock=4000000)
#use delay(internal=4Mhz)

#use fast_io(b) //Port yönlendirme komutları B portu için geçerli
//#define use_portb_lcd TRUE   // LCD B portuna bağlı

#define LCD_ENABLE_PIN PIN_C7
#define LCD_RS_PIN PIN_C5
#define LCD_RW_PIN PIN_C6
#define LCD_DATA4 PIN_B4
#define LCD_DATA5 PIN_B5
#define LCD_DATA6 PIN_B6
#define LCD_DATA7 PIN_B7

#include <lcd.c>   // lcd.c dosyası tanıtılıyor
int x;      // Tamsayı tipinde değişken tanımlanıyor
float y;    // Ondalıklı tipte değişken tanımlanıyor
char z;     //  Karakter tipinde değişken tanımlanıyor


int i=50;


void main()
{

   setup_adc_ports(NO_ANALOGS|VSS_VDD);
   setup_adc(ADC_CLOCK_DIV_2|ADC_TAD_MUL_0);
   setup_spi(SPI_SS_DISABLED);
   setup_wdt(WDT_OFF);
   setup_timer_0(RTCC_INTERNAL);
   setup_timer_1(T1_DISABLED);
   setup_timer_2(T2_DISABLED,0,1);
   setup_comparator(NC_NC_NC_NC);
   setup_vref(FALSE);
   
   setup_oscillator(OSC_4MHZ);
   
   
   set_tris_a(0x1F);   // RA0 ve RA1 pinleri giriş
   set_tris_b(0x00);
   set_tris_c(0x00);   // portc komple çıkış.
   output_b(0x00);
   output_c(0x00);
  set_pwm1_duty(0);
  set_pwm2_duty(0);
   setup_ccp1(CCP_PWM);  // CCP1 birimi PWM çıkışı için ayarlandı
   setup_ccp2(CCP_PWM);  // CCP2 birimi PWM çıkışı için ayarlandı
   
   setup_timer_2(T2_DIV_BY_1,100,1);
   
   
   
   lcd_init();   // LCD hazırlanıyor

   x=10;   // x değişkenine değer veriliyor
   y=32.6; // y değişkenine değer veriliyor
   
   lcd_init();   
   printf(lcd_putc,"\f  Mustafa  ");
   

   // TODO: USER CODE!!
   
       while(1) {     
       
     
     
     
       

       
       
       
         if(!input(pin_a3)){
         
            delay_ms(25);
            set_pwm1_duty(0);
            output_low(pin_c3);
         
           
            output_high(pin_c4) ;
            set_pwm2_duty(i);
           
            //while(input!(pin_a3));
         }
         
         if(!input(pin_a4)){
         
            delay_ms(25);
            set_pwm2_duty(0);
            output_low(pin_c4);
           
            output_high(pin_c3) ;
            set_pwm1_duty(i);
               
           
           
            //while(input!(pin_a4));
         }   
         if(!input(pin_a2)){
         
            delay_ms(25);
            output_low(pin_c3);
            output_low(pin_c4) ;
           
            set_pwm1_duty(0);
            set_pwm2_duty(0);
           
           
            //while(input!(pin_a2));
         }
       
         
         }
         
       

         
         
       
}
         
         
   

     
     

ete

Bildiğim kadarı ile LCD ler port beğenmez. Nereye bağlarsan çalışırlar.
Bu durumda ya senin işlemcinin PORTB.0-B.3 aralığında bozuk pin var yada aynı pinleri başka amaçlar içinde kullanıyorsun.
Her şeyden önce R/W pini kullanmana hiç gerek yok. LCD nin o pinini direk GND ye bağlarsan işlemciden bir pin tasarruf edersin. Tabiiki programdaki R/W tanımlamasınıda kaldırman gerekir sanırım. Sonra geriye kalan 2 pini (E ve RS) portB.0- B.3 arasında değişik kombinasyonlarla dene bence.
Şimdiye kadar böyle bir sorunla hiç karşılaşmadım. Bir anlam veremiyorum doğrusu.
Ete


myprayer14

Alıntı yapılan: ete - 06 Kasım 2016, 21:11:17
Bildiğim kadarı ile LCD ler port beğenmez. Nereye bağlarsan çalışırlar.
Bu durumda ya senin işlemcinin PORTB.0-B.3 aralığında bozuk pin var yada aynı pinleri başka amaçlar içinde kullanıyorsun.
Her şeyden önce R/W pini kullanmana hiç gerek yok. LCD nin o pinini direk GND ye bağlarsan işlemciden bir pin tasarruf edersin. Tabiiki programdaki R/W tanımlamasınıda kaldırman gerekir sanırım. Sonra geriye kalan 2 pini (E ve RS) portB.0- B.3 arasında değişik kombinasyonlarla dene bence.
Şimdiye kadar böyle bir sorunla hiç karşılaşmadım. Bir anlam veremiyorum doğrusu.
Ete
Sanırım Enable kısmında sorun var. Kombinasyonda enable değiştirince çalıştı b portunda da. Neyse çok sağolun yine de..

myprayer14

Rb0 pinine enable gelince çalışmıyor. Ama Rb0 pinine rw veya rs den herhangi biri gelip diğer pinlerin herhangi birine enable gelince çalışıyor. Buradan pinde sorun olmadığı sonucu çıkıyor. Enable de düşen kenar tetiklemeli olması lazım gibi bi kural var sanırım ama ben ccs c kullandığımdan kütüphane de hazır tanımlanmış olmuş olacağından dolayı başka bir şey aklıma gelmiyor. Yardımcı olmak isteyen olur diye yazmak istedim.

İlyas KAYA

CCS C nin kendi kütüphanesini kullanırsanız "RW" bacağını da bağlamanız gerekiyor. İlk denemelerimde bende şaseye çekmiştim. Sonra RW bacağını bağlayınca çalışmıştı.
Sanırım kütüphane ile ilgili bir sorun. Başka kütüphane kullandım herşey normalde döndü.

Kütüphaneyi değiştirmeyi deneyin.
Göz odur ki dağ ardını görsün,
Akıl odur ki başa geleceği bilsin.!

Powered by EzPortal