Haberler:

Foruma Resim Yükleme ve Boyut Sınırlaması ( ! )  https://bit.ly/2GMFb8H

Ana Menü

LCD de yazi yazmada sorun

Başlatan rck8942, 21 Ocak 2009, 20:56:12

fractal

arkadaşa bu işi biliyor...
Restantum cogniscutur Quantum deligutur

cetinkaya

hocam simdi olduda lcd bu sefer tam ismimi yazmiyor mesela ilk RMZ yaziyor ve geri kalan yerler gözükmüyor ve parazit oluyor az sonra resim koyacagim

ilker_32

Resimle beraber gönderdiğim kodu kullan.


cetinkaya

hocam resimle beraber ekledigin codu kullandim ben 877a birde kristal olarak 20 mhz var bu fuse ayarlari yanlis herhalde simdide .str yaziyor birinci satirda

ilker_32

orada xt osc yazıyor böylece 4MHz kristal kullanacaksın demek.

ete

Çoğu kişi gibi sende kestirmeden gidiyorsun anlaşılan.
Birazcık okuma araştırma ihtiyacı duysa idin pic osilatörünün 8- MHz e kadar XT, 8 den sonra ise HC olarak ayarlanması gerektiğini öğrenirdin.

İkinci husus, LCD ye verilen komutların algılanabilmesi için belirli bir zaman diliminin geçmesi gerekir. 20MHz çıktığın zaman hız otomatikman artmış oluyor. Dolayısıyla düşük hızlar için verilen komut süreleri yeterli olmadığı için karekterler ya ekranda durmuyor yada ekranda beliremiyor.
Bunu gidermek için ;

DEFINE LCD_COMMANDUS 2000   
DEFINE LCD_DATAUS   50

komutlarınıda LCD satırlarına ilave etmen gerek.

Diğer bir konuda 20MHz de çalışacak olan Pic in 20 MHz için üretilmiş olması gerekir. Elindeki pic 20 MHz lik değil ise LCD de yine bir şey göremeyeceksin ada yarım yamalak şeyler göreceksin.

Şimdiye kadar yüzlerce defa denedim. 4 Mzh lik pic lerin yalnızca yüzde biri 20 Mhz de çalışabiliyor. Çalışanların yinede bir yerleri eksik oluyor ama beni ilgilendirdikleri yerler çalışınca sorun olmuyor. Ama bu son bir yıl içinde aldıklarımın hemen hepsi (4 Mhzlikler) 20 MHz de çalışmadı.
Bu hususu da göz ardı etmeyesin diye belirteyim istedim.

16F877 ile 16F877A arasındaki en belirgin fark A serisinde ayrıca komparatör olmasıdır. A serisi kullanıyor isen ve PortA yı da digital input output olarak kulanmak zorunda olursan programa ayrıca;
CMCON=7
komutunu ilave edip komparatörleri kapatman gerekir.
Tabiiki ayrıca yine A ve E portuna bağlı olan ADC leride kapatmak için ADCON1=7 komutunuda vermen gerek.

Sigortalarda OSC hızı verilmez. Yalnızca tipi belirtilir. Sen 20 MHz _XT yazınca hata verecektir tabiiki.

Ete
Bilgi hazinedir paylaştıkça büyür.            http://etepic.com

Maxim

@ETE usta ,

bu satırlar proton+ da hiç birşey yazılmaz ise default olarak kabul edilen değerler ,
DEFINE LCD_COMMANDUS 2000
DEFINE LCD_DATAUS 50

acaba picbasicte de böyle olabilirmi ?

bu komutların verdiği etki nedir ? bir ara denemiştim ama lcd ekranda fark göremedim ,nasıl oluyor ,yazılar dahamı silik çıkıyor ? yada 20MHZ ve üzerindemi kullanmak lazım ? ben o yaptığım denemede kullandığım osc frekansı neydi hatırlamıyorum ,

kısacası biraz daha açıklama rica edebilirmiyim? teşekkürler .

Tagli

Alıntı yapılan: "ete"Diğer bir konuda 20MHz de çalışacak olan Pic in 20 MHz için üretilmiş olması gerekir. Elindeki pic 20 MHz lik değil ise LCD de yine bir şey göremeyeceksin ada yarım yamalak şeyler göreceksin.

Şimdiye kadar yüzlerce defa denedim. 4 Mzh lik pic lerin yalnızca yüzde biri 20 Mhz de çalışabiliyor. Çalışanların yinede bir yerleri eksik oluyor ama beni ilgilendirdikleri yerler çalışınca sorun olmuyor. Ama bu son bir yıl içinde aldıklarımın hemen hepsi (4 Mhzlikler) 20 MHz de çalışmadı.
Bu hususu da göz ardı etmeyesin diye belirteyim istedim.
Hocam daha önce forumda gözüme çarpmıştı ama yine de emin olmak için tekrar sorayım dedim: 16F876-04/SP demek en fazla 4 MHz kristal ile çalışabileceği anlamına mı gelir? Ben bunu öğrenmeden önce bu PIC'i uzunca bir süre 20 MHz kristal ile sorunsuz olarak kullandım. Ancak bir süre sonra programlama sırasında sorun çıkarmaya başladı. Öyle ki hatasız olarak programlamak için belki 15 defa denemem gerekiyordu ve bu da zor oluyordu. Sonunda PIC'i değiştirdim.

@maxiboost, sanırım bu satırlar LCD'ye yollanan verilerin (emir veya karakter) işlenmesi için LCD'ye ne kadar süre verildiğini gösteriyor. Bu süreleri olması gerekenden kısa tutarsan LCD işini bitirememiş olacağından sonraki komutu işlemeyebilir. Ama eğer LCD'nin R/W bacağı da kullanılır ve LCD'nin Busy Flag'ı okunursa bu tür bir ayara gerek kalmayacak ve aynı program farklı hızlarda da çalışabilecektir. Derleyiciler bu imkanı sunuyor mu bilmiyorum ama ben ASM'de yazdığım kodda bu şekilde kullanmıştım.
Gökçe Tağlıoğlu

ete

@Tagli,
Dediğin gibi 04 demek 4 Mhz de çalışır demek 20 yazarsa 20Mhz demektir.
Pek çok uygulamada bende 04 lükleri 20 Mhz olarak çalıştırdım. Ama muhakkak bir yerleri eksik çalışıyor. Bir yerlerde okumuştum. Fabrikada bu aletler verilen frekanslarda test ediliyorlar ve çalışabilenlere 20 çalışamayanlara 04 basılıyor. Tabiiki 04 lükler arasında 20Mhz de  hiç çalışmayanlar olduğu gibi kısmen çalışanlar veya hata vermeden çalışır gibi gözükenler mevcut. İşin doğrusu 20 Mhz için 20 lik kullanılmasıdır.


@maxboost,
Bu komutlar şu anda kullandığımız PBP derleyicisinde default değil sanırım. Zira 10MHz üzerinde bu komutu yazmaz isen LCD çalışmıyor (en azından pek çoğunda çalışmıyor). LCD ler arasında firmasına görede fark olabilir. EN azından benim kullandıklarım sorun çıkartıyor idi. KOmutun işlevine bakarsan hem komut hem data bilgilerine birer gecikme veriyor. AKsi halde sen LCD ye bilgiyi yazıyorsun o kendi içinde bilgiyi ekrana çıkarmaya çalışırken ikinci bilgi peşinden geliyor ve birinci daha gösterilemeden ikincisi için aynı işlem uygulanıyor. Mantıklı açıklaması bu olsa gerek. Aynı şeyi biz programlarda da yaşamıyormuyuz. LCD ye bir şey yaz ama peşine pause koyma. Program hızlı çalışıyor ise daha göz ilk yazılanı algılayıncaya kadar ikincisi yazıldığı için ekranda bir şey göremiyorsun. Olay budur.
Ete
Bilgi hazinedir paylaştıkça büyür.            http://etepic.com

berkay_yalan

DEFINE LCD_COMMANDUS 2000
DEFINE LCD_DATAUS 50

cetinkaya

ete hocam cevabin icin tesekkür ederim ama program yazilimi bu yine nerde hata var söylerseniz sevinirim ayricada HC_OSC yazinca asagida hata veriyor kafam karisti iyicene

****************************************************************
'*  Name    : UNTITLED.BAS                                      *
'*  Author  : [select VIEW...EDITOR OPTIONS]                    *
'*  Notice  : Copyright (c) 2009 [select VIEW...EDITOR OPTIONS] *
'*          : All Rights Reserved                               *
'*  Date    : 21.01.2009                                        *
'*  Version : 1.0                                               *
'*  Notes   :                                                   *
'*          :                                                   *
'****************************************************************
@ DEVICE pic16F877A  
@ DEVICE pic16F877A, WDT_OFF 
@ DEVICE pic16F877A, PWRT_ON 
@ DEVICE pic16F877A, PROTECT_OFF 
@ DEVICE pic16F877A, HC_OSC 

TRISB=0 

DEFINE LCD_DREG     PORTB       'LCD DATA BACAKLARI PORTB'YE BASLIYOR 
DEFINE LCD_DBIT     0           'LCD DATA BCAKLARI PORTB.4 BASLIYOR 
DEFINE LCD_RSREG    PORTB       'LCD RS PINI PORTB'YE BAGLI 
DEFINE LCD_RSBIT    4           'LCD RS PINI PORTB.4 BAGLI 
DEFINE LCD_EREG     PORTB       'LCD ENABLE PINI PORTB'YE BAGLI 
DEFINE LCD_EBIT     5           'LCD ENABLE PINI PORTB.5 BAGLI 
DEFINE LCD_BITS     4           'LCD 4 BIT HABERLESIYOR 
DEFINE LCD_LINES    2           'LCD 2*16
DEFINE LCD_COMMANDUS 2000 
DEFINE LCD_DATAUS 50
 
                
PAUSE 150                        'LCD'nin açilmasini bekle 

LCDOUT $FE,1                    'Ekrani siliyoruz. 
Lcdout " Ramazan " 
Lcdout $fe, $c0, " 2. SATiR " 

CMCON=7
ADCON1=7

END

ete

Yanlış olan satırlar şunlar;

@ DEVICE pic16F877A, HC_OSC

END [code]

Doğrularını aşağıda veriyorum .

@ DEVICE pic16F877A, HS_OSC

END


Ete
Bilgi hazinedir paylaştıkça büyür.            http://etepic.com

cetinkaya

Alla alla yazilar cikiyor ama eksik ve karman corman anlayamadim gitti

Tagli

DEFINE LCD_COMMANDUS 2000
DEFINE LCD_DATAUS 50
Bu satırların karşısındaki değerleri arttırmayı bir dene. Mesela 4000 ve 100 gibi.
Gökçe Tağlıoğlu