18F46K22 - 16x2 LCD ? (Çözüldü)

Başlatan kdrsrn, 06 Ekim 2014, 16:23:11

kdrsrn

Tekrardan Merhaba,

Bu aralar biraz fazla başınızı ağrıttım ama bayram tatilimi de değerlendirip birşeyler kurcalamaya calışıyorum.

18f46k22 ve 16x2 karakter lcd ile İsis üzerinde sorunsuz şekilde çalıştırıyorum. Ama board üzerine geçtiğimde lcd üzerinde herhangi bir yazı hareket göremiyorum sadece üst satır komple siyah (Lcd kesin çalışıyor deneme kartının programını yükleyip denedim). Pin bağlantılarını defalarca kontrol ettim ama sonuç yok.





main.h
#include <18F46K22.h>
#device ADC=10

#FUSES INTRC_IO
#FUSES NOWDT                    //No Watch Dog Timer
#FUSES WDT128                   //Watch Dog Timer uses 1:128 Postscale
#FUSES NOBROWNOUT               //No brownout reset
#FUSES NOLVP                    //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O
#FUSES NOXINST                  //Extended set extension and Indexed Addressing mode disabled (Legacy mode)
#use delay(internal=4M)


main.c
#include <main.h>
#define LCD_ENABLE_PIN PIN_B3
#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>

void main()
{

set_tris_b(0b00000000);
lcd_init();

while(1)
{
   
   printf(lcd_putc, "\fBu Bir Denemedir");
   delay_ms(500);
   printf(lcd_putc, "\f\n1234567890123456");
   delay_ms(500);
}
}


Proje Dosyaları ektedir.
Yardımcı olursanız cok sevinirim.
Teşekkürler.


burctankal

#1
Dostum ilk Lcd denememde ben de aynı hata ile karşılaşmıştım. İsis similasyonunda lcd kontrast potuna gerek olmadığı için devremde de koymamıştım. Epey bi kafayı yedikten sonra bir de potlu deneyeyim dedikten sonra çalıştığını gördüm. 16x2 lcd'lerin sanırım 3. pini kontrast piniydi. buraya 5k'lik bir pot bağlamanı; eğer bağladıysan pot'un değeriyle oynamanı tavsiye ederim. Bir de kullandığın pic'in B portu digital olarak ayarlı mı? 18f4550'de standart analog olarak geliyor mesela.

kdrsrn

Hocam potu bağladım ayarıyla oynuyorum sadece ilk satırdakı o siyah bölüm ile oynuyor deniyorum 2 gündür ama hala bi çözüm bulamadım.

burctankal

Pic'in doğru çalıştığına emin olmak için programın başına kullanmadığın bir pinden 3-5 defa led yakıp söndürme komutu eklesen nasıl olur. Eğer led yanıp sönerse sorun lcd bağlantılarındadır, eğer yanmazsa pic bağlantıları ya da pic'teki programdadır. Ben de merak ettim şimdi, sonucu bildirir misin.

kdrsrn

Süper fikir. Eve gittiğimde hemen deneyip sonucu buraya yazarım hic aklıma gelmemişti. 3310 lcd yi de calistiramadim gecenlerde zaten hırs oldu. :D

kdrsrn

#5
Evet arkadaşlar eve geldim ve hemen #burctankal arkadaşımızın dediği işlemi yaptım ve aman tanrım didim.

Led de yanmıyor. :D

#include <main.h>
#define LCD_ENABLE_PIN PIN_B3
#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>

void main()
{

set_tris_b(0b00000000);
set_tris_d(0b00000000);
output_b(0b00000000);
output_d(0b00000000);
lcd_init();

while(1)
{
   output_toggle(pin_d2);
   printf(lcd_putc, "\fBu Bir Denemedir");
   delay_ms(500);
   printf(lcd_putc, "\f\n1234567890123456");
   delay_ms(500);
}
}


Olay Ne. Gercekten :(

burctankal

#6
Dostum sorunun en azından lcd bağlantılarından olmadığını anladık. Eğer programın isis'te çalışıyorsa demek ki  ya programın derlenme veya pic'e yazılma anında bir problem çıkıyor, ya da kurduğun devrede bir problem var. Daha fazla yardım bulabilmen için devrenin bir resmini ve ya şematik dizaynını burdan paylaşmanı tavsiye ederim. Bir de yerinde olsaydım öncelikle bir bread board üzerinde LCD yak söndür devresi kurar, devre çalıştıktan sonra lcd'ye geçerdim. Keşke Ete Hoca burda olsaydı, bizim göremediğimiz bir sigorta veya yazmaç ayarı da olabilir. Ama LCD yak söndür ile sorunu bulabileceğini düşünüyorum. Şimdiden kolay gelsin. Gelişmeleri bekliyorum :)

kdrsrn

Resimleri ilk mesaja eklemiştim ama ne hikmetse görünmüyor. Şimdi ek olarak ekledim.
Elimde rs232 üzerinden programlama yapabilen bir deney kartı var PicKit 3 ile kendi demo programını 877 ye atıp bu kit üzerinde
deniyorum calışıyor ama aynı 877 yi board a takınca yazdığım programla olmuyor.

Bağlantıları voltajı mclr yi hepsini tek tek kontrol ettim ama sonuc yok hala :(

burctankal

Dahili osilatör mü kullanıyorsun? Evet'se sigorta ayarlarından fosc'yi nasıl ayarladın? bir de regüle güç kaynağı mı kullanıyorsun? 7805 göremedim devrende

kdrsrn

#9
#include <18F46K22.h>
#device ADC=10

#FUSES INTRC_IO
#FUSES NOWDT                    //No Watch Dog Timer
#FUSES WDT128                   //Watch Dog Timer uses 1:128 Postscale
#FUSES NOBROWNOUT               //No brownout reset
#FUSES NOLVP                    //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O
#FUSES NOXINST                  //Extended set extension and Indexed Addressing mode disabled (Legacy mode)
#use delay(internal=4M)


Sigorta ayarları bu şekilde. Dahili 4 Mhz var.

Evet 0-30V 0-3A güç kaynağı var.

Aklıma acaba işlemci mi bozuk diye geliyor ama evdeki 887 877 demi bozuk yada bana küstülermi anlamadım :(

burctankal

Ben microC compiler üzerinden sigorta ayarlarını yaptığım için kod ile ayarlama konusunda iyi değilim. buradaki hangi satır dahili osilatörü seçiyor.

kdrsrn


#FUSES INTRC_IO    // Osilatörün dahili olacağını belirtiyor
#use delay(internal=4M)  // dahili 4mhz olarak ayarla şekilde

Zaten ayarları ccs-c de Project Wizart üzerinden yapıyorum hata olacağını zannetmem :-\

burctankal

Peki Avometre ile Vdd (+5 Volt) kontrol ettin mi?

kdrsrn

Evet Avometre ve Güç kaynağındaki veriler birebir.

burctankal

#14
Dostum pic'lerin bozuk olacağını sanmıyorum. reset pin direncin 10k  mı  1k mı?bir de vdd-vss arasına 100n cap bağlamayı dener misin?

Powered by EzPortal