Basic yardım

Başlatan kafa1500, 25 Şubat 2007, 00:22:45

kafa1500

selam arkadaşlar, pic basic de yeniyim ve denemeler yapıyorum. bi kod yazdım ama istediğim gibi çalışmadı bi bakabilir misiniz? portb deki butonlarla porta daki ledleri yakmaya çalışıyorum ama olmuyo.

NOT:kusura bakmayın mesaj yaz butonuna tıklayacağıma yeni başlık kısmına tıklamışım. özür dilerim.

TRISA=0
TRISB=1

PORTA=0


SYMBOL TUS1=PORTB.0
SYMBOL TUS2=PORTB.1
SYMBOL TUS3=PORTB.2
SYMBOL TUS4=PORTB.3

SYMBOL LED1=PORTA.0
SYMBOL LED2=PORTA.1
SYMBOL LED3=PORTA.2
SYMBOL LED4=PORTA.3

BASLA
PAUSE 70

IF TUS1=0 THEN TOGGLE LED1
PAUSE 70
IF TUS2=0 THEN TOGGLE LED2
PAUSE 70
IF TUS3=0 THEN TOGGLE LED3
PAUSE 70
IF TUS4=0 THEN TOGGLE LED4
PAUSE 70


GOTO BASLA
END
Güzelin nazına, Ford'un ara gazına hastayım.

SpeedyX

TRISB=0xFF
ve
SYMBOL TUS1=PORTB.0 yerine TUS1 var PORTB.0 dene...

ete

Symbol komutları doğru.
Yalnızca, PortB.0'ı giriş olarak açmışsın. Tuşaların bağlı olduğu pinleri bit bazında düşünmen gerek.
TRISB=%00001111   doğru komut bu olacaktı. Kısaca toplam 4 adet tuşun var ve bunların hepsine ait tris register bitlerini 1 yapman gerek. Oda yukardaki gibi olacaktı.

Ayrıca her tuş kontrolünden sonra PAUSE 70 yazmakda hatalı.
Bu sana 280 ms lik bir gecikmeye sebep oluyor. Halbuki tuştaki sıçramayı önlemek için yalnızca 1 tane ve GOTO BASLA komutundan önce PAUSE 100 demen yeterli olacaktır.

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

kafa1500

ETE hocam teşekkürler, bir şey daha sormak istiyorum.
tek tuşla 3 ledin durumunu aynı anda nasıl değiştirebiliriz?
bu kod doğru olur mu? yada daha kısa yazılabilir mi?

IF TUS4=0 THEN
   IF LED1=1   THEN
   IF LED2=1   THEN
   IF LED3=1   THEN
   LOW LED1
   LOW LED2
   LOW LED3
   
   ENDIF
   ENDIF
   ENDIF
   ENDIF
Güzelin nazına, Ford'un ara gazına hastayım.

ete

Şöyle olabilir.


IF( TUS4=0)  and (porta and %1111=%1111) then
PORTA=PORTA AND %0001
endif

Bu komut PORTA.0 daki ledin durumunu aynen korur ama diğer 3 tanesini LOW yapar.

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

kafa1500

hocam kusura bakmayın bir iki şey daha sormak istiyorum, aşağıdaki lcd kayan yazı kodlarında değişiklik yapmak istiyorum. Mesela; karakterler ilk satırdan değilde ikinci satırından kayması için ne yapmalıyız?

"lcdout $fe,143+c-a,d"   bu komutun anlamı nedir?


TRISB=0             'PORTB TAMAMI ÇIKIŞ

'*****LCD TANIMLAMALARI*****
DEFINE LCD_DREG     PORTB       'LCD DATA BACAKLARI PORTB'YE BAŞLIYOR
DEFINE LCD_DBIT     4           'LCD DATA BCAKLARI PORTB.4 BAŞLIYOR
DEFINE LCD_RSREG    PORTB       'LCD RS PİNİ PORTB'YE BAĞLI
DEFINE LCD_RSBIT    2           'LCD RS PİNİ PORTB.2 BAĞLI
DEFINE LCD_EREG     PORTB       'LCD ENABLE PİNİ PORTB'YE BAĞLI
DEFINE LCD_EBIT     3           'LCD ENABLE PİNİ PORTB.3 BAĞLI
DEFINE LCD_BITS     4           'LCD 4 BİT HABERLEŞİYOR
DEFINE LCD_LINES    2           'LCD 2*16

A var byte   'KARAKTER SAYISI
C var byte
D var byte


dongu:

for a=0 to 52  
pause 100       'Yazının kayma hızı
lcdout $fe,1
for c=0 to 36
lookup c, ["www.picproje.com BASIC LCD DENEMELERI"],d
lcdout $fe,143+c-a,d
next c
c=0
next a
a=0
goto dongu
end
Güzelin nazına, Ford'un ara gazına hastayım.

ete

lcdout $fe,143+c-a,d
komutunda bulunan 143 rakamını 207 yap

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

kafa1500

yardımlarınız için teşekkürler hocam,
Güzelin nazına, Ford'un ara gazına hastayım.

kafa1500

selamlar, lcd deneme amaçlı kod yazdım, amacım butona basılarak yazıyı değiştirmekti ama çalıştıramadım, nerde hata yapıyorum?

DEFINE LCD_DREG      PORTB       
DEFINE LCD_DBIT      4      
DEFINE LCD_EREG      PORTB     
DEFINE LCD_EBIT      3      
DEFINE LCD_RWREG                 PORTB     
DEFINE LCD_RWBIT                  2      
DEFINE LCD_RSREG                  PORTB     
DEFINE LCD_RSBIT      1         
DEFINE LCD_BITS      4      
DEFINE LCD_LINES      2


SYMBOL  TUS=PORTA.0

TRISA=$00001                        
TRISB=0                                

LOW PORTB.2                         
PAUSE 100      

LCDOUT $FE,1
LCDOUT $FE,$84,"KAFA1500"
LCDOUT $FE,$C6,"LCD"

       IF TUS=0 THEN
       LCDOUT $FE,1
       LCDOUT $FE,$85,"DENEME"
       LCDOUT $FE,$C5,"PROJESi"
       ENDIF  
End
Güzelin nazına, Ford'un ara gazına hastayım.

ete

Çalıştıramadım derken ne yaptı ? ne yapmadı? acaba.
Zira kodun sonuna baktım end ile bitirmişsiniz.
Yani tuşa yalnızca 1 kere bakılacak ve bir daha bakılmayacak demektir bu. Sİz çalıştırıp tuşa basıncaya kadar program zaten end satırına ulaşacağı için siz yırtınsanız program istifini bozmayacak ve sizde çalışmıyor zannedeceksiniz.
Halbuki ;
Şöyle yazsa idiniz balki sonucu görebilecektiniz. Tabiiki LCD bağlantılarınız doğru ise.
BASLA:
IF TUS=0 THEN
PAUSE 100
LCDOUT $FE,1
LCDOUT $FE,$85,"DENEME"
LCDOUT $FE,$C5,"PROJESi"
ENDIF
GOTO BASLA
End
Bilgi hazinedir paylaştıkça büyür.            http://etepic.com

kafa1500

:oops:   :oops:  şimdi tamam. peki hocam aynı tuşa tekrar basarak programın en başına nasıl dönebiliriz?
Güzelin nazına, Ford'un ara gazına hastayım.

ete

Bu durumda program şöyle yazılmalı;
DEFINE LCD_DREG PORTB
DEFINE LCD_DBIT 4
DEFINE LCD_EREG PORTB
DEFINE LCD_EBIT 3
DEFINE LCD_RWREG PORTB
DEFINE LCD_RWBIT 2
DEFINE LCD_RSREG PORTB
DEFINE LCD_RSBIT 1
DEFINE LCD_BITS 4
DEFINE LCD_LINES 2

SYMBOL TUS=PORTA.0

TRISA=$00001
TRISB=0

LOW PORTB.2
PAUSE 100

ILK:

LCDOUT $FE,1
LCDOUT $FE,$84,"KAFA1500"
LCDOUT $FE,$C6,"LCD"

BASLA:
IF TUS=0 THEN
PAUSE 100
LCDOUT $FE,1
LCDOUT $FE,$85,"DENEME"
LCDOUT $FE,$C5,"PROJESi"
WHILE TUS=0 : WEND 'TUS hala basılı ise bırakıncaya kadar bekle
WHILE TUS=1 :wend  'Tusa tekrar basılıncaya kadar tekrar bekle
GOTO ILK  'Tusa basıldı ve en başa git
ENDIF
GOTO BASLA
End
Bilgi hazinedir paylaştıkça büyür.            http://etepic.com

kafa1500

hocam dediğinizi yaptım gayet güzel çalıştı.
ben kodu aşağıdaki gibi değiştirdim ama yazılar ekrana sıralı gelmiyor.
ilk çalıştırdığımda düzgün çalışıyor, ama bi süre sonra metinler karışık çıkmaya başlıyor. acaba bişeyler mi eksik?

birde hocam sizin nokia 3310 veya 7110 lcd'leriyle ilgili bilginiz ve çalışmanız var mı?


@ DEVICE pic16F84                      'işlemci 16F84                              
@ DEVICE pic16F84, WDT_OFF             'Watch Dog timer kapalı
@ DEVICE pic16F84, PWRT_ON             'Power on timer açık
@ DEVICE pic16F84, PROTECT_OFF         'Kod Koruma kapalı

DEFINE LCD_DREG PORTB
DEFINE LCD_DBIT 4
DEFINE LCD_EREG PORTB
DEFINE LCD_EBIT 3
DEFINE LCD_RWREG PORTB
DEFINE LCD_RWBIT 2
DEFINE LCD_RSREG PORTB
DEFINE LCD_RSBIT 1
DEFINE LCD_BITS 4
DEFINE LCD_LINES 2

SYMBOL TUS=PORTA.0
SYMBOL TUS1=PORTA.1

TRISA=$00011
TRISB=0
LOW PORTB.2

BIR:
PAUSE   200

LCDOUT  $FE,1
LCDOUT  $FE,$84,"KAFA1500"
LCDOUT  $FE,$C6,"LCD"

IKI:
IF TUS=0    THEN
PAUSE   200
LCDOUT  $FE,1
LCDOUT  $FE,$85,"DENEME"
LCDOUT  $FE,$C5,"PROJESi"
WHILE   TUS=0 :WEND      
WHILE   TUS=1 :WEND        
GOTO    UC                  
ENDIF

UC:
IF  TUS=0   THEN
PAUSE   200
LCDOUT  $FE,1
LCDOUT  $FE,$83,"PIC BASIC'I"
LCDOUT  $FE,$C4,"OGRENMEK"
WHILE   TUS=0  :WEND
WHILE   TUS=1  :WEND
GOTO    DORT
ENDIF

DORT:
IF  TUS=0   THEN
PAUSE   200
LCDOUT  $FE,1
LCDOUT  $FE,$84,"ISTIYORUM"
LCDOUT  $FE,$C4,"AMA KAFAM"
WHILE   TUS=0  :WEND
WHILE   TUS=1  :WEND
GOTO    BES
ENDIF

BES:
IF  TUS=0   THEN
PAUSE   200
LCDOUT  $FE,1
LCDOUT  $FE,$86,"OLDU"
LCDOUT  $FE,$C5,"1500!!"
WHILE   TUS=0  :WEND
WHILE   TUS=1  :WEND
GOTO    BIR
ENDIF
GOTO    IKI
End
Güzelin nazına, Ford'un ara gazına hastayım.

ete

Yazıların ekrana sıralı gelmesi tamamen tesadüflere bağlıdır. Zira tuşa basmadığın zaman her bir tuş kontrolünü program geçecektir.
Sonuncu kontrole gelindiğinde tuşa basılabilir. Yada ortada iken basılabilir. BU tamamen tesdüflere bağlı.
Ne yapmak istediğini çok iyi anlamadım. Sıralı görmek istersen her bir sırayı atlamadan diğer sıraya geçirmezsin olur biter.

Telefon LCD leri ile hiç uğraşmadım.

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

kafa1500

tamam hocam dediğinizi anladım ve sorunu hallettim. teşekkürler.
Güzelin nazına, Ford'un ara gazına hastayım.