avatar_ete

Pic Basic Ders-03 (LCD Kullanımı ve Özel Karekter Tanımlama)

Başlatan ete, 24 Kasım 2013, 23:21:23

Hattuşa

hocam tşk ederim her zamanki gibi imdadıma yetiştiniz, ALLAH cc işinizi rast getirsin

cemilsivas

S.A. Hocam. İki gündür lcd ekrana yazı yazdırmaya uğraşıyorum. En sonunda yazdırdım. Ama birşey farkettim.
Başlangıç pinini 4 yapıp pinleri d4-b4, d5-b5,d6-b6,d7-b7 şeklinde bağladığımda ekrana görüntü gelmiyor.
Başlangıç pinini 0 yapıp pinler d4-b0,d5-b1,d6-b2,d7-b3 şeklinde bağladığımda ekrandan görüntü alabiliyorum.
Bunun sebebi ne olabilir?



DEFINE LCD_DREG PORTB
DEFINE LCD_DBIT 0 'Burası 4 olursa A portu da olsa görüntü basamıyorum.
DEFINE LCD_EREG PORTA
DEFINE LCD_EBIT 6
DEFINE LCD_RSREG         PORTA
DEFINE LCD_RSBIT 7
DEFINE LCD_BITS 4
DEFINE LCD_LINES 2


Not: Bu arada devrede gerekli düzenlemeleri yapıyorum.

ete

Dbit denilen şey Data bitlerininbağlı olduğu ilk pini işaret ediyor. LCD aslında 8 bitlik bilgi ile çalışıyor.
%xxxx xxxx şeklinde 8 bitlik bilgi 2 adet 4 er bitlik kısma ayrılıyor ve her bir bölüm ayrı ayrı data bitlerine verilerek bilgi iki defada LCD tarafından alınıyor.
İşi hızlandırmak açısından Bu 4 bitlik data bilgisi bir birini takip eden ama ya sıfır nolu bitden yada 4 nolu bitden başlayan  bitler gurubundan alınması zorunludur.
Yani PORTA.0 - PORTA.1 - PORTA.2- ve PORTA.3 bitleri bu iş için uygun oluyor. PORTA.4 ve sonrasi için pek çok işlemci uygun değildir. Özellikle 18 bacaklı işlemcilerde PORTA.5 MCLR pinidir ve çıkış yapamaz yalnızca giriş olabilir. Bu nedenle o tür işlemcilerde yalnızca 0-3 arası bitler data pini olarak kullanılabilir.
PORTB de ise PORTB.0-3 arası pinler yada PORTB.4-7 arası pinler bu iş için uygundur. Kaide neydi? bir birini takıp eden 4 adet pin olacak ama başlangıcı ya 0 nolu bit yada 4 nolu bit olacaktır. Bu zorunluluk niye dersen.
BILGI diye bir değişkenimiz olsun bu LCD ye yazılacak bilgiyi içersin. Bilgi=%1101 0011 şeklinde bir bilgi yazılacağını farz edelim.
ILK=BILGI & %00001111 şeklinde alınarak ILK=%0000 0011 alınmış olur. Bunu 4 bit şeklinde Porta veririz.
SON=(BILGI & %11110000)>>4 şeklinde ikinci kısım alınıp aynı data portuna bunuda 4 bit olarak veririz.
Peki data bileri karışık olsaydı (olabilseydi) nasıl olacak idi ? her bir data bitini ayrı ayrı bağlı oldukları pinlere teker teker vermek zorunda kalacaktık ki bu dünya kadar zaman kaybı olurdu ve bizim LCD de istenilen şekilde çalışamazdı.
ELbette ASM de program yazarsan istediğin pini data pini olarak kullanabilirsin ama Basic de zorunlu olarak data bitleri ya 0 nolu bitden başlayacak yada 4 nolu bitden başlayacak.
RS ve E bitleri için bir kural yok. Çıkış olabilen herhangi bir port pini bu amaçla kullanılabiliyor.

Yazından PORTA da nasıl bir tanımlama yaptığını anlayamıyorum Çalışmamış halini inceleyebilmem için tanımlama şeklini buraya koy göreyim sebebini söyleyeyim. Muhtemelen bu açıklamamdan sende bir sonuç çıkartıp sebebini anlayabilirsin.
PORTA da diğer sorunlu pin ise PORTA.4 dür. Bu pin Open collectordür (pek çok işlemci için geçerli). Yani bu pin için ;
HIGH PORTA.4 dediğin zaman o porttan HIGH çıkamaz. Çıkışında tek transistör varmış gibi düşün ve onunda NPN olduğunu düşün. Bu durumda Yalnızca LOW çıkartabilir. HIGH çıkması için O transistörün Collectörüne bir pullup direnci bağlaman gerekir. Low çıkacağı zaman direk GND den aldığını pine basar ve Pullup direncini yenerek LOW görürsün. Ama HIGH çıksın dediğin zaman o transistör kesime gider ve Pullup dan dolayı pinde High görülür.  Bu pinin özelliği nedeni ile kullanırken dikkat etmek gerekiyor.

Ete

cemilsivas

Bilgiler için teşekkürler hocam. 2 tane pic'in b4-7 pinlerinden biri(hangisi olduğunu tespit edemedim.) bozulmuş sanırım. Elimdeki sıfır pic ile denedim. Problem olmadı.

. Kağan

Merhaba Erol bey,

Ekrana bir simge basmak istiyorum ama simgelerin con değerlerini nereden bulabilirim.

Örneğin derece işareti için
DERECE        CON 223         ' ° işareti
veriyoruz. Aşağı ok, yukarı ok vb. simgeler için bir pc programı yada tablo varmı? Yada bu değer nasıl bulunur?

ete

https://www.sparkfun.com/datasheets/LCD/HD44780.pdf

sayfa 17 de karekter tablosu mevcut.
Önce karekteri seçip bulunduğu yerin hizasından yukarı çıkıp (UPPER 4BITS) değerini alacaksınız. Daha sonra aynı yerin sola hizasına bakıp LOWER 4bit değerini alacak ve ikisini birleştireceksiniz.
Örneğin drece işareti için bu değerlere bakacak olursak MSB tarafı %1101 ve LSB tarafı ise %1111 şeklinde okunur. Birleştirirsek %11011111 şeklinde değer elde edilir ve bunun desimal karşılığı 223 dür.

Ete

oguzerdal

      ETE hocam, Expkit8B-BIG kartıyla beraberinde verdiğiniz örneklere başladım.İlk örnek LED yakma söndürme ve LCD'de de bilgi mesajı.877A çipi ile yapmışsınız.Bende 877 var.Taktım,sizin hex dosyası sorunsuz Şıp diye çalıştı.LCD mesaj içini değiştirip oynamaya çalıştım. Tabii config satırını 2.60 a göre ayarladım. Sizde 3.0 var.Derleme oldu.Ledler çalıştı ama LCD mesajı saçma karakterler yazıyor. ( yani yaptığım tek değişiklik LED YANDI yerine LED ON ). PAUSE süresi falan ile oynadım olmadı,zaten başka bir şey ellenmez.
 

ete

Bu sorunlu çalışma ortamını nasıl yaratabiliyorsun pek anlayamadım.
En azından ne yaptın (programı) buraya yazki bizde görüp fikir yürütebilelim.

Ne olup bittiğini programı gördükten sonra yazacağım. Tabiiki anlayabilirsem.

Ete

oguzerdal

Hocam,okuyunca ben de anlamadım kusura bakma. ;D . Aslında çok basit: sizin kart ile verilen ilk  dosya PBP 3.0 ve F877a için yazılmış. Bende de PBP 2.60 ve F877 var. Konfig satırını gördüğünüz gibi yazmam lazım.( daha önce bu sorunu konuşmuştuk hatırlarsanız). Böyle yapınca LCD'de saçma sapan karakterler çıkıyor. Programın başka hiç bir yerine dokunmuyorum.

ete

Kart için verilen programlar 2.60 Ver. için yazıldı. O zamanlar o versiyon kullanıyordum.
Sigorta ayarlarına hiç dokunma. Yanlızca ;
LCDOUT $FE,1                   komut satırından sonraki satıra;
Pause 200
ekle muhtemelen sorunların düzelecektir.

Ete

oguzerdal

Hocam ekteki dosyayı gözden kaçırdınız galiba. DEVİCE satırlarını kapatmazsam aşağıda onlara ilişkin hata mesajı veriyor. Pause 200 de zaten var.

ete

Aradan zaman geçti ama sanki o programları 2.60'a göre yazmışım gibi hatırlıyorum.
Her neyse madem sigorta satırları hata veriyor vermeyecek şekilde ayarlamaya bak o zaman.

Geickmeye rağmen sorunun devam ederse aşağıdaki iki satırı LCD tanımlamalarının altına ekleyip yeniden derle.

DEFINE LCD_COMMANDUS 2000 'Command delay time in us
DEFINE LCD_DATAUS 50 'Data delay time in us

Ete

oguzerdal

        Hocam neyse buldum sonunda. sizin örnek programlarda LVP_ON/off yoktu. Denerken denerken gire çıka buldum. Laptopun USB portundan karta bağlıyım belki de ondan.
     ve @ __config _HS_OSC & _WDT_ON & _LVP_OFF & _CP_OFF & _PWRTE_ON  şeklinde sorunsuz Win10/Pbp 2.60 üzerinde çalıştı.
        Teşekkürler.

Powered by EzPortal