Seri Porttan Lcd ye

Başlatan barishlee, 25 Şubat 2006, 11:35:45

barishlee

Arkadaşlar Merhaba;
Proteus ta Virtual terminal den gönderdiğim yazının aynen 4X20 lik lcd de yazmasını istiyorum.
Şema falan herşey ok. Ama gelgelelim kodta bir yanlışlık var.
Şöyleki ;
SERIN ile seri porttan aldığım değeri bi değişkene atadım
ve LCDOUT ile bu değişkeni lcd ye yolladım. Fakat bir türlü lcd ekranından çıktı alamıyorum.
LCDOUT $fe,$c0,değişken şeklinde gönderiyorum ve bu işlemi devamlı tekrarlattırıyorum. $C0 2. satırın ilk başı olduğu için sırayla yazmak yerine karakteri silip yeni karekteri yazıyor.
Bu sorunu nasıl çözebilirim. Proteus içinde serial lcd ile yapılmış olan bir örnek var. ama pek birşey anlayamadım.

x_tra06

https://www.picproje.org/index.php/topic,7364&highlight=seri+lcd+picbasic+pro

bu adreste lcdout ile ilgili bir kaç örnek verilmis bir incele isine yarar
------------------------------------------------ Kainat ne kadar düzenli ve güzel değilmi? Nereden geldiğimizi gerçekten hiç dünündünüz mü? ------------------------------------------------

ftsahin

Kodun LCD ile ilgili kısmını buraya yazarsan hem sorun anlaşılır hem de çözüm bulması kolay olur.

seco06

Evet arkadaş haklı kod olmadan hiçbir cevap verilemezki  :roll:

barishlee

Arkadaşlar tekrar merhabalar;
kod şu şekilde:
led var word
basla
serin porta.0,16780,#led
lcdout $fe,$c0,#led
goto basla
end
şu an internet cafeden yazdığım için kodların tam dizilimi aklımda değil. yani kullanılan # işareti yanlış yere falan koymuş olabilirim:)
ama şunu farkettim benim kurduğum döngüde lcdout $fe,$c0,#led satırı zaten her seferinde ekranın $c0 satırından başladığı için karekterleri siliyor. yani karekterler sıra sıra yazmaktansa silinip o an için hangisine basıldıysa o yazıyor.
Ama başka türlü nasıl olabilir bunu bilmiyorum.

ftsahin

led var word 
basla 
  serin porta.0,16780,led 
  if led<>0 then
    lcdout $fe,$10
    lcdout $fe,$14,#led
  endif
goto basla 
end


Daha önceki kodda Lcdout komutu devamlı çalıştığı için seri porttan bilgi gelmediği zaman led'in içeriğini boş yazmış olabilir. Bu kodla sadece seri porttan bilgi geldiği zaman ekrana yazar.  Aynı zamanda son karakterin yanına yazar. Ama kursor sona geldiği zaman yazılar görünmez. Bunun için başa dönmesini veya tüm yazının kaydırılmasını özellikle belirtmen gerek.

barishlee

FTSAHİN ÖNCELİKLE VERDİĞİN BİLGİ İÇİN TEŞEKKÜRLER;
SÖYLEDİĞİN ŞEKİLDE BİR KOD YAZDIM FAKAT LCD EKRANDAN HİÇBİR VERİ ALAMADIM.
KULLANDIĞIM İŞLEMCİ 16F877
LCD PORTLARIM PORTD, SERIN İÇİN İSE PORTB.0 I KULLANIYORUM.
BUNLARDAN DOLAYI BİR PTOBLEM OLUR MU?

Lütfi AYYILDIZ

Sana örnek bir program vereyim gönderdiğin karakterler lcd ekranda tek tek yazılıyor. Bi önceki karakter silinmeden sırayla ,ekran dolduğunda tekrar baştan devam ediyor.
include "modedefs.bas"
GIRIS VAR PORTB.0
d var byte
a0 var byte
d=$80
rx:
SerIn2 GIRIS,84,[a0]
if d=$d0 then
pause 10
lcdout $fe,1
d=$80
endif
PAUSE 10
LCDOUT $FE,d,a0
PAUSE 10
d=d+1
if d=$90 then
d=$c0
endif
goto rx
end

9600 baud 8n1 formatında Virtual terminalde RTS ve CTS yi kısa devre et yazdığın yazıyı terminaldede görmek istiyorsan TX ve RX hattınıda kısadevre yap.
Bunu hayata geçirmek istiyorsan 4Mhz kristal ile 84 yerine 16780 yaz ve hyper terminali 2400 8n1 formatında yap