Haberler:

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

Ana Menü

Buton(Acil)

Başlatan Ankaralı, 03 Mart 2008, 20:24:17

Ankaralı

Merhabalar;
Bir sorunum var basicde ben pice giriş olarak tanıttığım 2 butonun basıldığı anda çıkış taki ledin yanmasını istiyorum.Ancak programı yazamadım yazdıysamda olmadı.If döngülerini kullanamadım. 2 butona da basıldığı anda ledin yanmasını istiyorum yardımlarınızı bekliyorum.
@ NEXYS2

Maxim

IF PORTA.1=1 AND PORTA.2=1 THEN
PORTC.0 = 1
ELSE
PORTC.0 = 0
ENDIF

Ankaralı

Alıntı yapılan: "maxiboost"IF PORTA.1=1 AND PORTA.2=1 THEN
PORTC.0 = 1
ELSE
PORTC.0 = 0
ENDIF

Hocam butonlara basılma durumunda IF PORTA.1=0 AND PORTA.2=0 olucak demi?
@ NEXYS2

Maxim

devreni nasıl kurduysan öyle yapman lazım ,
yani girişlerde pull up direnç mi var pull down mı ?
yada butona basınca pic`e high mı gidiyor low mu ?
şema yokmu ?

Ankaralı

Alıntı yapılan: "maxiboost"devreni nasıl kurduysan öyle yapman lazım ,
yani girişlerde pull up direnç mi var pull down mı ?
yada butona basınca pic`e high mı gidiyor low mu ?
şema yokmu ?

Hocam ö.m attım.
@ NEXYS2

erkan614

@QarizmaCocuq
Alıntı yapılan: "maxiboost"devreni nasıl kurduysan öyle yapman lazım ,
yani girişlerde pull up direnç mi var pull down mı ?
yada butona basınca pic`e high mı gidiyor low mu ?
şema yokmu ?
çok özel bişi sormamış gerçi ama belki giriş direncinin pull-up veya down olması gizli bi bilgidir. ö.m. bu konuda en iyisidir 8)
senin sorunun maxiboost hocam için kolay bi problem halleder nasısa

@maxiboost ya ben iki biti andleyip sonucu if döngüsünde kullanmanın çok faydasını görüyorum çünkü basic'in ligunistiğine pek alışkın olmadığımdan bazan karşıma çok absürt bi sonuç çıkabiliyor. gerçi küçük kodlarda sorun olmuyo ama bilmem kaç alt döngülü bi programda çok başımı arıtmıştı özellikle otomatik derecelenebilen testere gibi insanın bitarafını kısaltabilecek :lol:   uygulamalarda daha güvenli oluyo  8)

Ankaralı

Alıntı yapılan: "erkan614"@QarizmaCocuq
Alıntı yapılan: "maxiboost"devreni nasıl kurduysan öyle yapman lazım ,
yani girişlerde pull up direnç mi var pull down mı ?
yada butona basınca pic`e high mı gidiyor low mu ?
şema yokmu ?
çok özel bişi sormamış gerçi ama belki giriş direncinin pull-up veya down olması gizli bi bilgidir. ö.m. bu konuda en iyisidir 8)
senin sorunun maxiboost hocam için kolay bi problem halleder nasısa

@maxiboost ya ben iki biti andleyip sonucu if döngüsünde kullanmanın çok faydasını görüyorum çünkü basic'in ligunistiğine pek alışkın olmadığımdan bazan karşıma çok absürt bi sonuç çıkabiliyor. gerçi küçük kodlarda sorun olmuyo ama bilmem kaç alt döngülü bi programda çok başımı arıtmıştı özellikle otomatik derecelenebilen testere gibi insanın bitarafını kısaltabilecek :lol:   uygulamalarda daha güvenli oluyo  8)

Hocam burada askeri proje yapmıyoruz ben forumu çöplüğe döndürmeyeyim diye öm attım.Giriş direncim 10k üzerinden pice geliyor.Nasıl olsa proje bittiğinde yayınlarım bu sorun değil.Ben bildiğimi kıskanacak bir kişi değilim acemi olduğum için bazı konularda açıkçası biraz çekindim doğrusunu söylemek gerekirse.Neyse sende sağol hocam...
@ NEXYS2

erkan614

bende onu diyorum çekinmene gerek yok bende biçok şeyi bilmiyorum ve (gün içinde) sorduklarunda bilmiyorum diyorum sora buradaki arkadaşlarımıza danışıp bir ön bilgi edinip birazda kendi araştırmamızla konuyu öğrenip öyle başlıyorum.
benim konuya eklemek istediğim şu idi;
Alıntı yapılan: "erkan"ben iki biti andleyip sonucu if döngüsünde kullanmanın çok faydasını görüyorum çünkü basic'in ligunistiğine pek alışkın olmadığımdan bazan karşıma çok absürt bi sonuç çıkabiliyor. gerçi küçük kodlarda sorun olmuyo ama bilmem kaç alt döngülü bi programda çok başımı arıtmıştı özellikle otomatik derecelenebilen testere gibi insanın bitarafını kısaltabilecek Laughing uygulamalarda daha güvenli oluyo 8)

özellikle iki biti andleyip sora başka iki bitin orlanmış haliyle xorlayınca yani hepsini aynı anda yapınca karşına istemediğin sonuç gelebiliyor
a = b and c
f = g or m
n= a xor f
if n=1 then label1
    else label2

yapınca program daha rahat çözümleniyor

Ankaralı

Hocam basitçe şekli hazırladım sensörlerin yerine buton kullandım.



[img=http://img507.imageshack.us/img507/5106/hsoni3.th.png]

Buda kodlarım ;

[code]ADCON1=7
TRISA=%00000000
TRISB=255
TRISC=%11110000
TRISD=0
'-------------------------------------------------------------------------------
@ DEVICE pic16F877
@ DEVICE pic16F877, WDT_on
@ DEVICE pic16F877, PWRT_ON
@ DEVICE pic16F877, PROTECT_OFF
@ DEVICE pic16F877, XT_OSC
DEFINE OSC 4
'---------------------------------------------------------------------------
BASLA :

   IF PORTB.7=0 AND PORTB.1=0 THEN
   PORTC.0=0  
   ELSE
   PORTC.0=0
   ENDIF
   
   IF PORTB.7=0 AND PORTB.6=0 THEN
   PORTC.0=1
   ENDIF
   IF PORTB.0=0 THEN PORTC.0=0
   PAUSE 5
   
   IF PORTB.7=0 AND PORTB.6=0 AND PORTB.5=0 THEN
   PORTC.0=1
   ENDIF
   IF PORTC.7=0 THEN PORTC.0=0
   PAUSE 5
   
   IF PORTB.7=0 AND PORTB.6=0 AND PORTB.5=0 AND PORTB.4=0 THEN
   PORTC.0=1
   ENDIF
   IF PORTC.6=0 THEN PORTC.0=0
   PAUSE 5
   
   IF PORTB.7=0 AND PORTB.6=0 AND PORTB.5=0 AND PORTB.4=0 AND PORTB.3=0 THEN
   PORTC.0=1
   ENDIF
   IF PORTC.5=0 THEN PORTC.0=0
   PAUSE 5
   
   IF PORTB.7=0 AND PORTB.6=0 AND PORTB.5=0 AND PORTB.4=0 AND PORTB.3=0 AND PORTB.2=0 THEN
   PORTC.0=1
   ENDIF
   IF PORTC.4=0 THEN PORTC.0=0
   PAUSE 5
   GOTO BASLA
   END
   
   
Anlamadığım birşey var.Yukarıdaki programı çalıştırdığımda şunu yaptığımda
   IF PORTB.7=0 AND PORTB.6=0 THEN
   PORTC.0=1
   ENDIF
   IF PORTB.0=0 THEN PORTC.0=0    
   PAUSE 5

sorun olmuyor ancak

   IF PORTB.7=0 AND PORTB.6=0 AND PORTB.5=0 THEN
   PORTC.0=1
   ENDIF
   IF PORTC.7=0 THEN PORTC.0=0
   PAUSE 5
bu şekilde yani portb. nin 5 bitini sıfır yaptığımda portc.0 daki led belli aralıklarla yanıp sönüyor.Aynı şekilde diğer butonlara bastığımdada bu sorun devam ediyor.Ne yapmalıyım?Sadece istediğim butonları kontrol ettirmek istiyorum.
@ NEXYS2

Maxim

Alıntı yapılan: "QarizmaCocuq"
   
Anlamadığım birşey var.Yukarıdaki programı çalıştırdığımda şunu yaptığımda
   IF PORTB.7=0 AND PORTB.6=0 THEN
   PORTC.0=1
   ENDIF
   IF PORTB.0=0 THEN PORTC.0=0    
   PAUSE 5

sorun olmuyor ancak

   IF PORTB.7=0 AND PORTB.6=0 AND PORTB.5=0 THEN
   PORTC.0=1
   ENDIF
   IF PORTC.7=0 THEN PORTC.0=0
   PAUSE 5
bu şekilde yani portb. nin 5 bitini sıfır yaptığımda portc.0 daki led belli aralıklarla yanıp sönüyor.Aynı şekilde diğer butonlara bastığımdada bu sorun devam ediyor.Ne yapmalıyım?Sadece istediğim butonları kontrol ettirmek istiyorum.

şimdi kural hatası var ,
if le başladığında endif ile bitirmek zorundasın ,

IF PORTB.7=0 AND PORTB.6=0 AND PORTB.5=0 THEN
   PORTC.0=1
   ENDIF

   IF PORTC.7=0 THEN PORTC.0=0
   PAUSE 5

burada zaten derleyicinin hata vermesi lazımdı ,

bence kodunu step step kontrol et ,
çünkü 12 tane girişine karşılık sadece 2 adet çıkışı kontrol ediyorsun ,
bu yüzden kargaşa çıkıyor bence ,

hangi giriş ne olduğunda hangi çıkış ne olacak ? en iyi sen biliyorsun ,
bunları tek tek sırayla gözden geçir, sanırım sen bir çıkışı kapatırken o kombinasyona denk gelen bir seçimden dolayı aynı çıkışı açmışta oluyorsun .

yukarıdaki sorun çıkarak koduda şöyle dene ,

  IF PORTB.7=0 AND PORTB.6=0 AND PORTB.5=0 THEN
    PORTC.0=1
    ENDIF

    IF PORTC.7=0 THEN
    PORTC.0=0
    PAUSE 5
    ENDIF

erkan614

brogramı bi inceledim sadece sanki benim karşılaştığım problemle yakınlık gösteriyor gibi gibime geldi
if döngüsü içinde mantıksal işlemler çoyaldıkça and or xor gibi, ligunistik hatalarda artıyor yani basicte yazdığın kod senin kurduğun mantıktan daha farklı birşey oluyor
o sebepten mantıksal işlemleri ayrı bir satırda yazmak basic tarafından anlaşılabilecek  ligunistik (anlatım) hataları azaltıyor mesela

IF PORTB.7=0 AND PORTB.6=0 AND PORTB.5=0 AND PORTB.4=0 THEN
PORTC.0=1
ENDIF
IF PORTC.6=0 THEN PORTC.0=0
PAUSE 5


kodunu şöyle yazsan basic belkide daha farklı bir hex kodu üreticek

""
""
""
SYMBOL input07=PORTB.7
SYMBOL input06=PORTB.6
SYMBOL input05=PORTB.5
SYMBOL input04=PORTB.4
SYMBOL inputc16=PORTC.6
SYMBOL output10=PORTC.0
""
""
conbit var bit
""
""
conbit = input07 or input06 or input05 or input04
if conbit=0 then output10=1
if input16=0 then output10=0
""
""
""
end


yani portb nin 7, 6, 5, 4 nolu pinlerinin hepsi 0 ise C.0 'ı 1 yap herhangi biri 1 ise (conbit=1 olacağından dolayı) C.0 olduğu gibi kalsın
eğer C.6=0 ise C.0 'ı 0 yap C.6=1 ise C.0 'a herhangi bir işlem yapma

birde buna benzer bir yöntemle dene

erkan614

@maxiboost
IF MTP_DSW=1 THEN MK1               'malzeme sıkılı

if O_M=0 then MANUAL1               'manuel secimi (manuele git)
                                    'otomatik hızar işlemleri
if sol=0 then SOL1                  'sag sol secimi
if sag=0 then SAG1                  'sag sol secimi


ben böle bi kod yazmıştım bimakinaya bi zamanlar

burda bissürü if varken endif hiç yok hatta koyduğumda hata veriyor

ama

if O_M=0 then MANUAL1
    else OTOMATIK1
endif


şeklindeki bi koda endif istiyor (ki koyduğum görülmekte)
ben "ammaan boş ver öle istiosa öle yazarız" deyip geçmiştim şimdi hazır yeri gelmişken neden böyle farklılık var?

Ankaralı

Hocam birde böyle denedim gene olmadı sıyırmak üzereyim  :lol:  :cry:  :roll:  :roll:  ;)  :lol:   şimdi sizinkileri uygulayacağım :D


BASLA :

   IF PORTB.7=0 AND PORTB.1=0 THEN
   PORTC.0=0  
   ELSE
   PORTC.0=0
   ENDIF
   
   IF PORTB.7=0 AND PORTB.6=0 THEN
   PORTC.0=1
   ENDIF
   IF PORTB.0=0 THEN PORTC.0=0
   PAUSE 5
   
   IF PORTB.6=0 AND PORTB.5=0 THEN
   PORTC.0=1
   ENDIF
   IF PORTC.7=0 THEN PORTC.0=0
   PAUSE 5
   
   IF PORTB.5=0 AND PORTB.4=0 THEN
   PORTC.0=1
   ENDIF
   IF PORTC.6=0 THEN PORTC.0=0
   PAUSE 5
   
   IF PORTB.4=0 AND PORTB.3=0 THEN
   PORTC.0=1
   ENDIF
   IF PORTC.5=0 THEN PORTC.0=0
   PAUSE 5
   
   IF PORTB.3=0 AND PORTB.2=0 THEN
   PORTC.0=1
   ENDIF
   IF PORTC.4=0 THEN PORTC.0=0
   PAUSE 5
   GOTO BASLA
   END
@ NEXYS2

Gerok

Alıntı yapılan: "erkan614"

IF PORTB.7=0 AND PORTB.6=0 AND PORTB.5=0 AND PORTB.4=0 THEN
PORTC.0=1
ENDIF
IF PORTC.6=0 THEN PORTC.0=0
PAUSE 5


kodunu şöyle yazsan basic belkide daha farklı bir hex kodu üreticek

""
""
""
SYMBOL input07=PORTB.7
SYMBOL input06=PORTB.6
SYMBOL input05=PORTB.5
SYMBOL input04=PORTB.4
SYMBOL inputc16=PORTC.6
SYMBOL output=PORTC.0
""
""
conbit var bit
""
""
conbit = input07 or input06 or input05 or input04
if conbit=0 then output=1
if input16=0 then output=0
""
""
""
end


yani portb nin 7, 6, 5, 4 nolu pinlerinin hepsi 0 ise C.0 'ı 1 yap herhangi biri 1 ise (conbit=1 olacağından dolayı) C.0 olduğu gibi kalsın
eğer C.6=0 ise C.0 'ı 0 yap C.6=1 ise C.0 'a herhangi bir işlem yapma

birde buna benzer bir yöntemle dene


SYMBOL output=PORTC.0  bu şekildeki bir tanımlama hatalıdır OUTPUT bir komuttur sanırım dalgınlığınaza geldi..
Mum başka bir mumu yakmakla ışığından birşey kaybetmez...

erkan614

evet output10 (veya output01) olacaktı orjinali şimdi editlitorum
aslında yazılışı komutlara yakın etiketleri kullanmamak lazım böyle karışıklık oluyor