avatar_elektro77

12f629 ile tek butonla hemen acilan ve gecikmeli kapanan role

Başlatan elektro77, 27 Haziran 2018, 22:01:56

mg1980

Kodunuza
DEFINE OSC 4
OPTION_REG =%00000001   ' Genel Pullup açık
WPU=%000001                   ' Bu durumda GP.0'daki 10k dirence gerek kalmaz...
ilave edip dener misiniz...

Bir de şemanızda +23 yazılı bu nedir ?

elektro77

"Eğer bir konuyu öğrenmek istiyorsan o konunun öğretmeni ol; daha iyi öğrenmek istiyorsan o konuda bir kitap yaz; daha da iyi öğrenmek istiyorsan yazdığın kitabi oku"

elektro77

sizden tek bir şey istiyorum asağıdaki komutlarda tusun 1 saniyeden az bir süre basılı kalmasını algılamayan bir komutu nasıl ekleriz.
IF GIRIS=0 AND BILGI=1 THEN
while GIRIS=0 :WEND
SAYAC=SAYAC+1
PAUSE 200
ENDIF
"Eğer bir konuyu öğrenmek istiyorsan o konunun öğretmeni ol; daha iyi öğrenmek istiyorsan o konuda bir kitap yaz; daha da iyi öğrenmek istiyorsan yazdığın kitabi oku"

mg1980

Bu PIC ile bir kaç uygulama yaptım,sorunla karşılaşmadım...siz gerçek devrede denediniz mi...basit bir kod çalışması gerekir..Şemanızdaki +23'ün anlamı nedir ? Gerçek devrede deniyorsanız role bağlantısını çıkarıp dener misiniz ?

mg1980


IF GIRIS=0 AND BILGI=0 THEN
PAUSE 200
CIKIS=1
PAUSE 1000    'YENİ İLAVE
ENDIF

WHILE GIRIS=0 AND BILGI=1
PAUSE 2000
CIKIS=0
WEND
PAUSE 1500   'DAHA ÖNCE YAZDIĞIM İLAVE

elektro77

siz bu kodları gönderdiğim devrede simüle edip deniyormusunuz.
"Eğer bir konuyu öğrenmek istiyorsan o konunun öğretmeni ol; daha iyi öğrenmek istiyorsan o konuda bir kitap yaz; daha da iyi öğrenmek istiyorsan yazdığın kitabi oku"

mg1980

Ben de yaşlılığın verdiği yorgunluk mu nedir öyle bir sistem ve imkanım yok...Ben hep çalışmalarımı fiili olarak devrede deneyip sonuca ulaşıyorum.

elektro77

bence hiç uğraşmayın o zaman. cünkü simule etmeden olmuyor. verdiğiniz kodlar gerçek devredede istediğim gibi çalışmıyor. Siz zaten sorumu tam anlamadınız.
yinede vakit eyırdığınız için minnettarım. teşekkür ederim.
"Eğer bir konuyu öğrenmek istiyorsan o konunun öğretmeni ol; daha iyi öğrenmek istiyorsan o konuda bir kitap yaz; daha da iyi öğrenmek istiyorsan yazdığın kitabi oku"

ete

Soruyu çok iyi anlayamamıştım. Aslında anladımda böyle bir durumun sorun olamayacağını düşünerek her halde anlamadığım bir yer var diye beklemeyi tercih etmiştim.
Şimdi verilen cevaplarada bakıyorum ve olaya mantıkla yaklaşmanın doğru olacağını düşünüyorum.
Öncelikle istenen nedir ona bakalım.
İstenen bir tuşa basılacak tuş henüz bırakılmadan cihaz açılacak ve yeniden basıldığı zaman ise kapanacak.
Burada kilit noktalar şunlar;
-  tuşun cihaz kapalı iken basıldığı anda cihazın açılması
- Tuşun bırakılmasının takip edilmesi
- Araya bir tuş titremesi için gecikme koyulması
- Tekrar dan tuşa basılmanın takip edilerek basıldığı anda bu sefer cihazın kapatılması.
- Yeniden tuşun bırakıldığının kontrol edilmesi
şeklinde sıralanabilir.

Tek tuş olduğu dikkate alınarak tuşun basılma durumu yine tek bir komut ile algılanmalıdır.
Tuşun basılı olduğu tespit edildikten sonra işin ikinci safhası olan Cihaz açık mı yoksa kapalı mı olduğuna bakma kısmına geçilir.
Cihaz kapalı ise açılır ve Tuşun bırakılma safhasına geçilir.
Cihaz açık ise kapatılır ve yine tuşun bırakılma safhasına geçilir.

Şimdi mesajlara bakıyorum,
- Tusu bırakmıs olma sartını 2. if komutundan sonra aramam gerekiyor ama nasıl yapacağımı bilmiyorum.
bu kontrol mekanizması bir bütündür ve her şey bir çevrim içinde halledilmelidir. Aksi taktirde birisi açmaya zorlarken diğeri kapatmaya çalışır.

- 1.if komutunda tusu bırakmış olma sartına ihtiyacım yok. çünkü tusu basılı iken cihazın açılması gerekli.
Tuşun bırakıldığını kontrol etmezseniz iş daha da karmaşık hale gelir işin içinden çıkamazsınız. Tuş basılı iken cihaz açılacak ama o çevrimden çıkarsanız program tekrardan tuşun basılı olduğunu görerek bu seferde kapatmaya çalışır. Bu nedenle bütün iş yukarıda açıkladığım sıra ile yapılmalıdır.

Programda iki pin giriş yapılmış. Birisi GIRIS ismini almış diğer BILGI burada BILGI ne işe yarıyor tam olarak belli değil. Bu nedenle onu dikkate almıyorum.
Bana göre olması gereken şekil aşağıdaki gibi olmalıdır.
IF GIRIS=0 THEN  'tusa basılmış ise
  IF CIKIS=0 THEN  'cihaz önceden çalışmıyor ise
     CIKIS=1            'cihazı aç
     GOTO ATLA        'tuşun bırakılmasını kontrol'e git
  ENDIF
  CIKIS=0               'demekki cihaz çalışır halde imiş o halde cihazı kapat
ATLA:
  Pause 10
     WHILE GIRIS=0:WEND 'tuşun bırakılmasını bekle
     PAUSE 100  'tuş titremesini önlemek için biraz gecikme koy ve çık.
ENDIF

Programdaki genel eksikliklerde bahsedilmiş ama ben yinede sırası ile belirteyim.
- Çalışma frekansı DEFINE OSC 4 komutu ile verilmeli
- WPU=%00000001 ve OPTION_REG.7=0 komutları verilerek dahili pullup aktif edilmeli ve şemadaki buton direnci kaldırılmalı
- GPIO=%00000001 yerine GPIO=0 komutu verilmeli
- TRISIO=%00000001 verilmeli
- AÇılış gecikmesi PAUSE 300 ile BASLA satırından önce verilmeli

Çalışan kod ilişiktedir.

Ete

elektro77

Herzaman olduğu gibi yine harika bir analiz ve program yapmışsınız.
teşekkür ederi. program sorunzuz çalışıyor.
fakat arada ince nüanslar var.
1: cihaz kapatmak için tuşa basıldığında tus 1 saniyeden az olan basmayı algılamamalı.
çünkü bu arızalı olan cihazda bir ekran var ve tusa basıldıktan sonra ve basılı ıken  1 sn gectiğinde ekranda; cihaz kapatlılıyor goodby  yazıyor ve cihaz kapanamadan o şekilde kalıyor. Cihazın arızası bu. Ekran kapanamadan boyle kalıyor. ben yaptıgım devre ile enerjiyi keserek düzeltmeye çalışacağım.yani kısacası tus kapatma için basılı iken  1 sn zaman gerekli.
2: kapatma sırasında tusu bırakma sartını 1 sn sonunda arıyorum.
3: role 4 saniye sonra kapanmalı.

"Eğer bir konuyu öğrenmek istiyorsan o konunun öğretmeni ol; daha iyi öğrenmek istiyorsan o konuda bir kitap yaz; daha da iyi öğrenmek istiyorsan yazdığın kitabi oku"

elektro77

yada sadece
kapatmak için basıldığında 1 saniyeden az olan basmayı algılamamalı.
bu yetiyor.
"Eğer bir konuyu öğrenmek istiyorsan o konunun öğretmeni ol; daha iyi öğrenmek istiyorsan o konuda bir kitap yaz; daha da iyi öğrenmek istiyorsan yazdığın kitabi oku"

ete

İstenen şeyi açıklarken çok iyi açıklamak lazım. Karşılığında alınan şey açıklanan kadar oluyor çünki.
Şimdi bir ikilem dışında isteneni anladım gibi.
İkilem rölenin (ÇIKIŞ) kapatılması ile ilgili bir 4 sn sonra kapansın sonra kapatmada 1 sn algılansın yeterli demişsin. Ne istediğin pek anlaşılmıyor ama işime gelen röleye dokunmadan 1 sn algılamasını yapmak oldu.
BASLA:

IF GIRIS=0 THEN
  SAYAC=0
  WHILE GIRIS=0 AND SAYAC<1000
    SAYAC=SAYAC+1
    PAUSE 1
  WEND
  IF SAYAC=1000 AND CIKIS=1 THEN
     CIKIS=0
     GOTO ATLA
  ENDIF     
  IF CIKIS=0 THEN CIKIS=1

ATLA:
     WHILE GIRIS=0:WEND
     PAUSE 100
ENDIF

GOTO basla
END

Sadece değişmesi gereken kısmı verdim. Birde değişken tanımlamada SAYAC VAR WORD olmalı.

Sistem Çıkış kapalı (yada cihaz kapalı) iken Tuşa kısa da basılsa hemen sistemi açıyor.
Ama kapatmak için en az 1 sn (1000 ms) süre ile tuşa basılması gerekiyor. Aksi halde hiç bir şey yapmadan çıkıyor

Ete

elektro77

ellerinize saglık hocam.
program harika çalıştı.
çok teşekkür ederim.Allah size uzun ömür versin ki hep faydalanalım hocam.
"Eğer bir konuyu öğrenmek istiyorsan o konunun öğretmeni ol; daha iyi öğrenmek istiyorsan o konuda bir kitap yaz; daha da iyi öğrenmek istiyorsan yazdığın kitabi oku"

Powered by EzPortal