Picproje Elektronik Sitesi

DERLEYİCİLER => MikroC - PIC => Konuyu başlatan: Cemre. - 27 Ağustos 2015, 21:37:53

Başlık: 16x2 LCD Uygulamasındaki Problem (18F4550)
Gönderen: Cemre. - 27 Ağustos 2015, 21:37:53
Herkese iyi akşamlar.

Geçen gün @selimkoc hocamdan 18F4550 için bir deney kartı aldım PIC programlayıcı masrafına girmek istemediğimden dolayı.

(https://elektrokod.files.wordpress.com/2014/09/deneyseti_pic18f4550_similasyon1.png)

Kartın devre şeması bu.

LCD denemesi yapmak istedim ancak bir türlü beceremedim. Daha önce CCS C kullanıyordum ancak o kadar zaman geçti ki şuan ki mikroC bilgim CCS C'den daha fazladır sanıyorum  ;D

LCD çalışıyor mu diye Arduino LCD örnek kodu ile Arduino UNO kartta denedim ve sorunsuz çalışıyor.
Ben de mikroC kodlarıma yoğunlaşmam gerektiğini anladım.

// Durum LED'leri
#define LED1 PORTE.B0
#define LED2 PORTE.B1
#define LED3 PORTE.B2

// LCD bağlantıları tanımlanıyor
sbit LCD_RS at RB4_bit;
sbit LCD_EN at RB5_bit;
sbit LCD_D4 at RB0_bit;
sbit LCD_D5 at RB1_bit;
sbit LCD_D6 at RB2_bit;
sbit LCD_D7 at RB3_bit;

sbit LCD_RS_Direction at TRISB4_bit;
sbit LCD_EN_Direction at TRISB5_bit;
sbit LCD_D4_Direction at TRISB0_bit;
sbit LCD_D5_Direction at TRISB1_bit;
sbit LCD_D6_Direction at TRISB2_bit;
sbit LCD_D7_Direction at TRISB3_bit;
// LCD bağlantıları tanımlandı

char txt1[] = "1234567890123456";
char txt2[] = "1234567890123456";

void main(){
     ADCON1 = 0x1F;                      // Analog özellikli tüm pinler Dijital G/Ç yapıldı.
     CMCON = 0x07;                     //
     TRISB = 0;                          // PORTB çıkış yapıldı.
     TRISE = 0;                          // PORTE çıkış yapıldı.
     LED1 = 1;
     Lcd_Init();                         // LCD Kurulumu
     Delay_ms(100);
     Lcd_Cmd(_LCD_CLEAR);                // Ekranı Temizle
     Delay_ms(100);
     Lcd_Cmd(_LCD_CURSOR_OFF);           // İmleç Kapalı
     Delay_ms(100);
     LED2 = 1;
     Lcd_Out(1,1,txt1);                  // Satır 1 Sütun 1 "txt1" yazdır
     Delay_ms(2000);
     Lcd_Out(2,1,txt2);                  // Satır 2 Sütun 1 "txt2" yazdır
     LED3 = 1;
     for(;;);
}


(http://s18.postimg.cc/cd74gj4p1/20150827_203359.jpg) (http://postimg.cc/image/cd74gj4p1/)

Yardımcı olabilecek olan var mı?

Edit: Aynı kodlar Proteus ISIS'te çalışıyor :(
Edit2: @selimkoc hocama da ayrıca teşekkürler.
Edit3: (Soru) mikroC "Edit Project" kısmındaki ayarlamalar hakkında bir anlatım vs. var mı? OSC ayarları vs. için? Hatanın kaynağı olabileceğine inanıyorum?
Başlık: Ynt: 16x2 LCD Uygulamasındaki Problem (18F4550)
Gönderen: LukeSkywalker - 27 Ağustos 2015, 21:55:36
Portb diye degil latb diye tanimlama yapin.
Başlık: Ynt: 16x2 LCD Uygulamasındaki Problem (18F4550)
Gönderen: Cemre. - 27 Ağustos 2015, 21:57:10
Alıntı yapılan: LukeSkywalker - 27 Ağustos 2015, 21:55:36
Portb diye değil latb diye tanimlama yapin.

Hocam anlamadım PORTB geçmiyor kodda? define kısmından mı bahsediyorsunuz?
Başlık: Ynt: 16x2 LCD Uygulamasındaki Problem (18F4550)
Gönderen: LukeSkywalker - 27 Ağustos 2015, 21:57:34
Ayrica kartta bootloader yuklu oldugu icin 48Mhz'den baska frekansta calistiramazsiniz islemciyi.

mesaj birleştirme:: 27 Ağustos 2015, 21:58:19

Evet rb4_bit degil latb4_bit deyin mesela veya latb.b4 deyin.
Başlık: Ynt: 16x2 LCD Uygulamasındaki Problem (18F4550)
Gönderen: Cemre. - 27 Ağustos 2015, 22:03:35
Alıntı yapılan: LukeSkywalker - 27 Ağustos 2015, 21:57:34
Ayrica kartta bootloader yuklu oldugu icin 48Mhz'den baska frekansta calistiramazsiniz islemciyi.

mesaj birleştirme:: 27 Ağustos 2015, 21:58:19

Evet rb4_bit değil latb4_bit deyin mesela veya latb.b4 deyin.

Anladım hocam. Peki bu frekansta çalışan bir işlemcinin benim 7 liralık LCD'me hızlı geliyor olma ihtimali nedir?
Başlık: Ynt: 16x2 LCD Uygulamasındaki Problem (18F4550)
Gönderen: selimkoc - 27 Ağustos 2015, 22:12:10
LCD'nin R/W pini GND'ye bağlanması gerekiyor.


// Durum LED'leri
#define LED1 PORTE.B0
#define LED2 PORTE.B1
#define LED3 PORTE.B2


Satırlarını

// Durum LED'leri
#define LED1 LATE.B0
#define LED2 LATE.B1
#define LED3 LATE.B2


olarak değiştir.
Başlık: Ynt: 16x2 LCD Uygulamasındaki Problem (18F4550)
Gönderen: Cemre. - 27 Ağustos 2015, 22:15:07

(http://s28.postimg.cc/p0og7jbqx/Capture.jpg) (http://postimg.cc/image/p0og7jbqx/)

Şu anki bağlantı şemam bu hocam.

mesaj birleştirme:: 27 Ağustos 2015, 22:58:47

(http://s14.postimg.cc/xza0i2g6l/Aqbybq0_O3_AF9_D_WYKGu_QBLGi4a_LMV3_bo_Wg_AGc_KNGyxm.jpg) (http://postimg.cc/image/xza0i2g6l/)

Karakterleri ekrana tek tek yazdırdığımda sorun yok.

     Delay_ms(100);
     Lcd_Chr_Cp('1');
     Delay_ms(100);
     Lcd_Chr_Cp('2');
     Delay_ms(100);
     Lcd_Chr_Cp('3');
     Delay_ms(100);
     Lcd_Chr_Cp('4');
     Delay_ms(100);
     Lcd_Chr_Cp('5');
     Delay_ms(100);
     Lcd_Chr_Cp('6');
     Delay_ms(100);
     Lcd_Chr_Cp('7');
     Delay_ms(100);
     Lcd_Chr_Cp('8');
     Delay_ms(100);
     Lcd_Chr_Cp('9');
     Delay_ms(100);
     Lcd_Chr_Cp('0');
     Delay_ms(100);
     Lcd_Chr_Cp('1');
     Delay_ms(100);
     Lcd_Chr_Cp('2');
     Delay_ms(100);
     Lcd_Chr_Cp('3');
     Delay_ms(100);
     Lcd_Chr_Cp('4');
     Delay_ms(100);
     Lcd_Chr_Cp('5');
     Delay_ms(100);
     Lcd_Chr_Cp('6');
     LED3 = 1;
Başlık: Ynt: 16x2 LCD Uygulamasındaki Problem (18F4550)
Gönderen: LukeSkywalker - 27 Ağustos 2015, 23:08:22
Alıntı yapılan: selimkoc - 27 Ağustos 2015, 22:12:10
LCD'nin R/W pini GND'ye bağlanması gerekiyor.


// Durum LED'leri
#define LED1 PORTE.B0
#define LED2 PORTE.B1
#define LED3 PORTE.B2


Satırlarını

// Durum LED'leri
#define LED1 LATE.B0
#define LED2 LATE.B1
#define LED3 LATE.B2


olarak değiştir.

Bunların bir önemi yok.

@huseyin67  değiştirmen gereken yer şurası:

sbit LCD_RS at  LATB.B4;
sbit LCD_EN at  LATB.B5;
sbit LCD_D4 at  LATB.B0;
sbit LCD_D5 at  LATB.B1;
sbit LCD_D6 at  LATB.B2;
sbit LCD_D7 at  LATB.B3;


Başlık: Ynt: 16x2 LCD Uygulamasındaki Problem (18F4550)
Gönderen: selimkoc - 27 Ağustos 2015, 23:16:20
Yukarıdaki değişikliği yaptıktan sonra proje ayarlarına bir bak. Ekte benim ayarlar var. Porta yazarken LAT, okurken PORT registerini kullan.

(http://i.hizliresim.com/j2gyWg.png) (https://hizliresim.com/j2gyWg)
Başlık: Ynt: 16x2 LCD Uygulamasındaki Problem (18F4550)
Gönderen: Cemre. - 28 Ağustos 2015, 14:04:48
Şuan stajdayim hocam eve gidince deneyip sonuçlardan sizi haberdar ederim.
Başlık: Ynt: 16x2 LCD Uygulamasındaki Problem (18F4550)
Gönderen: LukeSkywalker - 28 Ağustos 2015, 14:07:00
Alıntı yapılan: selimkoc - 27 Ağustos 2015, 23:16:20
Yukarıdaki değişikliği yaptıktan sonra proje ayarlarına bir bak. Ekte benim ayarlar var. Porta yazarken LAT, okurken PORT registerini kullan.

(http://i.hizliresim.com/j2gyWg.png) (https://hizliresim.com/j2gyWg)

Bootloader kullanırken proje ayarlarını değiştirmenin bir anlamı kalmıyor. Bootloaderın ayarları nasılsa o ayarlar geçerli olur her halükarda.
Başlık: Ynt: 16x2 LCD Uygulamasındaki Problem (18F4550)
Gönderen: Karamel - 28 Ağustos 2015, 14:13:02
hocam bence sorun mcu clock -> frequancy kisina girilen value yanlis.
Başlık: Ynt: 16x2 LCD Uygulamasındaki Problem (18F4550)
Gönderen: Cemre. - 28 Ağustos 2015, 14:13:17
Alıntı yapılan: huseyin67 - 27 Ağustos 2015, 22:03:35
Anladım hocam. Peki bu frekansta çalışan bir işlemcinin benim 7 liralık LCD'me hızlı geliyor olma ihtimali nedir?

Hocam bu konuyu açıklama şansınız var mı?

mesaj birleştirme:: 28 Ağustos 2015, 14:13:52

Alıntı yapılan: Karamel - 28 Ağustos 2015, 14:13:02
hocam bende sorun mcu clock -> frequancy kisina girilen value yanlis.

Anlamadım @Karamel sende mi bende mi?
Başlık: Ynt: 16x2 LCD Uygulamasındaki Problem (18F4550)
Gönderen: Karamel - 28 Ağustos 2015, 14:14:47
hocam yanlis basmisim. bence yazmak istemistim. duzelttim ama siz daha hizli yanitlamissiniz  :P
Başlık: Ynt: 16x2 LCD Uygulamasındaki Problem (18F4550)
Gönderen: Cemre. - 28 Ağustos 2015, 14:16:53
Ne olması gerekiyor peki? Bu konuda bildiğin bir kaynak site vs var mı?
Başlık: Ynt: 16x2 LCD Uygulamasındaki Problem (18F4550)
Gönderen: LukeSkywalker - 28 Ağustos 2015, 14:18:19
48.000000
Yaz frekans kısmına yeter. Diğer ayarlarla oynamana gerek yok.
Ayrıca LAT değişikliklerini yaptın mı?
Başlık: Ynt: 16x2 LCD Uygulamasındaki Problem (18F4550)
Gönderen: Cemre. - 28 Ağustos 2015, 14:20:58
Hocam şuan stajdayım ancak akşam deneyebilirim.
Başlık: Ynt: 16x2 LCD Uygulamasındaki Problem (18F4550)
Gönderen: LukeSkywalker - 28 Ağustos 2015, 14:21:51
Dün akşam LAT yazmadın mı PORT yazan yerlere?
Önceki sayfada kod halinde verdiğim değişikliği yapınca çalıştığını göreceksin. Ayrıca Frekans yerine de muhakkak 48.000000 yapman gerekiyor. Diğer ayarları değiştiremezsin zaten şu aşamada.
Başlık: Ynt: 16x2 LCD Uygulamasındaki Problem (18F4550)
Gönderen: Cemre. - 28 Ağustos 2015, 14:26:24
Hayır hocam bugün stajimin son günü çok yoruluyorum ve erken uyuyorum, maalesef deneyemedim. Yaptığım en son deneme harfleri tek tek göndermekti ve başarılı olmuştu.
Başlık: Ynt: 16x2 LCD Uygulamasındaki Problem (18F4550)
Gönderen: Cemre. - 30 Ağustos 2015, 11:20:30
Frekansı 48MHz ayarladığımda sorun çözüldü.
Ben kullandığım XT'nin frekansını girmem gerekiyor sanmıştım. Sanırım USB içeren uygulamalarda durum böyle?
Başlık: Ynt: 16x2 LCD Uygulamasındaki Problem (18F4550)
Gönderen: LukeSkywalker - 30 Ağustos 2015, 12:27:31
Alıntı yapılan: huseyin67 - 30 Ağustos 2015, 11:20:30
Frekansı 48MHz ayarladığımda sorun çözüldü.
Ben kullandığım XT'nin frekansını girmem gerekiyor sanmıştım. Sanırım USB içeren uygulamalarda durum böyle?
O bootloaderı kullandığın sürece 48MHz ile çalışmak zorundasın. Portlara veri gönderirken LAT registerını kullan. Porttan veri okurken PORT registerını kullan.
Başlık: Ynt: 16x2 LCD Uygulamasındaki Problem (18F4550)
Gönderen: Cemre. - 30 Ağustos 2015, 14:22:07
Tamam hocam, teşekkürler vakit ayırdığınız için.