16F887 2X16 LCD kullanma - Yardım

Başlatan suatengin, 03 Temmuz 2014, 04:26:06

suatengin

Herkese merhaba.
Pic programlamada yeni sayılırım ve datasheet okumak konusunda çok fazla yeteneksizim. program hafızasının ve G/Ç pinlerinin fazla olması sebebiyle birde 16F887'yi bi deniyim diyerekten bir devre tasarladım. devrenin bir şeması yok ama gerekir derseniz bir şema çizerim. B portunun tamamını ve D portunun 6. ve 7. bitlerini çıkış olarak kullanıyorum bu çıkışlardan 4 dane 74HC238 sürüyorum bunlarda sıkıntı yok. Sorunum şu şekilde: LCD'yi aşağıdaki gibi bağladım ve hiçbir şekilde yazı yazdıramıyorum. aşağıdakinden farklı olarak PORTA üzerindede denedim yine çalışmadı.

PORTC.4,5,6,7 = LCD.4,5,6,7
PORTD.5 = RS
PORTD.3 = E
Contrast bacağı potans ile + ve - bacağına bağlı
Read/Write direkt olarak 0'a bağlı.


yazdığım kod:
ANSEL = %00000000 ' Make AN0-AN7 digital                       '*
ANSELH= %00000000 ' Make AN8-AN13 digital                      '*
CM1CON0=0 'C1 Komparatör iptal                                 '*
CM2CON0=0 'C2 Komparatör iptal                                 '*
WPUB=0  'PORTB pullup lar kapalı                               '*
'------------LCD BİT CONFİGÜRASYONU------------------------------
DEFINE LCD_DREG   PORTC                                        '*
DEFINE LCD_DBIT   4                                            '*
                                                               '*
DEFINE LCD_RSREG   PORTD                                       '*
DEFINE LCD_RSBIT   5                                           '*
                                                               '*
DEFINE LCD_EREG   PORTD                                        '*
DEFINE LCD_EBIT   3                                            '*
                                                               '*
DEFINE LCD_BITS   4                                            '*
DEFINE LCD_LINES   2                                           '*
'------------PORT ATAMALARI--------------------------------------
TRISA = 0                                                      '*
TRISB = 0                                                      '*
TRISC = 0                                                      '*
TRISD = 0                                                      '*
TRISE = 0                                                      '*
                                                               '*
PORTA = 0                                                      '*
PORTB = 0                                                      '*
PORTC = 0                                                      '*
PORTD = 0                                                      '*
PORTE = 0                                                      '*
'------------ATAMALAR--------------------------------------------
LCDVEE   VAR   PORTD.4                                         '*
LCDDRW   VAR   PORTD.2                                         '*
TUSAE VAR PORTD.6                                              '*
TUS1E VAR PORTB.4                                              '*
TUS2E VAR PORTB.3                                              '*
TUS3E VAR PORTB.2                                              '*

TUSA01 VAR PORTB.1                                             '*
TUSA02 VAR PORTB.0                                             '*
TUSA03 VAR PORTD.7                                             '*

TUSN01 VAR PORTB.7                                             '*
TUSN02 VAR PORTB.6                                             '*
TUSN03 VAR PORTB.5                                             '*
'------------LCD AÇILIŞI-----------------------------------------
HIGH   LCDVEE                                                  '*
LOW   LCDDRW                                                   '*
PAUSE   500                                                    '*
LOW   LCDVEE                                                   '*
'------------LCD HAZIR!------------------------------------------
'****************************************************************
PROGRAM_BASLA1:
lcdout $FE,1,  "   HOSGELDiNiZ  "
lcdout $FE,$C0,"    --------    "
PAUSE   3000
lcdout $FE,1,  "  SiSTEM HAZIR  "
lcdout $FE,$C0,"   BEKLENiYOR   "
GOTO PROGRAM_BASLA1:
END
-----------------------------------------------------------------------------------

programdaki LCDWEE/LCDDRW pinleri kontrast ve read/write pinlerini yazılımsal olarak kontrol edebilmek içindi fakat LCD'yi kullanabilmem öncelikli olduğu için geçici olarak iptal ettim.

konfigürasyonu programlayıcı üzerinden yapıyorum:


Yardımlarınız için teşekkür ederim.

hasankara

#1
lcd rw nereye bağlı? şimdi fark ettim.

RaMu

Lcd kullanımında yapılan hatalarla ilgili sayısız konu açıldı
önce onları bulup okusan bence kendin bulursun hatayı,
ben aynı şeyleri tekrar tekrar yazmaktan sıkıldım.

Biraz önce breadborda bağlı hazlihazırda çalışan lcd li devreyle uğraşıyordum,
başka güç kaynağıyla deneyeyim dedim,
birden lcd çalışmaz oldu,
hadi dedim yaktık lcd yi herhalde,
evir çevir derken,
kontrast pini ile RW deki dirençlerin yerini değiştirivermişim,
daha önce konusunu bile açmıştım şu hatayı yapmayın diye yine aynı haayı yapıp
çalışan lcd yi çalışmaz hale getirdiğimi farkettim,
hata şuydu
LCD RW bacağını 10k ile toprağa çekmişim,
böyle olunca elimdeki lcd çalışmıyor,
RW bacağını 180 ohm ile sıfıra çektim tekrar çalışmasına kaldığı yerden devam eti,
yani kısaca
ne kadar tecrübelide olsan bağlantı hatası programda ufak yanlış vs.
bunlar oluyor biraz daha gayretle araştırıp bulmayı dene,
olmadı zaten yardım etmeye hazırız.
Sorularınıza hızlı cevap alın: http://www.picproje.org/index.php/topic,57135.0.html

suatengin

#3
hocam cevabın için teşekkür ederim. lcd bağlantısında hata olduğunu zannetmiyorum yaklaşık 15 sefer test ettim. elimde hali hazırda LCD ile kullandığım 16F628a var  sorunsuz çalışıyor, onun LCD sini söküp deniyorum 16F628a da çalışırken 16F887 de çalıştırmayı başaramadım. LCD'nin girişlerine PullUp veya PullDown veya benzeri birşey gerekirmi? 16F628a ile yaptığım devrede böyle birşey yapmamıştım. tavsiyelerinize uyarak forumda daha detaylı bi arama yapıyorum. Tekrar teşekkür ederim.


Düzenleme: sorunu buldum. şöyle ki: PORTC.6 açık uçlu bir pinmiş. yani PullUp ile kullanılması gerekiyormuş. bu sonuca PORTC.6'yı ölçü aletiyle ölçerek ulaştım. konu üzerinde düzenleme butonu şuan gözükmüyor bu sebeple yoruma yazıyorum. değerli vakitlerinizi aldığım için özür dilerim. cehalet başa bela, ben herşeyi ölçtüğümü sanmıştım.