lcd bu kadar mı zor çalışır...

Başlatan fryrmnd, 30 Mayıs 2011, 19:12:39

fryrmnd

çalıştığım yerde 4x20 lcd almışlar... 16F877A ve 16F84A için denedim ama sonuç yok...

define LCD_DREG PORTD
define LCD_DBIT 4
define LCD_EREG PORTD
define LCD_EBIT 3
define LCD_RSREG PORTD
define LCD_RSBIT 2

ADCON1=7

PORTA=0
PORTB=0
PORTC=0
PORTD=0
PORTE=0
TRISA=0
TRISB=0
TRISC=0
TRISD=0
TRISE=0

LCDOUT $FE,1
PAUSE 300

BASLA:
   LCDOUT $FE,2,"A"
   GOTO BASLA
şöle bi kod yazdım 877a için acaba yanlışlık varmı... vo ya pot da bağladım toprağa da verdim ,w/r yi toprağa bağladım yok... siyah kareler çıkıyo başka bişey yok... ilk denememde bi ara yanlış vermiştim sanırım beselem veya arka plan ışığını... arka plan yanıyo siyah kareler de çıkıyo... bu şekilde de bozulmuş olablirmi...   

Mucit23

Programda birçok hatan var. Bunlardan 1. si lcd tanımlamaların eksik

LCD nin kaç satır olduğunu ve lcd kaç bit olarak bağlandığını pice bildirmen gerek. Bunun için lcd tanımlama bölümüne aşağıdaki kodlarıda ekle

DEFINE LCD_BITS   4 'lcd nin 4 bit bağlandığını düşünüyorum, eğer 8 bit bağlı ise buraya 8 yaz
DEFINE LCD_LINES   4 'lcd 4 satır olduğu için 4 yazıyoruz. burası satır sayısını belirtiyor.

Ayrıca lcd ye veri göndermeden önce lcd nin açılması için gecikme koymalısın. Sen bunu kısmen yapmışsın fakat ilk önce ekranı silip sonra bekleme yapmışsın. Lcd açılmadan ekrana herhangi bir veri gönderilmemelidir.
Bu yüzden aşağıdaki gibi yapmalısın

PAUSE 300
LCDOUT $FE,1

son olarak ekrana veri yazarken lcd ekranın satır ve sütüb adreslerini bilmen senin için iyi olur. LCD ekranın satır ve sütün adresleri şöyledir.

1. satır $80 'dan başlar. Bu 1. sütündur.
Diğer sütün adresleri ise $81-82-83-84-85-86-87-88-89-8A-8B-8C-8D-8E-8F-90-91-92-93 şeklindedir.
2. satır $c0  'dan başlar. Bu 1. sütündur.
Diğer sütün adresleri ise $C1-C2-C3-C4-C5-C6-C7-C8-C9-CA-CB-CC-CD-CE-CF-D0-D1-D2-D3 şeklindedir.
3. satır $94 'den başlar. Bu 1. sütündur.
Diğer sütün adresleri ise $95-96-97-99-99-9A-9B-9C-9D-9E-9F-A0-A1-A2-A3-A4-A5-A6-A7 şeklindedir.
4. satır $D4 'den başlar. Bu 1. sütündur.
Diğer sütün adresleri ise $D5-D6-D7-D8-D9-DA-DB-DC-DD-DE-DF-E0-E1-E2-E3-E4-E5-E6-E7 şeklindedir.

Adres satır formatları yukarıdaki gibidir.
Diyelim 1. satır 1. sütüna "A" harfi yazmak istersen LCDOUT $FE,$80,"A" yazman yeterlidir.
Veya 3. satır 10. sütündan itibaren Mucit23 yazmak için LCDOUT $FE,$9D,"Mucit23" komutu yeterlidir.
Umarım anlatabilmişimdir.


fryrmnd

teşekkürler mucit kardeşim... satır sütun adreslerini biliyorum... lcdnin kaç satır çalışıtğın yazmadan proteus ta çalışıyodu... ama denerken kaç satır olludğunu,,, hangi satır sütuna yzacağını da sanırım denedim ama emin değilim o kadar çok değiştirip denedim ki...  yarın bir daha yazdıklarına dikkat ederek deneyeyim...
  bu arada su an spi eeprom deniyom bi kodum var ama çalışmadı acaba bişeyler söyleyebilirmisin
  define LCD_DREG PORTD
define LCD_DBIT 4
define LCD_EREG PORTD
define LCD_EBIT 3
define LCD_RSREG PORTD
define LCD_RSBIT 2

ADCON1=7
SSPEN VAR SSPCON.5
CKP VAR SSPCON.4
SMP VAR SSPSTAT.7
CKE VAR SSPSTAT.6
SSPIF VAR PIR1.3
CS VAR PORTD.1

TRISC=%00010000
TRISD=0
A VAR BYTE
b var byte
SMP=0
CKP=0
CKE=0
SSPIF=0
SSPEN=1

basla:
LOW CS
SSPBUF=$03    'okuma  komutu
GOSUB LETCLEAR
SSPBUF=$01    'okunacak adres
GOSUB LETCLEAR
A=SSPBUF
high cs
GOSUB LETCLEAR


LCDOUT $FE,2,str a

goto basla


LETCLEAR:       ' buffer temizlemek için... melabs spislave-masterdan alıntı
IF SSPIF=0 THEN LETCLEAR
PAUSEUS 25
SSPIF=0
RETURN
END

fryrmnd

spi eepromun wp ve hold bacaklarını VCC ye verdim... cs kodda gözüktüğü gibi D.1 de... proteusta çalıştırdığımda SCK bacağında clock göremiyorumm acaba neden olabilir

fryrmnd

lcdout $fe,2,A STR    kodum yanlış olabilir...

  şunu da denedim  lcdout $fe,2,DEC A.0
                gene sonuç yok

fryrmnd

herkese teşekkürler... işyerinde eski bir 2x16 vardı... yeni lcd yi bozmuşum galiba :) eskiyi deneyim dedim son bi umut... çalıştı şükür... ilk denemelerde borda  adam gibi planlı yerleştirme yapmayınca böle tırmalayıp duruyon işte...