Tuş kontrol

Başlatan devreci22, 24 Mart 2016, 20:48:18

devreci22

Hocam merhaba aşağıdaki programda porta.0 ile porta.1 den siviç ten sinyal alıp  portc.0 ile portc.1- 2 adet role bağladım 4 adet tuş atadım bu tuşların program çalışırken role 1 tuşuna basılırsa portc.o çıkış versin role 2 tuşuna basılırsa portc.1 çıkış vermesini istemiştim  1 adet auto ve 1 tane manuel tuş ilave ettim auto tuşu basıp çekildiğinde porta gelen sinyal bilgisine göre roleler çıkış vermesini istiyorum ama bilgi lerim doğrulsunda yapamadım manuel tuşu na tuşu basıp çekildiğinde porta gelen sinyal bilgisine roleler çıkış vermeyecek yardım edebilir misiniz ? kod larım bunlar

bu kodla portb tuşlarının hep basılı olması lazım benim istediğim tuşa basıp çektiğimde hep basılı gibi işlemesi
'****************************************************************
'*  Name    : UNTITLED.BAS                                      *
'*  Author  : [select VIEW...EDITOR OPTIONS]                    *
'*  Notice  : Copyright (c) 2014 [select VIEW...EDITOR OPTIONS] *
'*          : All Rights Reserved                               *
'*  Date    : 17.9.2014                                         *
'*  Version : 1.0                                               *
'*  Notes   :                                                   *
'*          :                                                   *
'****************************************************************
'@ DEVICE pic16F877
'@ DEVICE pic16F877, WDT_off
'@ DEVICE pic16F877, PWRT_ON
'@ DEVICE pic16F877, PROTECT_OFF
'@ DEVICE pic16F877, XT_OSC
@ __config _INTRC_OSC_NOCLKOUT & _WDT_OFF & _MCLRE_OFF & _LVP_OFF & _CP_OFF & _BODEN_OFF & _PWRTE_ON

DEFINE OSC 4
ADCON1=7
TRISA=%00000011
TRISB=%00011111
TRISC=0
TRISD=0
TRISE=0
PORTA=0
PORTB=0
PORTC=0
PORTD=0
PORTE=0

OPTION_REG.7=0
W1 VAR WORD
W2 VAR WORD
SYMBOL ROLE1=PORTB.0
SYMBOL ROLE2=PORTB.1
SYMBOL AUTO=PORTB.2
SYMBOL MANUEL=PORTB.3


PAUSE 200

BASLA:
    COUNT PORTA.0, 1000, W1
   
    COUNT PORTA.1, 1000, W2   
   
    IF W1>=1 and PORTB.2=0 THEN HIGH PORTC.0
    IF W1=0 THEN portc=%00000000
    IF W2>=1  and PORTB.2=0 THEN HIGH PORTC.1
    IF W2=0 THEN portc=%00000000
GOTO BASLA
END

ete

Açıklamaların hem yetersiz hem çelişki var. Role1 tuşuna badınca portc.0 çıkış versin demişsin ama sen PortA.0 ıda değerlendirmişsin.
İşin senaryosunu madde madde yazman gerek. Başka türlü anlamam imkansız.

Ete

devreci22

#2
merhaba
porta.0
porta.1 iki tane sinyalim var
ana program bu iki sinyali işlerken 2 adet roleyi çıkış vermek istedim 
birde eş zaman lı 4 tuş ekledim algoritmaya

auto tuşuna 1 olursa ana program da sinyal varsa roleler hıgh  olucak
manuel tuşu basılırsa ana program işlenip  gelen sinyaller olsada role ler  hıgh olmuyacak
  ana tema bu kadar
not: butonlar hep hıgh da durmuyacak  basılı tutulursa hıgh bıraktığımda low çekiyor .

ete

Anladım ne istediğini bilmiyorsun sen. Sürekli bağladığın buton ve röleleri açıklıyorsun onları anladım.
Ama ortada 4 adet buton var 2 röle var ve 2 tane harici gitiş var bunların kombinasyon açıklaması lazım ben neye göre mantık yürüteceğim.
Senaryo diyorum bu lafla sistemi çalıştırmak anlamına geliyor.
PortA.0 a bak high ise sinyal geldi o zaman role1 butonuna bak high ise git portc.0 rölesini çektir
Auto tuşuna bak basılı ise git bilmem neyi çalıştır gibi açıklama gerek.

Üstelik program yazdım diyorsun sürekli yazdıklarınla çelişkili açıklama veriyorsun. Senmi yazdın bunları toparladınmı?  Programda tusa basılma konumu low olmuş sen şimdi tersini söylüyorsun.

Ete

devreci22

#4
PortA.0  bakıp hıgh ise role 1aktif &
Porta.1 bakıp hıgh ise role 2 aktif edebilmek için
Auto manuel tuşları kontrol edilecektir burdaki tuşları portb  kesmesini ile mi bakmalıyim
Program bu dongüde çalışırken  şayet auto manuel barak bitimi tanimlam  lazım manuel  bayrak biti aktif ise roleler çıkış vermeyecek auto bayrak biti aktif ise
roleler aktif edilmesi programdaki o 2 tuşu her iki konumda da   (auto&Manuel )de prog isler iken role leri ayri disaridan arici aktif edebilmek için tasarlanmış  tım. Hocam bilgi yetersizliği nden dolayı Özür dilerim başta size ve değerli forum üyelerine degerli vaktinizi bize hayırdiginiz icin saygiyla

ete

Ne istediğini tam olarak anlamak mümkün değil maalesef.
Açıklamalarına birikte bakalım;
"PortA.0  bakıp hıgh ise role 1aktif &
Porta.1 bakıp hıgh ise role 2 aktif edebilmek için
Auto manuel tuşları kontrol edilecektir "
Bu açıklama bana şunu söylüyor (program olarak)
IF PORTA.0=1 AND AUTO=1 THEN PORTC.0=1
IF PORTA.1=1 and AUTO=1 THEN PORTC.1=1

Peki MANUEL tuşu bu yukarıdakine benzer ne yapacak? Onu hala anlamış değilim. Anlayan varsa söylesin lütfen.
Ama programda 4 buton var, 2 ayrı giriş var iken şartlar yukarıdaki gibi iki satırla ifade edilmemeli. Mutlaka farklı şeyler var ama her ne hikmet ise bu devreci22 arkadaş bunu bir türlü izah edemedi.
Her neyse benim bu konuya başka desteğim olmayacak anlamadığım şeylere destek vermem imkansız.

Ete

devreci22

Hocam affınıza sığınarak ufak bir takildigim konu danışmak istiyorum 1 button basıp  bıraktığımız da ne şekilde hep Lojik 1 veya 0 olarak yapabilirim iyi çalışmalar; umarim anlat mışım dır kendimi

onurinci

hocam yanlış anlamadıysam basınca Toogle durumunda kalsın istiyor galiba...

devreci22

Evet ama bir değişken  mi tanımlamak  lazım orasını çözemedim ? 

ete

İki türlüde olur.

Toggle kullanarak ;
IF BUTON=0 THEN
    TOGGLE PORTC.0
ENDIF
Bu şekilde yapılır. Ancak bir defa bastın çıkış HIGH olur. Tekrar basarsan Çıkış LOW olur.
Her basıçta çıkış konum değiştirir.

Değişken kullanarak yapmak için bir tane DURUM VAR BIT şeklinde bit değişkeni tanımlarsın.
IF BUTON=0 THEN TOGGLE DURUM
PORTC.0=DURUM
dersin buda aynı işi görür.
Ete

devreci22

Teşekkür ederim Hocam

Powered by EzPortal