16x2 LCD Uygulamasındaki Problem (18F4550)

Başlatan Cemre., 27 Ağustos 2015, 21:37:53

Cemre.

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ı.



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




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?

LukeSkywalker

Portb diye degil latb diye tanimlama yapin.

Cemre.

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?

LukeSkywalker

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.

Cemre.

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?

selimkoc

#5
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.

Cemre.

#6



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

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



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;

LukeSkywalker

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;



selimkoc

#8
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.


Cemre.

Şuan stajdayim hocam eve gidince deneyip sonuçlardan sizi haberdar ederim.

LukeSkywalker

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.



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.

Karamel

hocam bence sorun mcu clock -> frequancy kisina girilen value yanlis.

Cemre.

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?

Karamel

hocam yanlis basmisim. bence yazmak istemistim. duzelttim ama siz daha hizli yanitlamissiniz  :P

Cemre.

Ne olması gerekiyor peki? Bu konuda bildiğin bir kaynak site vs var mı?