LCD ekranın ikinci satırına nasıl yazarız ?

Başlatan teketek, 15 Nisan 2006, 22:58:01

teketek

Arkadaşlar elimde 2x16 LCD var ve bunu Pic16F84' sürüyorum.Pic Assembly kodları ile ekrana yazı yazdırmayı başardım ama bi kaç sorum olacak.

1.LCD'nin ikinci satırına yazdıramıyorum.Bunu nasıl yapabilirim?

2.LCD nin birinci satırına yazdığım yazı da harf harf çıkıyor.yani mesela "deneme" yazdırmak istiyorsam önce "d" harfi sonra "e" sonra "n" ve devamı.Ben bu yazıyı ekrana topluca getirmek ve sonra yok etmek istiyorum.Burdaki sorun kullandığım gecikme döngüsü olabilir mi acaba? Gecikme döngüsündeki süreyi kısalttım biraz düzelir gibi oldu ama yine de istediğim gibi olmadı.Sizce bunu nasıl yapabilirim??
Bilgi fark yaratır..

Klein

hocam gecikmeniz halen yüksek sanırım.

lord

datasheetleri dikkatli bir şekilde okuyalım mutlaka orada yaziyordur...

Klein

1. satırın başlangıç adresi  0x80
2.            ||                     0xC0
3.            ||                     0x94
4.            ||                     0xD4

cursor'un 2. satırın başına konumlanması için LCD'ye komut olarak

0xC0 göndermelisin. eğer ikinci satır 3. sütun istersen 0xC0+3 = 0xC3 göndermelisin.

Kolay gelsin.

Bilmeyenler için not. Aslında 2 ya da 4 satır diye bi kavram tam olarak yok. Dizi 80 satırlık tek bir dizi. Ama üretici LCD ye yerleştirirken ,
0. adresten başlıyor. 19 a kadar. 3. satır da dikkat ederseniz 20 den başlar. 39 a kadar gider. 2. satır 40-59 , 4. satır 60-79 a kadar gider.

arslan74

Ben mesela burda bana kolaylık olsun diye şöle bir şeyler yaptım.

;===============================================0
;	LCD KARAKTER ADRESLERİ
;===============================================0

S1_1	EQU		H'80'
S1_2	EQU		H'81'
S1_3	EQU		H'82'
S1_4	EQU		H'83'
S1_5	EQU		H'84'
S1_6	EQU		H'85'
S1_7	EQU		H'86'
S1_8	EQU		H'87'
S1_9	EQU		H'88'
S1_10	EQU		H'89'
S1_11	EQU		H'8A'
S1_12	EQU		H'8B'
S1_13	EQU		H'8C'
S1_14	EQU		H'8D'
S1_15	EQU		H'8E'
S1_16	EQU		H'8F'

;------------------------------------------------

S2_1	EQU		H'C0'
S2_2	EQU		H'C1'
S2_3	EQU		H'C2'
S2_4	EQU		H'C3'
S2_5	EQU		H'C4'
S2_6	EQU		H'C5'
S2_7	EQU		H'C6'
S2_8	EQU		H'C7'
S2_9	EQU		H'C8'
S2_10	EQU		H'C9'
S2_11	EQU		H'CA'
S2_12	EQU		H'CB'
S2_13	EQU		H'CC'
S2_14	EQU		H'CD'
S2_15	EQU		H'CE'
S2_16	EQU		H'CF'

;===============================================0


burada ikinci satıra gecmek istediğimde kod numarasını aklımda tutmam germiyor.
 Mesela 2.satırın 4.sütüna 1 değerini yazdırmak için.   LCDint'e S2_4 değerini sonra LCDdataya '1' geciyorum.

örnek kod:
movlw	S2_4		; start LCD line 2 address
				call	LCDins     ; write it to the LCD

				MOVLW	'1'
				call	LCDdata	; send character to display

Böylelikle daha anlaşılır kodlar oluşuyor.

bsivgin

Aşağıdaki örneği inceleyebilirsin;

http://www.diyot.com/makro.html

Saygılarımla
Bülent ŞIVGIN

teketek

@Klein
@arslan74
@bsivgin

cevaplarınız için teşekkürler.

bu arada bülent bey www.diyot.com/makro.html deki dökümanınızı inceledim ama orda bahsettiğiniz gibi .inc uzantılı dosyaları kopyalamamız gereken yer olan  "C:\Program Files\Microchip\MPASM Suite" klasörü bende yok.yani C'nin içinde Microchip klasörü ve dolayısıyla MPASM Suite yok :(

MPLAB 5.4 kullanıyorum ve yeri şöyle"C:\Program Files\MPLAB".Bu yüzden makroları MPLAB'ın içerisinde .inc dosyalarının olduğu dizine attım ancak mplab dosyayı derleyemedi.

Bunun üzerine "C:\Program Files" içerisine "Microchip" ve "MPASM Suite"klasörlerini kendim oluşturdum ve .inc dosyalarını oraya attım.Fakat gene derleyemedim.

Sizce ne yapmalıyım?
Bilgi fark yaratır..

bsivgin

Mplab'ın yeni versiyonunu internetten indirip onu kurun

MICROCEBEL

1. satır H'80' adresinden başlar.
2.satır H'90'
Satır ve sütun atlatan lcd üzerindeki ram DDRAM dir.LCD de satır atlatacağın zaman LCD yi komut okuma moduna al yani RS ucu lojik sıfır olsun.Daha sonra 2. satır kodunu gönderdiğinde kursörün 2. satıra geçtiğini göreceksin.Sana bi örnek vereyim 1. ve 2. satır için.1ci satırı DDRAM1 olarak,2.satırıda DDRAM 2 olarak örnek veriyorum.
----------------------------------------------------------------------------------
DDRAM1
   ----------      MOVLW      H'80'
   ----------      MOVWF      PORTB
   ----------      BCF      EN
   ----------      CALL      GECIKME
   ----------      BSF      EN
   ----------      RETURN
DDRAM2
   ----------      MOVLW      H'C0'
   ----------      MOVWF      PORTB
   ----------      BCF      EN
   ----------      CALL      GECIKME
   ----------      BSF      EN
   ----------      RETURN
-----------------------------------------------------------------------------------
Kardeş bu gecikmeyide LCD nin pdf dosyasına göre yapabilirsin.Ama en iyisi LCD nin BusyFlag'ını kullanmak.LCD için 2 gecikme kullanmalısın.
1.si Komut işleme süresi için.Örneğin;

GECIKME
   ----------      MOVLW      H'AA'
   ----------      MOVWF      SAYAC1
DONGU1
   ----------      MOVLW      H'AA'
   ----------      MOVWF      SAYAC2
DONGU2
   ----------      DECFSZ      SAYAC2,F
   ----------      GOTO      DONGU2
   ----------      DECFSZ      SAYAC1,F
   ----------      GOTO      DONGU1
   ----------      RETURN
-----------------------------------------------------------------------------------
2.si de LCD ye karakter göndeririken EN ucunu lojik sıfıra çekip belli bir süre sonra tekrar lojik 1 e çekiğimiz gecikmede.Örneğin.

GECIKME
        ----------               MOVLW           H'0F'
        ----------               MOVWF           SAYAC1
DONGU
        ----------               DECFSZ          SAYAC1,F
        ----------               GOTO             DONGU
        ----------               RETURN
-----------------------------------------------------------------------------------
Bu örnekler sana verebileceğim en kolay örneklerdi.Kolay gelsin,çalışmalarında başarılar....

supermakarna

Arkadaşlar bu LCD nin kataloğunu inceledim zamanlama olarak sadece Enable etmek için 450ns gerekiyo demiş. Ama  bu benim için yeterli değil
komutu nekadar zamanda işliyo, karakteri nekadar zamanda yazıyo veya Ekranı tamamen nekadar zamanda siliyo gibi bilgilere nerden edinebilirim?

Veli B.

HD44780 genelde kabul edilen standartları koymuş durumda olan chip.Diğer üreticiler, bu chipi temel alarak, buna uyumlu ürün çıkarıyor.
İstediğiniz bilgilerin tamamı ve daha fazlası veri yapraklarında(datasheet) mevcut.
Bende ki veri yaprağı 60 sayfa ve 25.sayfadan itibaren zamanlama bilgilerini veriyor.

supermakarna

elindeki datasheti uplaod edebilirmisin bendeki sadece 1 sayfa


supermakarna

Katana Teşekkür ederim

anladıgım kadarıyla LCDnin ramine yazmak ve kot işlemek 37mikrosaniye
kursörü en başa almak 1.5msn burda 37mikrasaniyelik kısım çok hızlı geldi bana acaba uygulamada bu değer tutuyomu

Veli B.

iki satır lcd için zamanlama da o kadar hassas bir işim olmadı. Dolayısıyla hiç ölçme ihtiyacı hissetmedim :) Hatta genelde BF yi bile değerlendirmem.