4x16 lcd'nin noktalarını kontrol etmek

Başlatan ONURKESKIN, 13 Mart 2008, 15:13:06

ONURKESKIN

Böyle bir lcd'nin noktalarını kontrol edebilir miyiz? Ekranda kendi sembollarimi çıkartmak istiyorum: çöp adam gibi
eğer böyle bir imkan varsa yardımcı olabilir misiniz?
Saygılar...

mcguiverali

erol bey derslerinde bu konuya yeterince yer vermişti şimdi onun derslerinden bir alıntıyla konuyu veriyorum;


LCD lerde 8 adet yeni karakter yaratmamıza izin verilir. Karakterler 5 x 7 formatında oluşturulur ve 8 adet data halinde özel karakter hafızasına yerleştirilirler. Normalde LCD de Türkçe karakterlerin olmadığını biliyorsunuz. İşte bu karakterleri toplam 8 adet olmak şartı ile kendimiz oluşturup kullanabiliriz.
Önce özel karakter hafıza adreslerini verelim sonra karakterlerin nasıl yaratıldığını açıklayalım.
LCD de 1 . karaktere ait adresin başlangıcı $40 dır. Bu adresten itibaren sırası ile 8 adet adrese 8 bitlik karakter dataları yerleştirilir ise bu karakterin numarası 0 (sıfır) olur ve datalara bağlı olarak yeni karakter ekranda gösterilir.
LCD de 2. karakter hafızası  $48, üçüncü $50, dördüncü $58, beşinci $60, altıncı $68,
yedinci $70 ve sonuncu da $78 adresinde yer almaktadır. Oluşturulacak karakterler soldan sağa 5 ve yukardan aşağıya 7 olmak üzere 5X7 matriks te oluşturulmaktadır. Son data (8.ci) daima sıfırdır.

Şimdi ilk Türkçe karakterimizi oluşturalım. Oluşturacağımız karakter Ö harfi olacaktır. Önce kendimize 5 x 7 ebadında bir matriks çizelim. Çizdiğimiz matriks içine ü harfini oluşturacak şekilde Kareleri kapatalım veya açalım. Sonuçta aşağıdaki sisteme göre dataların değerlerini satır satır hesaplayalım.




Görüldüğü gibi 1 olan bitlere karşılık gelen bit değerleri soldan sağa doğru toplanarak o sıraya ait data elde edilmektedir. İşte ilk sıradaki Binary değeri olan %10001 değeri nin Desimal karşılığı için 16 + 1 değerleri toplanarak 17 değeri bulunmaktadır.

İşte bu şekilde elde edilen datalar daha sonra programın başında bir yerde LCD ye verilir. Nasıl mı şöyle;
LCDOUT $FE,$40,0,17,0,17,17,17,31,0  
Böylece sıfır nolu karakteri oluşturmuş oluyoruz. Data adedinin 8 adet olmasına dikkat ediniz. Son data daima sıfır olmalı.
Düşünmeden öğrenmek beyhude, öğrenmeden düşünmek, tehlikelidir.....

mcguiverali

http://rapidshare.com/files/99245544/PicMultiCalc.rar.html

Bu pro ile butun söylenenleri otomatik yapabilirsin sadece deseni ciz altta kodu sana hazır olarak veriyor sonrası kopi peyst  ;) ..
Düşünmeden öğrenmek beyhude, öğrenmeden düşünmek, tehlikelidir.....

ONURKESKIN

Yardım için teşekkür ederim ama ben çöp adam çizdim ve çıkartamadım program şu kodu verdi: $04, $0A, $0A, $04, $1F, $04, $0A, $11
ben bunu lcdout $fe,$c0,$04, $0A, $0A, $04, $1F, $04, $0A, $11 yapıyorum ekranda hiçbirşey çıkmıyor. acaba nerede yanlıklık yapıyorum.
Saygılar...

mcguiverali

LCD lerde 8 adet yeni karakter yaratmamıza izin verilir. Karakterler 5 x 7 formatında oluşturulur ve 8 adet data halinde özel karakter hafızasına yerleştirilirler.LCD de 1 . karaktere ait adresin başlangıcı $40 dır,
LCD de 2. karakter hafızası $48,üçüncü $50,dördüncü $58, beşinci $60, altıncı $68, yedinci $70 ve sonuncu da $78
--------------------------------------
yani senin 0. karakterin çöp adam olsun ve sen bunu LCD ye şu şekilde tanıtmalı;($40 senin 0. karakterini tanımlıyor)

lcdout $fe,$40,$04, $0A, $0A, $04, $1F, $04, $0A, $11,$00

şu şekildede yazacagın yere yerleştirmelisin;("0" senin çöp adam karakterin oldu ve artık herhangi bi sabit gibi kullanılablir en basitinden )

lcdout 0
Düşünmeden öğrenmek beyhude, öğrenmeden düşünmek, tehlikelidir.....

ONURKESKIN

dediklerinizi yapıyorum mantıklı bencede ama ekranda çöp adam çıkmıyor nedenini anlamadım ben 4x16 kullanıyorum onun 1. satırının 1. sutununu kontrol eden komut $80 ben bunuda sizin yaptığınızıda denedim ama olmadı çıkmıyor çöp adam nerede yanlışlık yapıyorum acaba

mcguiverali



2x16 lcd de buradanda görüldüğü gibi rahatlıkla calışıyor..
aklıma gelen olası sorunlar;

* LCD yi düzgün baglamamışsındır
* default defıne komutlarına uymayan aykırı bir baglantı yapmış olabilirsin
* 4x16 LCD nin özel karakter tanıtma adreslerini yanlış biliyor olabilirsin
*LCD düzgün bagglanmış olabillir fakat komutların lcdye veri yollanmasını engelliyor olabilir..
Düşünmeden öğrenmek beyhude, öğrenmeden düşünmek, tehlikelidir.....

ONURKESKIN

teşekkür ederim sanırım bende bir sorun var siz gayet güzel çalıştırmışsınız çok yardımcı oldunuz tekrar teşekkür ederim

ONURKESKIN

tekrar tekrar deniyorum ama olmadı bakın bu denemek için yazdığım program :

pause 500
loop:
lcdout $fe,1
lcdout $fe,$40,$04, $0A, $0A, $04, $1F, $04, $0A, $11,$00
pause 500
goto loop

buda devre şeması:
http://img528.imageshack.us/img528/4784/adszay7.jpg
hala nerede yanlışlık yapıyorum anlamadım birde bu çöp adam gibi toplam 8 adet mi karakter çıkartabiliyorum.

mcguiverali

Alıntı yapılan: "ONURKESKIN"
lcdout $fe,$40,$04, $0A, $0A, $04, $1F, $04, $0A, $11,$00
Burda karakteri tanımlamışsınız fakat nerede yazdırıyorsunuz
yazırabilmeniz için bi LCDOUT komutu daha vermeniz gerekli örn;
LCDOUT 0(0. karakter burda $40 ile oluşturdugunuz karaktere denk gelir)
eve toplam 8 karakterlik boş yer bulundurur..(0,1,..,6,7)
Düşünmeden öğrenmek beyhude, öğrenmeden düşünmek, tehlikelidir.....

ONURKESKIN

peki teşekkür ederim bana çok kısa bir çöp adam çıkartmak için yazılımı yazarmısınız
Saygılar

mcguiverali

DEFINE LCD_DREG    PORTA
DEFINE LCD_DBIT    0
DEFINE LCD_RSREG   PORTA
DEFINE LCD_RSBIT   4
DEFINE LCD_EREG    PORTB
DEFINE LCD_EBIT    3
DEFINE LCD_BITS    4
DEFINE LCD_LINES   4
lcdout $fe,$40,$04, $0A, $0A, $04, $1F, $04, $0A, $11,$00
dongu:

LCDOUT $FE, 1  
lcdout 0

goto dongu
-----------------------------------------------------------------------
Bu şekilde çalışması lazım..Sizde bilirsinizki elektronik yapılan hataların düzeltilmesiyle öğrenilen bi daldır dolayısıyla size yardım gibi görünen bu hareketim aslında öyle değildir..lütfen bu cümlelerimi küstahlık olarak algılamayın benim en iyi bildigim konular kendi kendime zorlanarak öğrendiğim konulardır..
Düşünmeden öğrenmek beyhude, öğrenmeden düşünmek, tehlikelidir.....

ONURKESKIN

tabiki haklısınız size katılıyorum ama denedim defalarca olmayınca yardım istedim teşekkür ederim konu ile ilgilendiğiniz için bilgi paylaştıkça değer kazanır ve çoğalır.
Saygılar...

frederic