Haberler:

Eposta uyarılarını yanıtlamayınız ( ! ) https://bit.ly/2J7yi0d

Ana Menü

4x40 lcd port d sorunu

Başlatan certy, 21 Nisan 2013, 07:02:57

certy

4x40 lcd ekran port b'de sorunsuz çalışıyor. Ama port d'de sadece ilk başta yazmasını istediğim açılış yazısı yazıyor, ekran temizleniyor ve boş bir halde bekliyor. Sorun ne olabilir? (Lcd için pic basic'te driver kullanmıyorum.) Saygılar.
TA1USS

ete

#1
Sorun muhtemelen sen olmalısın. Program denilen şey bir emirler zinciridir. İşlemci bu emirleri yerine getirir.
Sen doğru emir verdin ise mesele yok karşılığını alırsın ama vermemiş isen işte böyle elin boş pardon ekranın boş kalır.

Buraya herhangi bir kod vermemişsin. Vermediğin bir şey hakkında nasıl bir yorum yapmamızı bekliyorsun merak ediyorum.
Ete
Bilgi hazinedir paylaştıkça büyür.            http://etepic.com

Maxim

aynen malesef gene kod yok şema yok

Birde www.muneccim.com a yazin bakalim onlarin belki yardimi olabilir size.

certy

#3
Alıntı yapılan: ete - 21 Nisan 2013, 10:01:47
Sorun muhtemelen sen olmalısın. Program denilen şey bir emirler zinciridir. İşlemci bu emirleri yerine getirir.
Sen doğru emir verdin ise mesele yok karşılığını alırsın ama vermemiş isen işte böyle elin boş pardon ekranın boş kalır.

Buraya herhangi bir kod vermemişsin. Vermediğin bir şey hakkında nasıl bir yorum yapmamızı bekliyorsun merak ediyorum.
Ete

Alıntı yapılan: Maxim - 21 Nisan 2013, 10:06:54
aynen malesef gene kod yok şema yok

Birde www.muneccim.com a yazin bakalim onlarin belki yardimi olabilir size.

Koda gerek yok diye düşünmüştüm. Sonuçta pin tanımlamalarına PORTB yerine PORTD yazıyorsun. Buyrun;

LCDOUT $FE,$40, 6, 9, 9, 6, 0, 0, 0, 0
'-----------------------------------------------------------------
@ DEVICE pic16F877
@ DEVICE pic16F877, WDT_ON
@ DEVICE pic16F877, PWRT_ON
@ DEVICE pic16F877, PROTECT_OFF
@ DEVICE pic16F877, XT_OSC
'-----------------------------------------------------------------
DEFIne LCD_DREG PORTD
DEFINE LCD_DBIT 0
DEFINE LCD_RSREG PORTD
DEFINE LCD_RSBIT 4
DEFINE LCD_EREG PORTD
DEFINE LCD_EBIT 7
DEFINE LCD_BITS 4
DEFINE LCD_LINES 4
'-----------------------------------------------------------------
LCD1_Disable var PORTD.5
LCD2_Disable VAR PORTD.6
'-----------------------------------------------------------------
Comm_Pin1   VAR   PortC.0
Comm_Pin2   var PortC.1
Comm_Pin3   var PortC.2
Busy        VAR BIT
HAM         VAR   WORD
ISI         VAR WORD
SIGN        VAR BYTE
SIGN_BITI   VAR HAM.Bit11
NEGAT_ISI   CON 1
TEMP        VAR BYTE
Float       VAR WORD
a var word
son_deger var word
deger var word
hiz var word
hiz_dev var word
devir_sayisi var word
input portC.3
input portC.4
'-----------------------------------------------------------------
CLEAR
PAUSE 200
LCDOUT $FE,1
'-----------------------------------------------------------------
BASLA:
GOSUB USE_LCD1
LCDOUT $FE,$CF,"*****"
LCDOUT $FE,$9D,"TARAFINDAN"
GOSUB USE_LCD2
LCDOUT $FE,$C1,"****"
LCDOUT $FE,$94,"YAPILMISTIR"

'-----------------------------------------------------------------
GOSUB USE_LCD1
PAUSE 2000
LCDOUT $FE,1
GOSUB USE_LCD2
LCDOUT $FE,1
GOSUB SENSOROKU1
GOSUB SENSOROKU2
GOSUB SENSOROKU3
GOSUB MAIN
GOTO BASLA
'----------------------------ISI OKU-----------------------------
SENSOROKU1:
           
           OWOUT   Comm_Pin1, 1, [$CC, $44]
Bekle1:
           OWIN    Comm_Pin1, 4, [Busy]   
           IF      Busy = 0 THEN Bekle1 
           OWOUT   Comm_Pin1, 1, [$CC, $BE]
           OWIN    Comm_Pin1, 2, [HAM.Lowbyte, HAM.Highbyte]
           GOSUB   Hesapla1
           RETURN
   
Hesapla1:                 
    Sign  = "+"
    IF SIGN_BITI = NEGAT_ISI THEN
       Sign   = "-" 
       temp=($ffff-ham+1)*625
       ISI  = DIV32 10
       GOTO GEC1   
    endif
    TEMP = 625 * (HAM+1)       
    ISI = DIV32 10         
GEC1:
    FLOAT = (ISI //1000)/100
    ISI=(ISI/1000)-1
   
    GOSUB USE_LCD1
    lcdout $FE,$80,"MOTR",":",Sign,DEC ISI,".",DEC1 (Float),0,"C"
    if ISI=65535 then
     
        GOSUB USE_LCD1
        lcdout $FE,$85,"       "
        lcdout $FE,$85,"SNSR TK"
   
    endif
   
    RETURN
'---------------------------ISI OKU2-----------------------------
SENSOROKU2:
           
           OWOUT   Comm_Pin2, 1, [$CC, $44]
Bekle2:
           OWIN    Comm_Pin2, 4, [Busy] 
           IF      Busy = 0 THEN Bekle2
           OWOUT   Comm_Pin2, 1, [$CC, $BE]
           OWIN    Comm_Pin2, 2, [HAM.Lowbyte, HAM.Highbyte]
           GOSUB   Hesapla2
           RETURN
   
Hesapla2:         
    Sign  = "+"
    IF SIGN_BITI = NEGAT_ISI THEN
       Sign   = "-" 
       temp=($ffff-ham+1)*625
       ISI  = DIV32 10
       GOTO GEC2   
    endif
    TEMP = 625 * (HAM+1)     
    ISI = DIV32 10       
GEC2:
    FLOAT = (ISI //1000)/100
    ISI=(ISI/1000)-1
   
    GOSUB USE_LCD1
    lcdout $FE,$8C,"/DIS",":",Sign,DEC ISI
    GOSUB USE_LCD2
    lcdout $FE,$80,".",DEC1 (Float),0,"C"
   
    if ISI=65535 then
       
        GOSUB USE_LCD1
        lcdout $FE,$91,"   "
        lcdout $FE,$91,"SNS"
        GOSUB USE_LCD2
        lcdout $FE,$80,"    "
        lcdout $FE,$80,"R TK"                 
   
    endif
   
    RETURN
'---------------------------ISI OKU3-----------------------------
SENSOROKU3:
           
           OWOUT   Comm_Pin3, 1, [$CC, $44]
Bekle3:
           OWIN    Comm_Pin3, 4, [Busy] 
           IF      Busy = 0 THEN Bekle3
           OWOUT   Comm_Pin3, 1, [$CC, $BE]
           OWIN    Comm_Pin3, 2, [HAM.Lowbyte, HAM.Highbyte]
           GOSUB   Hesapla3
           RETURN
   
Hesapla3:         
    Sign  = "+"
    IF SIGN_BITI = NEGAT_ISI THEN
       Sign   = "-" 
       temp=($ffff-ham+1)*625
       ISI  = DIV32 10
       GOTO GEC3   
    endif
    TEMP = 625 * (HAM+1)     
    ISI = DIV32 10       
GEC3:
    FLOAT = (ISI //1000)/100
    ISI=(ISI/1000)-1
   
    GOSUB USE_LCD2
    lcdout $FE,$84,"/JENERTR",":",Sign,DEC ISI,".",DEC1 (Float),0,"C"

  if ISI=65535 then
       
        GOSUB USE_LCD2
        lcdout $FE,$8D,"       "
        lcdout $FE,$8D,"SNSR TK"                 
   
    endif
   
    RETURN
'--------------------------------------------------------------
PAUSE 100
son_deger=0
MAIN:

count portC.3,1000,deger

son_deger=son_deger+deger
devir_sayisi=son_deger
hiz=deger*60                           
                           
if portC.4=0 then son_deger=0
GOSUB USE_LCD1
lcdout $fe,$94,"DEViR:",dec hiz
lcdout $fe,$9F,"RPM"
lcdout $fe,$A3,"DEViR"
GOSUB USE_LCD2
lcdout $fe,$94,":",dec devir_sayisi

goto main
   
END

USE_LCD1:
INPUT LCD1_Disable
LOW LCD2_Disable
RETURN

USE_LCD2:
LOW LCD1_Disable
INPUT LCD2_Disable
RETURN
TA1USS

ete

Bu kodları normal bir şekilde kullanırsan LCD de istediğin her şeyi görebilirsin. Ama görünen o ki devrende sanırım 2 ayrı LCD kullanıyorsun yada kullanmaya çalışıyorsun ve bir şekilde birinden diğerine geçmeye çalışıyorsun. Şema olmadan bunun nasıl yapıldığını anlamamız mümkün değil. Sorun bu olsa gerek.
Bir LCD nin devre çalıştıktan sonra voltajını kesip yeniden voltaj versen bile LCD initalize olamaz. Muhtemelen ekran boş olarak gözükür. Sanırım benzer bir sorun yaşıyorsun.

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

certy

#5
Alıntı yapılan: ete - 21 Nisan 2013, 17:59:54
Bu kodları normal bir şekilde kullanırsan LCD de istediğin her şeyi görebilirsin. Ama görünen o ki devrende sanırım 2 ayrı LCD kullanıyorsun yada kullanmaya çalışıyorsun ve bir şekilde birinden diğerine geçmeye çalışıyorsun. Şema olmadan bunun nasıl yapıldığını anlamamız mümkün değil. Sorun bu olsa gerek.
Bir LCD nin devre çalıştıktan sonra voltajını kesip yeniden voltaj versen bile LCD initalize olamaz. Muhtemelen ekran boş olarak gözükür. Sanırım benzer bir sorun yaşıyorsun.

Ete

İki tane 4x20 lcd'den 4x40 lcd oluşturuldu. Dediğim gibi ekran B portunda sorunsuz çalışıyor ama D portunda açılış yazısından sonra ekran boş bekliyor.

Birde şimdi sensörlerden biri veya ikisi sıcaklıklarını 64.5 derece gösteriyor. Ve öylece kalıyor. Önceden böyle değildi. Neden olabilir acaba?

Şema:

[IMG]http://img444.yukle.tc/images/5830capture-20130421-182414.jpg[/img]
TA1USS

certy

Alıntı yapılan: ete - 21 Nisan 2013, 17:59:54
Bu kodları normal bir şekilde kullanırsan LCD de istediğin her şeyi görebilirsin. Ama görünen o ki devrende sanırım 2 ayrı LCD kullanıyorsun yada kullanmaya çalışıyorsun ve bir şekilde birinden diğerine geçmeye çalışıyorsun. Şema olmadan bunun nasıl yapıldığını anlamamız mümkün değil. Sorun bu olsa gerek.
Bir LCD nin devre çalıştıktan sonra voltajını kesip yeniden voltaj versen bile LCD initalize olamaz. Muhtemelen ekran boş olarak gözükür. Sanırım benzer bir sorun yaşıyorsun.

Ete

Ne yapmam lazım sizce?
TA1USS

ete

#7
İki lcd yi bu şekilde kullanma fikrini beğendim. Ancak pratikte çalışırmı bilemiyorum. B portunda çalışıyor demişsin. O halde D portunda da çalışması gerekirdi. Aralarında seni ilgilendiren pek fark yok. D portu aynı zamanda Spi portudur ama aktive edilirse çalışır. O halde çalışması gerekirdi. Neden çalışmıyor hiç bir fkrim yok maalesef.

Ete

NOT: Sonradan bir fikir geldi aklıma. İlk açılışta E pinin durumu açık değil sanıyorum. Bu nedenle LCD yi initalize etmeden bunu belirlemek gerekir diye düşünüyorum. Bu bakımdan önce şu satırları bulun tanımlama kısmında;
LCD1_Disable var PORTD.5
LCD2_Disable VAR PORTD.6
sonra bunların altına şu satırı ilave ediverin lütfen.
gosub USE_LCD1

sonra tekrar deneyin bakalım ne olacak.
Bilgi hazinedir paylaştıkça büyür.            http://etepic.com

certy

Alıntı yapılan: ete - 22 Nisan 2013, 07:38:19
İki lcd yi bu şekilde kullanma fikrini beğendim. Ancak pratikte çalışırmı bilemiyorum. B portunda çalışıyor demişsin. O halde D portunda da çalışması gerekirdi. Aralarında seni ilgilendiren pek fark yok. D portu aynı zamanda Spi portudur ama aktive edilirse çalışır. O halde çalışması gerekirdi. Neden çalışmıyor hiç bir fkrim yok maalesef.

Ete

NOT: Sonradan bir fikir geldi aklıma. İlk açılışta E pinin durumu açık değil sanıyorum. Bu nedenle LCD yi initalize etmeden bunu belirlemek gerekir diye düşünüyorum. Bu bakımdan önce şu satırları bulun tanımlama kısmında;
LCD1_Disable var PORTD.5
LCD2_Disable VAR PORTD.6
sonra bunların altına şu satırı ilave ediverin lütfen.
gosub USE_LCD1

sonra tekrar deneyin bakalım ne olacak.

Dediğin gibi kodu ekledim. Ve denedim. Çalıştı. Sonra o kodu silip programı tekrar denedim. Yine çalıştı. İsis'te sorun var sanırım. Yardımların için teşekkür ederim.
TA1USS