lcd

Başlatan myprayer14, 06 Kasım 2016, 12:16:42

myprayer14

Daha önce başka yerde konu açtım ama cevap bulamadım. Bu forumda belki cevap bulabilirim diye yazmak istedim. Yardımcı olursanız sevinirim.

Lcd de üst tarafta tek sıra kutuck gözüküyor. Aşağıda resmini atıcam.
Lcd bağlantısını bir çok defa kontrol ettim sıkıntı yok.
Pic çalışıyor sanırım çünkü motor kontrolü için kullandığımda sağ sol stop görevlerini yapıyor.
pic18f2520 kullanıyorum. Ve dahili osilatör kullanıyorum.
Konstrat ayarını 4.7k,680,47ohm gibi dirençler ve 1k,5k,100k gibi potlarla denedim.
Bazı kişiler kütüphane de sorun olabilir tekrar tanıt dediler lcd yi. Yaptım.
Bir arkadaş da beslemeye 100nF bağla dedi. Denendi
Başka bir lcd denendi.

Kod şöyle;
#include <18F2520.h>
#FUSES INTRC_IO
#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=4M)

#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_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 

#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
    
   
   

   // TODO: USER CODE!!
   
       while(1) {     
      
     
      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
      
  
       

       
       
       
         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));
         }
        
         
         } 
         
        

         
         
       
}
         
         
   

      
     







RaMu

#1
   lcd_init();   // LCD hazırlanıyor
satırından önce 50ms bekleme koy.

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

satırını yorum haline getir (silebilirsin)


Olmazsa, ek olarak şunları yap:

#define LCD_RW_PIN PIN_B2

satırını yorum haline getir (silebilirsin)
(lcd.c kütüphane dosyasındaki aynı satırıda yorum yapmalısın.)

LCD RW bacağını 1k ile GND ye bağla.
Sorularınıza hızlı cevap alın: http://www.picproje.org/index.php/topic,57135.0.html

myprayer14

Konu daha yeni onaylandığı için anca yazma imkanı buldum. Bugün bi kaç denemeden sonra  Enable Rb0  gelince çalışmadığını anladım. Rb0 rb1 veya rb2 ye getirip diğer uçları Rb0 için tanımlayınca çalışıyor. Devreyi bastığım için program pinleri değiştirme imkanı şimdilik yok. Yardımcı olur diye yazmak istedim.

RaMu

flexlcd.c kütüphanesi var
forumda paylaşıldı,
bulamazsan linki ararım,
onunla istediğin pinleri kullanabilirsin.
Sorularınıza hızlı cevap alın: http://www.picproje.org/index.php/topic,57135.0.html