Haberler:

Forum kuralları güncellendi LÜTFEN  okuyunuz:  https://bit.ly/2IjR3ME

Ana Menü

2*16 lcd

Başlatan x-tol, 28 Ağustos 2007, 17:34:45

x-tol

MERHABA

Lcd kullanimini ögrenmek için pic assembly ile 2*16 lcd'ye yazi yazdirmaya çalisiyorum.
bir kitaptan su kodlari buldum.mplabda yazdim, derledim sorun yoktu.
fakat simülasyonda devreyi kurdugumda lcd ekrana hiçbirsey yazmiyor.
sebebi ne olabilir? kodlarda bir eksiklik mi var? yoksa benim isiste'mi problem var.
bunu ögrenmek için basit bir lcd programi olmasi lazim elinde olan varsa gönderirse sevinirim.

LIST	P=16f84
		INCLUDE	"P16F84.INC"
		CLRF	PORTB			;PORTB SIFIR
		BSF		STATUS, 5 		;BANK1'E GEÇ
		CLRF	TRISB			;PORTB	ÇIKIS
		MOVLW	H'FF'
		MOVWF	TRISA
		BCF		STATUS, 5		;BANK 0'A GEÇ
		
AL		EQU		H'0C'
AH		EQU		H'0D'
BL		EQU		H'0E'
BH		EQU		H'F'
BASLA
		MOVLW	H'A3'
		MOVWF	AL
		MOVLW	H'61'
		MOVWF	AH     	list	p=16f684
		INCLUDE	"P16F84.INC"
K		EQU		0x10
CNTL	EQU		0x11
CNTH	EQU		0x12
CX		EQU		0x13
VERICNT	EQU		0x14
RS		EQU		0x02
RW		EQU		0x00
EN		EQU		0x00
PC		EQU		0x02
		ORG		0x00
BASLA
		CLRWDT
		CALL	initiaL
		CALL	LCD_RESET
		CALL	clear
		CALL	two_line
		CALL	display_on
		CALL	cursor_inc
		CALL	clear
		CALL	mesaj
TEKRAR	GOTO	TEKRAR
initial
		MOVLW	0x00
		Tris	PORTB
		MOVLW	0x00
		TRIS	PORTA
		CLRF	vericnt
		RETURN
clear
		CALL	timer_low
		movlw	0x03
		MOVWF	PORTB
		BCF		PORTA,RS
		BCF		PORTA,RW
		BSF		PORTA,EN
		NOP
		BCF		PORTA,EN
		RETURN
LCD_RESET
		MOVLW	0x03
		MOVWF	cx
nexti	CALL	timer_low
		BCF		PORTA,RS
		BCF		PORTA,RW
		MOVLW	0x30
		MOVWF	PORTB
		BSF		PORTA,EN
		NOP
		BCF		PORTA,EN
		DECFSZ	cx,1
		GOTO	nexti
		RETURN
two_line
		call	timer_low
		movlw	0x38
		movwf	PORTB
		bcf		PORTA,RS
		BCF		PORTA,RW
		BSF		PORTA,EN
		NOP
		BCF		PORTA,EN
		RETURN
cursor_inc
		call	timer_low
		movlw	0x06
		movwf	PORTB
		bcf		PORTA,RS
		bcf		PORTA,RW
		bsf		PORTA,EN
		nop
		bcf		PORTA,EN
		return
display_on
		call	timer_low
		movlw	0x06
		movwf	PORTB
		bcf		PORTA,RS
		BCF		PORTA,RW
		BCF		PORTA,RW
		BSF		PORTA,EN
		NOP
		BCF		PORTA,EN
		RETURN
mesaj
mnext	CALL	timer_low
		BSF		PORTA,RS
		BCF		PORTA,RW
		MOVF	vericnt,0
		CALL	mesaj_verisi
		iorlw	0
		BZ		mend
		movwf	PORTB
		incf	vericnt,1
		BSF		PORTA,EN
		NOP
		BCF		PORTA,EN
		GOTO	mnext
mend	return
mesaj_verisi
		addwf	pc,1
		retlw	"M"
		retlw	"E"
		retlw	"R"
		retlw	"H"
		retlw	"A"
		retlw	"B"
		retlw	"A"
		retlw	""
		retlw	"D"
		retlw	"U"
		retlw	"N"
		retlw	"Y"
		retlw	"A"
		retlw	0
timer_low
		movlw	0xB0
		movwf	cnth
next2
		movlw	0xff
		movwf	cntl
next1	decfsz	cntl,F
		goto	next1
		decfsz	cnth,F
		goto	next2
		return
		end
		MOVLW	H'E0'
		MOVWF	BL
		MOVLW	H'2E'
		MOVWF	BH
TOPLA
		MOVF	AL, W
		ADDWF	BL, F
		BTFSC	STATUS, 0
		INCF	BH, F
		MOVF	AH, W
		ADDWF	BH, F
ALT_BYTE_GOSTER
		MOVF	BL, W
		MOVWF	PORTB
TEST_A1
		BTFSC	PORTA, 1
		GOTO	TEST_A1
UST_BYTE_GOSTER
		MOVF	BH, W
		MOVWF	PORTB
DONGU
		GOTO	DONGU
		END

Prof.EleCTroN

Kodları fazla incelemedim fakat programda 2 tane end olduğunu farketttim. Assembler hata vermiyor mu?

mustafa_cmbz



devre şemanda lcd nın ayağının resimde gördüğün ucunun toprak bağlantısının olup olmadığını kontrol et...eğer sadece yazma ve okuma yapıyorsa bu topraklama işlemını programdan yap...ama sadece lcd ye yazı yazıcam diyorsan bu uç devamlı toprakta kalsın sanada 1pin tasarruf edersin...

XX_CİHAN_XX

Aşağıya benim kullandığım 4bit lcd programını upload ettim.
isis dosyasınıda koydum.Program asm de yazıldı 4mhz ye göre ayarladım delay_ms in orada delay_data ya.3 değeri yükleniyor bu değeri .15 e çıkartırsan 20mhz de kullanabilirsin ;)

http://www.4shared.com/file/23054021/2084d5a6/4_bit_lcd_ornek.html

Kolay gelsin...
Yirmi yaşındaki bir insan, dünyayı değiştirmek ister . Yetmiş yaşına gelince , yine dünyayı değiştirmek ister, ama yapamayacağını bilir.

erkan614

şu sıralar bende de böyle bi sorun vardı
be f84 yerine f628 kullanarak olayı çözdüm iki denetleyicidede aynı program olmasına rağmen 628 ile çalışıo 84 ile çalışmıo tabi ikisininde isiste sağlıklı çalıştığını denedim

XX_CİHAN_XX

Yukarıda upload ettiğim dosya isistede gerçektede çalışmaktadır.

Ancak şunu eklemek istiyorum isiste zaman kavramı tamamiyle pc ortamına bağlıdır.Yani gerçek hayatla birebir olması mümkün değildir.Aynı şekilde parazitik etkiler boşta kalan uçlar vs.. pc ortamında hiç bir problem teşkil etmezken gerçek ortamda bunlar sorun olmaktadır.İşte bu gibi nedenlerden dolayı devrelerimiz isiste çalışıp gerçekte çalışmayabilir.Böyle durumlarda ilk iş olarak programda kullandığınız zaman gecikmelerini kontrol edin.
@erkan muhtemelen sendede lcd ye veri gönderme zamanları ile ilgili kritik bir durum vardı ve bu ufak farklılık 2 ayrı pic modelinde böyle bir duruma sebep oldu yoksa normalde programın doğru ise her iki pictede sorunsuz çalışmalıdır.Bu zaman gecikmelerini rastgele değil kullandığımız lcd nin datasheet lerine bakarak kullanırsak yazdığımız programlar hangi pic takarsan tak çalışır :)
Yirmi yaşındaki bir insan, dünyayı değiştirmek ister . Yetmiş yaşına gelince , yine dünyayı değiştirmek ister, ama yapamayacağını bilir.