18f452 ile ccs c ile 2x16 lcd sürmek yardım!

Başlatan mr_knox, 20 Ocak 2012, 10:44:21

mr_knox

tekrar merhaba arkadaşlar malesef hala probleme bi çözüm bulamadım :(
fikir, görüş ve tavsiyelerinizi bekliyorum...
kutsal kitapları okuyup anlamayan dindar okuyup anlayan ateist olur.  ( Nikola Tesla )

Pir-O

Ben aynı kütüphaneyi hem 18F452 için hem de diğer PIC'ler için kullanıyorum bir sorun yok. Daha dün bir proje yaptım 18F452 kullandım LCD'ekranı sürdüm hatta data portlarım D portuydu EN ve RS'yi C portuna bağladım sorunsuz çalışıyor. Bence PIC'in bozulmuş olabilir ve ya config ayarlarında sorun olabilir. Basit bir program yaz bir adet ledi yak söndür PIC çalışıyor mu diye kontrol et. Eğer çalışıyorsa lcd_init(); komutundan sonra bekleme yapman gerekiyor delay_ms(10); kadar. bunlar da işe yaramazsa tekrar çözüm yolu ararız.

mr_knox

#include <16f877a.h>
#fuses XT, NOWDT, NOPROTECT, NOBROWNOUT, NOLVP, NOPUT, NOWRT, NODEBUG, NOCPD
#use delay (clock=4000000)
#use fast_io(b)
#define use_portb_lcd TRUE
#include <LCD.c>
void main()
{ 
  set_tris_b(0x00);

lcd_init();
lcd_send_byte(0,0x01);
start:
lcd_gotoxy(1,1);
printf(lcd_putc,"      LCD       ");
lcd_gotoxy(1,2);
printf(lcd_putc,"     DENEME     ");

goto start;
}


BU 16F877A İLE YAZDIĞIM BASİT KOD ÇALIŞIYOR

#include <18f452.h>
#fuses XT, NOWDT, NOPROTECT, NOBROWNOUT, NOLVP, NOPUT, NOWRT, NODEBUG, NOCPD
#use delay (clock=4000000)
#use fast_io(b)
#define use_portb_lcd TRUE
#include <LCD.c>
void main()
{ 
  set_tris_b(0x00);

lcd_init();
lcd_send_byte(0,0x01);
start:
lcd_gotoxy(1,1);
printf(lcd_putc,"      LCD       ");
lcd_gotoxy(1,2);
printf(lcd_putc,"     DENEME     ");

goto start;
}


BUDA 18F452 İÇİN YAZILMIŞ BASİT KOD ÇALIŞMIYOR.

yani sadece denetleyici  kodlarını değiştiriyorum port aynı işlev aynı ama 18 te çalışmıyor
kutsal kitapları okuyup anlamayan dindar okuyup anlayan ateist olur.  ( Nikola Tesla )

mr_knox

arkadaşlar sonunda sorunu deneme yanılma ile çözdüm.
sorunun yazılımla alakası yokmuş. 16f serilerde proteusta çalışırken mclr ununu high çekmek gerekmiyor eee bizde alışmışız proteus simülasyonda çekmemeye 18 f serisinde eğer mclr yi high çekmezseniz simülasyon çalışmıyor.16 f serisinden 18 f serisine geçipte niye çalışmadı bu şimdi diyen arkadaşların dikkatine :)
bu arada ilgilenen arkadaşlara tekrar teşşekkürlerimi iletir iyi çalışmalar dilerim...
kutsal kitapları okuyup anlamayan dindar okuyup anlayan ateist olur.  ( Nikola Tesla )

fahri-

sana en başta demiştimki şemayı buraya koy hatayı bulalım diye. eğer şemayı koysaydın yaptığın hata 10 dk da sana söylenirdi. Ne demek istediğimi anladın sanırım.

mr_knox

şemayı eklemeye çalıştım tamam sanmıştım ama hata oluşmuş malesef  :-\
kutsal kitapları okuyup anlamayan dindar okuyup anlayan ateist olur.  ( Nikola Tesla )

Maxim

evet şema-kod koymayanlara yardım edip, boşu boşuna vakit harcayanlar için güzel bir örnek çalışma oldu bu  :)

mr_knox

#22
arkadaşlar merhaba daha önce bu başlık altındaki sorunlu çalışmamla alakalı olduğu için aynı başlık altına yazmanın uygun olacağını düşündüm. sorunum port d den lcd sürmekteki başarısızlığım. şuan ki yaşadığım sorun sırf lcd sürmede olduğu için bununla ilgili basit devreyi ekliyorum. şimdi sorum şu ccs c de mevcut lcd.c driver ile ve forumlarda bulduğum çeşitli driver lar ile denemeler yaptım proteusta ister b portundan ister d portundan süreyim sorun yok küçük resimde görüldüğü gibi ama uygulama yaptığımda b portunda çalışıyor fakat d portunda malesef çalışmıyor :( bağlantıları birkaç sefer kontrol ettim hatta bozdum tekrar yaptım ama olmuyor.hee nedir bu d portu ısrarın diye sorarsanızda devremde b0 daki dış kesmeyi kullanıyorum ve bu sebep lcd yi d portundan sürmek istiyorum. sizce bu sorun ne sebepten kaynaklanabilir.bilgi ve tecrübelerinizi rica ediyorum ilginiz işin şimdiden teşşekkürlerimi sunuyorum.
#include <18f452.h>
#fuses XT, NOWDT, NOPROTECT, NOBROWNOUT, NOLVP, NOPUT, NOWRT, NODEBUG, NOCPD
#use delay (clock=4000000)
#use fast_io(d)
#define use_portd_lcd TRUE
#include <LCD.c>
void main()
{ 
  set_tris_d(0x00);

lcd_init();
lcd_send_byte(0,0x01);
start:
lcd_gotoxy(1,1);
printf(lcd_putc,"      LCD       ");
lcd_gotoxy(1,2);
printf(lcd_putc,"     DENEME     ");

goto start;
}


kutsal kitapları okuyup anlamayan dindar okuyup anlayan ateist olur.  ( Nikola Tesla )

mr_knox

arkadaşlar bu konuda daha önce sorun yaşayan ve çözen yada neden kaynaklandığını tahmin edecek birisi yokmu?
kutsal kitapları okuyup anlamayan dindar okuyup anlayan ateist olur.  ( Nikola Tesla )

gokayk

#24
Alıntı yapılan: mr_knox - 25 Şubat 2012, 09:04:29
arkadaşlar bu konuda daha önce sorun yaşayan ve çözen yada neden kaynaklandığını tahmin edecek birisi yokmu?

Merhabalar.

#include <18f452.h>
#fuses XT, NOWDT, NOPROTECT, NOBROWNOUT, NOLVP, NOPUT, NOWRT, NODEBUG, NOCPD
#use delay (clock=4000000)
#use fast_io(d)
#include <lcd.c>
#define LCD_ENABLE_PIN PIN_D0
#define LCD_RS_PIN PIN_D1
#define LCD_RW_PIN PIN_D2

void main()
{
    lcd_init();
    printf(lcd_putc," Merhaba ");
}

while(1);


Bu şekilde çalışacaktır. Bir deneyin bakalım.

Bunları dahil ettin mi?

mr_knox

#gokayk arkadaş vermiş olduğun kodlarla denedim malesef yine çalışmadı :(
proteusta tamam çalışıyor fakat gelgelelim iş uygulamaya geldiğinde sonuç yok
olay b portundan sürmekse hem proteus hem uygulamada sorun yok çalışıyor.
ama ilgi alakan için çok teşşekkür ederim.
bu arada bu vermiş olduğun kodlarla gerçekte böyle uygulama yapmışmıydın çalışmışmıydı?
yoksa problem bende benim beceriksizliğimmi acep  :-[
evet arkadaşlar ccs c de d portunda lcd sürme işini gerçek uygulamada yapan arkadaşlar tecrübeleriniz ile beni ve bu tip sorunları ileride yaşayacak googleden bu sayfayı bulup okuyacak arkadaşları aydınlatmanızı rica ediyorum.


kutsal kitapları okuyup anlamayan dindar okuyup anlayan ateist olur.  ( Nikola Tesla )

elektronikhobi

Sorun basitçe lcd.c dosyasında B portu çıkış olarak tanımlanmış olabilir.
#define LCD_DATA	PORTB


gibi. Bunu PORTD ile değiştirince (gerekiyorsa Enable ve Register Select uçlarını da) çalışması lazım.

https://github.com/erdemoncel/sicaklik/blob/master/lcd.c


gokayk

Alıntı yapılan: mr_knox - 02 Mart 2012, 11:23:04
#gokayk arkadaş vermiş olduğun kodlarla denedim malesef yine çalışmadı :(
proteusta tamam çalışıyor fakat gelgelelim iş uygulamaya geldiğinde sonuç yok
olay b portundan sürmekse hem proteus hem uygulamada sorun yok çalışıyor.
ama ilgi alakan için çok teşşekkür ederim.
bu arada bu vermiş olduğun kodlarla gerçekte böyle uygulama yapmışmıydın çalışmışmıydı?
yoksa problem bende benim beceriksizliğimmi acep  :-[
evet arkadaşlar ccs c de d portunda lcd sürme işini gerçek uygulamada yapan arkadaşlar tecrübeleriniz ile beni ve bu tip sorunları ileride yaşayacak googleden bu sayfayı bulup okuyacak arkadaşları aydınlatmanızı rica ediyorum.

Şuanda simülasyon aşamasında gerçekleştirdiğim bir projede LCD'yi d portundan sürüyorum yani pratikte gözlemlemedim. Fakat 16F877 ile birçok sefer D portundan LCD sürdüm ve çalışmıştı. Kodlarını paylaşabilir misin? Bir bakalım.

mr_knox

Alıntı yapılan: elektronikhobi - 02 Mart 2012, 13:45:41
Sorun basitçe lcd.c dosyasında B portu çıkış olarak tanımlanmış olabilir.
#define LCD_DATA	PORTB


gibi. Bunu PORTD ile değiştirince (gerekiyorsa Enable ve Register Select uçlarını da) çalışması lazım.

https://github.com/erdemoncel/sicaklik/blob/master/lcd.c



linkini vermiş olduğun uygulamayı indirip içindeki lcd.c driver ında port b yi port d diye ve diğer pin tanımlama düzenlemeleri yapıp C:\Program Files\PICC\Drivers içine yapıştırdım. ve yeni isim vererek yazmış olduğum lcd deneme programı içinde tanıttım fakat malesef yine sonuç alamadım   :'(


#gokayk arkadaş  denedim driverlerden birini örnek verecek olursak durum şöyle ;

#include <18f452.h>
#fuses XT, NOWDT, NOPROTECT, NOBROWNOUT, NOLVP, NOPUT, NOWRT, NODEBUG, NOCPD
#use delay (clock=4000000)
#use fast_io(d)
#include <lcd.c>
#define LCD_ENABLE_PIN PIN_D0
#define LCD_RS_PIN PIN_D1
#define LCD_RW_PIN PIN_D2

void main()
{ 
  
set_tris_d(0x00);
lcd_init();
lcd_send_byte(0,0x01);
while(1)
{
lcd_gotoxy(1,1);
printf(lcd_putc,"      LCD       ");
lcd_gotoxy(1,2);
printf(lcd_putc,"     DENEME     ");

}
}




bu kodda isiste resimde göründüğü gibi sorunsuz çalışıyor ama iş uygulamaya geldiğinde malesef sonuç hüsran  :-\
peki elinde ben d portunda lcd sürmek için bu driver ı kullanıyorum ve çalışyor dediğiniz bi lcd.c driver varmı?
paylaşabilirmisiniz?
ilgi alakalara tekrar çok teşşekkürler.
saygılar
iyi çalışmalar....
kutsal kitapları okuyup anlamayan dindar okuyup anlayan ateist olur.  ( Nikola Tesla )

mr_knox

daha önce uygulamada d portunu lcd sürmekte kullanan hiçkimse yokmu?
kutsal kitapları okuyup anlamayan dindar okuyup anlayan ateist olur.  ( Nikola Tesla )