S

Plc'deki gibi mühürleme

Başlatan sametozt, 15 Mayıs 2012, 00:34:41

sametozt

Merhaba arkadaşlar forumda yeniyim bu işlerle uğraşıyorum ama şu kolay mantığı bir türlü yazı diline dökemedim gitti. Yapmak istediğim şey butona basıp çekilcek ve led yanık kalacak. Bir türlü beceremedim.Yardımlarınız için şimdiden teşekkürler  :)

sametozt

Arkadaşlar forumu meşgul etmek gibi olmasın işi çözdüm. Kodlar da bu şekilde belki aynı mantıkta takılan arkadaşlar olabilir.Biraz faydamız olursa ne mutlu bize :)

BASLA:
If PORTA.1=0 Then
GoTo LEDYAK
Else
PORTB.1=0
EndIf
GoTo BASLA

LEDYAK:
PORTB.1=1
GoTo LEDYAK

jun

#2
program yanlış ! GOTO LEDYAK ile gidilen etiketten yine LEDYAK etiketine gidilmiş.ana program etiketine geri dönüş yapılmalı.

sametozt

#3
Butona basılıp çekildiğinde ledin sürekli olarak yanması isteniyor zaten. O yüzden ana programa dönüş yapmadım . Ama bi deneyim bakalım sizin dediğiniz gibi nasıl olacak.

Edit: jun sizin dediğiniz gibi denedim.Ama dediğiniz gibi yapınca led butona bastığımızda yanıyor.Ama butondan elimizi çektiğimizde de sönüyor

jun

evet ama sizin yaptıgınız olayın devamı yok tek sefer tuşa bastıgınızda program ledyak etiketine dallanıp devamlı o satırlar arasında dolaşaçak yapmak istediginiz şey tek tuş ile on off ise toggle komutunu kullanabilirsiniz.

sametozt

O nasıl oluyor peki örneklendirebilir misiniz ?

jun

BASLA:
If PORTA.1=0 Then TOGGLE PORTB.1
GoTo BASLA

sametozt

#7
Kodları kopyala yapıştır yaptım ama bu sefer de çalışması sapıtıyo bir yanıp bir sönüyor.Bu arada isiste simülasyon yapıyorum.

Device = 16F84A
TRISA=%00000010
TRISB=%00000000
BASLA:
If PORTA.1=0 Then
Toggle PORTB.1
EndIf
GoTo BASLA

Edit: Kodların arasına biraz bekleme ekleyince sorun halloluyor teşekkür ederim yardımlarınız için :)

Device = 16F84A
TRISA=%00000010
TRISB=%00000000
BASLA:
If PORTA.1=0 Then
Toggle PORTB.1
DelayMS 500
EndIf
GoTo BASLA

jun

devrenizde gerekli degişiklikleri yapıp deneyiniz

CMCON=7
PORTA=0
PORTB=0
TRISA=0
TRISB=%00000001
SYMBOL TUS=PORTB.0
SYMBOL LED=PORTB.1
BASLA:
PAUSE 100
If TUS=0 Then TOGGLE LED
WHILE TUS=0 :WEND
GoTo BASLA
END

sametozt

Sorun delayms ile gecikme verince halloldu tekrar teşekkür ederim vakit ayırdığınız için :)

ete

Basit bir program için bir sürü yazışma yaptınız. İşin temelini açıklamakta yarar görüyorum.
Her şeyden önce şunu iyi bilmeniz gerekiyor. Bir işlemci sizin tahmin ettiğinizden daha hızlı çalışır.
Bu nedenle bir tuşa bastınız, led yandı elinizi henüz tuştan çekmediniz. Program yeniden tuş kontrolüne geliecektir anında ve yeniden sanki tuşa basmışsınız gibi işlem yapacaktır. Bunu önlemenin tek bir yolu var. Tuşa basılıp işlem yapıldıktan sonra tuşun bırakılmış olmasını garantiye almak!.
Bir tuşun basılı olup olmadığını if satırı ile halledebiliriz.
IF TUS=0 THEN şeklinde bir tanımlama tuşa basılmış ise şunu yap anlamında kullanılabilir.
Bir tuşa basılmış ama bırakılmışmı kontrol etmek için WHILE komutu veya if komutu kullanılabilir.
Wile kullanırsak  ;
WHILE TUS=0 yani Tuşa basılı olduğu müddetçe
WEND   yani bekleme yap şeklinde bir tanımlama işinizi görür. Tuşa basılı kaldığı müddetçe program bu satırlarda bekler. Bırakıldığı anda WEND komutundan sonra devam eder. Aynı işi IF satırı ile yaparsak bir etiket kullanmak zorundayız.
BEKLE:
IF TUS=0 THEN BEKLE   bu komutlarda programı tus basılı tutulduğu müddetçe orada bloke eder. Tuş bırakılınca bir sonraki satırdan program devam eder.
Bir tuşa basılınca led yansın ve yanık kalsın denildimi led in nasıl söndürüleceğinide belirtmek gerekir. Açıklamada bu belirtilmemiş. Ama yazılan ilk uygulamada sanki tuşa basılı olduğu müddetçe led yansın ama bırakılınca led sönsün gibi bir uygulama yapılmış. Tabiiki arkadaşların tespit ettiği gibi programı led yandıktan sonra bloke edip bırakmış arakadaşımız.
Sonuçta ledin nasıl söneceğine göre program değişiklik gösterir.
Yine örneklerde gösterildiği şekilde ya tuşa bir kere basılnca led yanar birdaha basılınca söner yada tuşa basılınca led yanar bırakılınca söner gibi iki ayrı mantıkla sistem çalışabilir. Bunların örneklerini vermiş arkadaşlar.

Ete

Powered by EzPortal