D

programı resetlemedimmi lcd çalışmıyor

Başlatan dogus, 13 Nisan 2013, 18:55:44

dogus

programı başlattığımda lcd hücreleri simsiyah gözüküyor, birkaç kere mclr'den resetlediğim  zaman görüntü geliyor, kodlarım şu şekilde, lcd bağlantılarım ve mclr bağlantım kesinlikle doğru
include "modedefs.bas"
trisc=%00000001
trisd=0

sayi var byte
DEFINE LCD_DREG PORTD
DEFINE LCD_DBIT 0
DEFINE LCD_EREG PORTD
DEFINE LCD_EBIT 5
DEFINE LCD_RWREG PORTD
DEFINE LCD_RWBIT 6
DEFINE LCD_RSREG PORTD
DEFINE LCD_RSBIT 4
DEFINE LCD_BITS 4
DEFINE LCD_LINES 2
pause 400
LCDOUT $FE,1
LCDOUT $FE,2,"BEKLE"
LCDOUT $FE, $C0, "ACILIYOR"

sayi=0
dongu:

serin portc.7,T2400, sayi
lcdout $fe,1
LCDOUT $FE,2,#sayi


goto dongu
end

ete

Pause 400 komutunu , Pause 200 olarak değiştir. LCDOUT $FE,1 komutundan sonrada Pause 200 koy ve yeniden dene.
16F877 veya benzeri bir işlemci kullandığın belli oluyor. Ancak A portu , B portu ile ilgili hiçbir komut yok. Kullanmasanda komutlarını koyman gerekir.
Analog pinler iptal edilmemiş. Gerekmesede iptal etmen gerekir. Ne bileyim 16F877A ise CMCON=7 komutuda olması gerekir.
Program yazım kurallarına uymanız gerekir.  Değilse hata çıkınca ordamı burdamı diye arayıp durursun.
İşlemci kristal frekansı da program içinde yer almalıdır. (Define OSC 4 gibi)


Ete

karbal656


LCDOUT $FE,1
LCDOUT $FE,2,"BEKLE"
LCDOUT $FE, $C0, "ACILIYOR"
PAUS 2000 ' Buraya gecikme ekle
sayi=0
dongu:

serin portc.7,T2400, sayi
lcdout $fe,1
LCDOUT $FE,2,#sayi


goto dongu
end

"Bekle", "Açılıyor" yazılarından sonra gecikme koyman gerek çünkü hemen aşağıda LCD silme komutu koymuşsun.

dogus

aşağıdaki satırları include satırının hemen sonrasına ekledim ama hala resetsiz ilk görüntü gelmiyor, ilk satırdaki bütün hücreler siyah kareler şeklinde gözüküyor, resete bastığım anda görüntü geliyor


trisd=0
trisa=0
trisb=0
trise=0
portb=0
porta=0
porte=0
CMCON=7
DEFINE OSC 4

ELZEMEFE

PIC16F877  için ADOCN1=7
PIC16F628  İÇİN CMCON=7 olacak gözden kaçtı sanırım

dogus

evet değiştirdim adcon1=7 yaptım ama hala aynı

MS_59

#6
merhaba bunu bi deneyebilirmisin lcd'nin rw pinini direk gnd'ye bağla
@ DEVICE pic16f877A, XT_OSC
@ DEVICE pic16f877A, WDT_OFF
@ DEVICE pic16f877A, PWRT_ON
@ DEVICE pic16f877A, BOD_OFF
@ DEVICE pic16f877A, LVP_OFF
@ DEVICE pic16f877A, CPD_OFF
@ DEVICE pic16f877A, PROTECT_OFF
DEFINE OSC 4
include "modedefs.bas"
TRISA=0
TRISB=0
TRISC=128
TRISD=0
TRISE=0
PORTA=0
PORTB=0
PORTC=0
PORTD=0
PORTE=0
ADCON1=7
SAYI var byte
DEFINE LCD_DREG PORTD
DEFINE LCD_DBIT 0
DEFINE LCD_EREG PORTD
DEFINE LCD_EBIT 5
DEFINE LCD_RSREG PORTD
DEFINE LCD_RSBIT 4
DEFINE LCD_BITS 4
DEFINE LCD_LINES 2
pause 200
LCDOUT $FE,1,"BEKLE"
LCDOUT $FE,$C0,"ACILIYOR"
PAUSE 1000
LCDOUT $FE,1
SAYI=0

BASLA:
serin portc.7,T2400,["MEMO"],SAYI
LCDOUT $FE,2,DEC3 SAYI
goto BASLA
mehmet

ete

PortD.6=0 komutunu bir yere eklemen gerekiyor. Tercihen basla satırından önce ve özellikle lcdout komutlarını vermeden önce vermen uygun olur. Yada r/w pinini direk gnd ye bağlaman da sorunu çözebilir.
Ete

Powered by EzPortal