S

Button Basili iken islem devam etmesi yardim !!

Başlatan Seref66, 10 Kasım 2013, 14:38:14

Seref66

Slm Ete bey ve Arkadaslar ben yeni Pic Programlama ya basladim ve ilk sorunun ile karsilastim.
Bir garaj kapisi devresi yapiyorum ve burada su sorun ile karsilastim:

  1. Kulandigim program Proteus
  2.PIC 16f84a

  Calisma mantigi söyle

  sadece bir button var ve buttonun komutlari söyle

1. basmada: motor Saga dönüyor
2. basmada: motor Duruyor dönüyor
3. basmada: motor Sola dönüyor

simdi 1. basmada garaj kapisi kapanip son noktaya geldiginde oradaki dur dügmesine basinca sistem duruyor .

buraya kadar hersey normal, simdi sorun su : bundan sonra verdigim komutlari almiyor nedeni bu son dügmeden devamli komut veriyor ve diger geri ac komutunu veremiyorum

bu konuda yardimci olabilirmisiniz.



codlar söyle:


TRISA=%11111          'A portu giris, olarak ayarlandi
TRISB=%00000000       'B portu cikis, olarak ayarlandi

PORTA=0
PORTB=0

SURE VAR BYTE

BASLA:


IF  PORTA.1=1 THEN

  LOW PORTB.0
  LOW PORTB.1
  LOW PORTB.2
  LOW PORTB.3
 
  SURE=2
   PAUSE 100

     
goto basla
 
endif


IF  PORTA.2=1 THEN

  LOW PORTB.0
  LOW PORTB.1
  LOW PORTB.2
  LOW PORTB.3
 
  SURE=0
 
  PAUSE 100


goto basla

endif

IF  PORTA.0=1 THEN

  SELECT CASE  SURE
 
  CASE 0
  HIGH PORTB.0
  LOW PORTB.1
  LOW PORTB.2
  LOW PORTB.3
  PAUSE 100
  SURE=1
 
  CASE 1
  LOW PORTB.0
  HIGH PORTB.1
  LOW PORTB.2
  LOW PORTB.3
  PAUSE 100
  SURE=2
 
  CASE 2
  LOW PORTB.0
  LOW PORTB.1
  HIGH PORTB.2
  LOW PORTB.3
  PAUSE 100
  SURE=3
 
  CASE 3
  LOW PORTB.0
  LOW PORTB.1
  LOW PORTB.2
  HIGH PORTB.3
  PAUSE 100
  SURE=0
 
  END SELECT
 
ENDIF



ete

Butonlara 12V bağlamışsın basınca pic pinine 12V gidiyor. Bu donanım kusurun. 5V tu geçmemeli.
İkincisiprogramlar tekrar eden işlemler dizisidir. Ancak başlangıç komutları yalnızca bir kere işlenir. Genelde tekrar etmesi gereken komutlar BASLA satırı ile GOTO BASLA komut satırları arasına yerleştirilir. Sende eksik olan programın sonunda bir GOTO BASLA komut sayırının olmaması.
Ete

Seref66


Seref66




malasef sorun ayni eger dogru yapmis isem...


'****************************************************************
'*  Name    : GARAJ KAPISI                                      *
'*  Author  : SEREF                    *
'*  Notice  : Copyright (c) 2013 [select VIEW...EDITOR OPTIONS] *
'*          : All Rights Reserved                               *
'*  Date    : 08.11.2013                                        *
'*  Version : 1.0                                               *
'*  Notes   : GARAJ KAPISI KONTROL SISTEMI                                                  *
'*          :                                                   *
'****************************************************************


TRISA=%11111          'A portu giris, olarak ayarlandi
TRISB=%00000000       'B portu cikis, olarak ayarlandi

PORTA=0
PORTB=0

SURE VAR BYTE


BASLA:


IF  PORTA.1=1 THEN

  LOW PORTB.0
  LOW PORTB.1
  LOW PORTB.2
  LOW PORTB.3
 
  SURE=2
  PAUSE 100

     
goto basla
 
endif


IF  PORTA.2=1 THEN

  LOW PORTB.0
  LOW PORTB.1
  LOW PORTB.2
  LOW PORTB.3
 
  SURE=0
 
  PAUSE 100


goto basla

endif

IF  PORTA.0=1 THEN

  SELECT CASE  SURE
 
  CASE 0
  HIGH PORTB.0
  LOW PORTB.1
  LOW PORTB.2
  LOW PORTB.3
  PAUSE 100
  SURE=1
 
  CASE 1
  LOW PORTB.0
  HIGH PORTB.1
  LOW PORTB.2
  LOW PORTB.3
  PAUSE 100
  SURE=2
 
  CASE 2
  LOW PORTB.0
  LOW PORTB.1
  HIGH PORTB.2
  LOW PORTB.3
  PAUSE 100
  SURE=3
 
  CASE 3
  LOW PORTB.0
  LOW PORTB.1
  LOW PORTB.2
  HIGH PORTB.3
  PAUSE 100
  SURE=0
 
  END SELECT
 
ENDIF

GOTO BASLA

END

Seref66



burdaki sorun anladigim kadariyla kapandi button porta.1 devamli puls veriyor
belki kapi kapaninca cok kisa puls verip normale dönse calisir sanirim ama nasil ???

ete

Elbette bu bir hata.  İsisde buton üzerine kursörü götürüp ara tuşuna basarak düzeltmek gerekir.
Yinede programın yazılış mantığı çok güzel değil. Bana kalırsa yeniden bir şeyler karalamak daha doğru olur. Ancak bunun için daha iyi bir senaryo gerekir. Sonuçta bu bir garaj kapısı kontrolü ve mümkün olan en basit şekilde çalışmalıdır. En basit sistem iki şekilde olabilir. Tek butonlu bir sistemde butona basılınca kapı açılmalı limit swiche ulaşınca sistem durmalı butona tekrar basılınca kapı kapanmalı yine limit switch de durmalı. Bu açıklamaya göre programı yazmak zor değil.
Tuş tek olduğuna göre; basılınca kapı açıkmı yoksa kapalımı belirlemek gerekir. Bu nedenle ACIK diye bir bit değişkeni kullanmak doğru olur. Açma kapama butonuna tus ismini verelim.
If tus=0 then
   If ACIK=0 then   'Şayet kapı kapalı ise
      Role_Ac=1       'Motoru açma yönünde çalıştır
       While limit_ac=1:wend.   'Acma yönündeki limit sw kanmamış ise bekle
       ACIK=1
        Role_ac=0
   Else
      Role_kapa=1
      While limit_kapa=1:wend
       ACIK=0
       Role_kapa=0
    Endif
    While tus=0:Wend.  'Tusa hala basılıyor ise bırakıncaya kadar bekle
     Pause 30
End
Goto basla

Bu kadarlık kod bütün işi kontrol eder.
Ete

İlyas KAYA

#6
Ben garaj kapısı için yaptığım sistemi şu şekilde uyguluyorum.


Buton sadece bir değişkenin değerini değiştirir. Aşağıda örnek kod verdim. Yazımda hatalar olabilir burada yazdım. Maksat mantığını anlatmaktır.




KES=0

BASLA:

IF BUTON=0 THEN KES=0            ' BUTONU BIRAKTIĞINDA KES'İ 0 YAPARAK TEKRAR BASILMASI İÇİN HAZIR HALE GELİR

IF BUTON=1 AND KES=0 THEN        'BUTONA BASILDI İSE
KONTROL=KONTROL+1
KES=1                                              'KES=1 OLDUĞU İÇİN SÜREKLİ TEKRAR ETMEZ.
ENDIF

SELECT CASE KONTROL
CASE 0                             ' KONTROL 0 İSE MOTORU DURDUR
MOTORGERI=0
MOTORILERI=0
CASE 1                             'KONTROL 1 İSE GERİ HAREKET
MOTORILERI=0
MOTORGERI=1
CASE 2                          ' KONTROL 2 İSE MOTORU DURDUR
MOTORGERI=0
MOTORILERI=0
CASE 4                          'KONTROL 3 İSE İLERİ HAREKET ET
MOTORGERI=0
MOTORILERI=1
CASE 5                         ' KONTROL 5 OLDUĞUNDA KASET 0 'A DÖN BÖYLECE MOTORLARI DURDUR.
CONTROL=0
END SELECT
PAUSE 100
GOTO BASLA


Göz odur ki dağ ardını görsün,
Akıl odur ki başa geleceği bilsin.!

pwm.c

#7
bence PIC ile devre yapmana gerek yok ama otomatik kapanması için zamanlayıcı yada engel sensörü gibi bişeyler eklemek istiyorsan durum değişir.

şurada PIC kullanılmadan yapılmış bir düzenek var:

buzdolaplarındaki NC anahtarlarla işi halledebilirsin.
_/\/\/\_ -[ı- -ı>|- -|ı|ı|ı- -ı< -||- -l[]l-

Seref66

yapmak istedigim daha ileri düzende bir kontrol devresi bunu garaj kapisinda oldugu gibi yada panjur gibi ( gece gündüz ) otomatik acma kapama sisteminindede kullanilabilir hale getirmek istiyorum.Aslinda yillardir VB.net ( Program yazilimciligi da ögrendim ) programlama mantigini yabanci degilim tek sorun burda elektronik ile birlikte calisacak bu konuda eksikligim var.

bu devrede ayrica kapi kapnirken herhangi bir tehlike aninda laser ile konrol da edecegim..

o yüzden belki sizlerinde yardimi ile kapsamlai bir devre ortaya cikarabiliriz.:-)

pwm.c

engel sensörü için lazer tavsiye etmem. IR sensörlerden kullanmalısın. bunların hazırı var ister onlardan al istersen kendin yap. örnek uygulamalar için googlede "IR Beam Break Detector" arat.
_/\/\/\_ -[ı- -ı>|- -|ı|ı|ı- -ı< -||- -l[]l-

Seref66

Laer neden olmaz ? IR Beam Break Detector iki sensor arasi kac metre kadar calisir mesela 4-5 metre olurmu?

pwm.c

Lazerin çok kısa bir ömrü var ve alıcı sensörü gün ışığından etkilenir.
IR sensörler modüleli çalışır ve harici ışıklardan etkilenmez. IR ledin ışığını da gözle göremessiniz. mesafesi ise o sensörün hassasiyetine göre değişir. 10m den fazla mesafeli olanları bile var.

buarada, hangi sensörü kullanırsanız kullanın ledi yada lazeri sürekli çalıştırmayın. sadece kapı kapanırken aktif olsun.

yukarıdaki çizdiğiniz devre hakkında şunları söylemek istiyorum:
1- 16F84A artık demode oldu. daha iyi bişey tercih edin.
2- LED ve transistörlere mutlaka direnç ekleyin.
3- butonları Pull-up olarak kullanın.
4- röle bobinine paralel bir diyot ve 5v beslemeye 100n eklemeyi unutmayın.

yazılım hakkında şunu belirteyim ki, bir ana döngü yapıp buradan dallandırın. alt programın işi bitince tekrar ana döngüye yönlensin. tabi bu bir tavsiye. size en kolay nasıl gelirse onu kullanın isterseniz etiket eklemeden for yada while döngüleriyle bile yapılabilinir.
_/\/\/\_ -[ı- -ı>|- -|ı|ı|ı- -ı< -||- -l[]l-

Seref66

önerilerin icin tsk eger yazdigimi incelemek ve degisiklik yapmak istersen gönderebilirim..

Seref66

slm arkadaslar  pic programliyorum ve yapmak istedigim söyle:


bir buttona devamli bastigimda sadece button dan 1 kere kisa bir puls cikacak 1-2 saniye sonra kesilecek, ama button hale basili duracak. ta ki tekrar ben acana kadar...

MS_59

IF TUS=0 THEN
      LED=1
      PAUSE 1000
      LED=0
      WHILE TUS=0:WEND
ENDIF
mehmet

Powered by EzPortal