Buton okuması?

Başlatan erdogan2734, 21 Kasım 2012, 16:17:18

erdogan2734

    Arkadaşlar Merhaba
   Bir müşterimizin özel bir isteği üzerine 5 butonlu yeni bir rf çalışması yaptık. Alıcı ve vericiyi dijital olarak şifreliyorum. Bilgi gönderip alıyorum. Ancak bir buton okumasında sıkıntı yaşıyorum. Öncelikle vericimden bahsetmek istiyorum. Vericim bildiğiniz (12 volt kumanda pili ile çalışan) tuşa bastığımda tüm devre enerjilenip sinyali yolluyor çektiğimde kapanıyor. Alıcım ise sürekli açık konumda bilgi bekliyor.
 
   Verici Tuşta kullandığım komut şu şekilde

IF TUS1=1 THEN                 
VER=1
LP=1                       
GOSUB GONDER
WHILE TUS1=1:WENd
gosub delay_on
LP=0
ENDIF

Verici tuşa basıldıysa bilgiyi yolluyor. Tuştan elimizi çekene kadar bekliyor. Elimizi çektiğimizde komple devrenin akımı kesileceğinden
tüm sistem kapanıyor.

Alıcıda ise

IF AL=1  THEN
SES=0
WHILE AL=1 :WEND 
AL=0
AL2=0
endif
       
Buradaki amacım tuşa bastığında alıcıdan uyarı sesi almam ne kadar uzun basarsa bastığı süre kadar ses alacağım.
Tuştan elini çektiği anda ses kesilecek. Ancak verici picin tuştan elimizi çektiğimizde enerjisi kesilipde yeni bilgi yollayamadığı için alıcıda ki ses takılı kalıyor. Mantık hatası yapıyorum. Yardımcı olursanız sevinirim.

Ekte verici kısmın resmi bulunmaktadır...
     
Bildiğim tek şey henüz hiç bir şey bilmediğim...

yamak

Enerjisini kesmeyin devrenin devre çalışmaya devam etsin.Sorun olur mu ki? Devreyi sürekli besleyin butona basıldığında da veri göndersin.Ya da devreyi yüksek kapasiteli bi kondasatör kullanarak bi rc devresi ile besleyin.Pic in bi pini ile de enerjini kesilip kesilmediğini kontrol edin.Eğer kesilmişse son bi kez buzzer ın susması için bi veri gönderin.

erdogan2734

yamak hocam
Basit elcik prensibi bu ürünlere sürekli enerji verildiğinde tahmin edebileceğiniz gibi pil çok çabuk bitiyor.
Ayrıca devreyi baskı devre falan olarak yaptık her şey hazır yazılımsal değişiklik yapmam gerek.
Yani olayı yazılımsal olarak çözmem lazım. Şu andan itibaren devrede değişiklik yapmam mümkün değil...
           Yinede fikirleriniz için teşekkür ederim..
Bildiğim tek şey henüz hiç bir şey bilmediğim...

diot

#3
IF TUS1=1 THEN                 
VER=1
LP=1                       
GOSUB GONDER                         ; <--- tuşa basıdıysa gönder.
WHILE TUS1=1:WENd                ; <---- tusa basılıysa bekle ... mantıken bırakıldıktan sonra devam etmesi lazım. çevrim içinde tuş kontrolü
                                                  ; yapılmadığından  tus1=1 olarak durduğundan bu çevrimden hiç çıkmaz. Tuşu bıraktığımızda elektrik
                                                  ; kesileceğinden  program alt satırdan itibaren devam etmiyecektir.


gosub delay_on
LP=0
ENDIF


alıcada ise

IF AL=1  THEN
SES=0
WHILE AL=1 :WEND   <--- burda sistem takılı kalır.

AL=0
AL2=0
endif

erdogan2734

Alıntı yapılan: diot - 21 Kasım 2012, 16:57:02
IF TUS1=1 THEN                 
VER=1
LP=1                       
GOSUB GONDER                         ; <--- tuşa basıdıysa gönder.
WHILE TUS1=1:WENd                ; <---- tusa basılıysa bekle ... mantıken bırakıldıktan sonra devam etmesi lazım. çevrim içinde tuş kontrolü
                                                  ; yapılmadığından  tus1=1 olarak durduğundan bu çevrimden hiç çıkmaz. Tuşu bıraktığımızda elektrik
                                                  ; kesileceğinden  program alt satırdan itibaren devam etmiyecektir.


gosub delay_on
LP=0
ENDIF


alıcada ise

IF AL=1  THEN
SES=0
WHILE AL=1 :WEND   <--- burda sistem takılı kalır.

AL=0
AL2=0
endif


Bende bundan bahsediyorum bunu çözmenin yolu yokmudur? Çünkü devreyi bitirdim  ve yazılımsal olarak halletmem gerek malesef.
Yardımcı olursanız sevinirim.
Bildiğim tek şey henüz hiç bir şey bilmediğim...

diot

yazılımı komple değiştirmeniz gerekli yada tuşa basma bırakıldıktan sonra 1-2 sn daha devrenin sağlıklı bir şekilde çalışması gerekli. Devreyi değiştiremiyeceğinize göre verici sürekli basılan tuşu test edip sürekli gönderim yapmalı bekleme çevrimine girmemeli. Alıcıda bu sinyal geldiğisürece yapması gereken işlemi işlemi yapmalı. Alınan sinyal kesildiğinde bırakmalı.

erdogan2734

Alıntı yapılan: diot - 21 Kasım 2012, 17:22:53
yazılımı komple değiştirmeniz gerekli yada tuşa basma bırakıldıktan sonra 1-2 sn daha devrenin sağlıklı bir şekilde çalışması gerekli. Devreyi değiştiremiyeceğinize göre verici sürekli basılan tuşu test edip sürekli gönderim yapmalı bekleme çevrimine girmemeli. Alıcıda bu sinyal geldiğisürece yapması gereken işlemi işlemi yapmalı. Alınan sinyal kesildiğinde bırakmalı.

Diot hocam
Olayı alıcıda çözeceğiz galiba. Aklıma pt entegreleri geliyor onlarda bu mantıkta çalışıyor eğer tuşa basarsa sinyal gidiyor.
Alıcı sinyal geldiği anda işlem yapıyor daha sonra sinyal kesildiğinde  işlemi bitiriyor. Bunu alıcı pic'e uydurmam gerekli. Hser komutunu Usart kesmesi
ile kullanıyorum. Sabah beri bir şeyler deniyorum ama sonuç alamadım hala...
Bildiğim tek şey henüz hiç bir şey bilmediğim...

diot

rf ile kullanıyorsan rf carrier dedect ile birşeyler yapabilirsin rf taşıyıcıyı dedekte ettimi sistem çalışmaya başlar. kodu alır, rf taşyıcı kesildimi işlem bitmiştir şeklinde yorumlayıp işlemi sonlandırır.

erdogan2734

Alıntı yapılan: diot - 21 Kasım 2012, 17:50:06
rf ile kullanıyorsan rf carrier dedect ile birşeyler yapabilirsin rf taşıyıcıyı dedekte ettimi sistem çalışmaya başlar. kodu alır, rf taşyıcı kesildimi işlem bitmiştir şeklinde yorumlayıp işlemi sonlandırır.

   Bunu nasıl yaparım peki?
Bildiğim tek şey henüz hiç bir şey bilmediğim...

diot

kullandığın rf alıcının rf dedecte çıkışı yokmu ? bir incele istersen kullandığın modulu.

erdogan2734

#10
Alıntı yapılan: diot - 21 Kasım 2012, 18:15:14
kullandığın rf alıcının rf dedecte çıkışı yokmu ? bir incele istersen kullandığın modulu.


BASLA:
IF AL=1 AND AL2=AL1 THEN
goto HORNM
else
gosub delay_on
endif
      .
      .
      .
      .
      .
      .
      .
      .

GOTO BASLA


HORNM:
Horn=0
gosub delay_ON
al=0
al2=0
GOSUB DELAY_ELLI

IF AL=1 AND AL2=AL1 THEN
goto HORNM
ELSE
HORN=1
GOTO BASLA
ENDIF

GOTO HORNM


BASLA dizini ile başlayan programımı başka bir alt programa yönlendirip şekildeki gibi bir yazılımla istediğim değişikliği yapabildim.
Şu anda sistem çalışıyor. Ama zamanlama çok önemli oradaki delay süreleriyle oynadığım zaman olmuyor. Bu haliyle sıkıntısız çalışıyor...

İlginiz ve yorumlarınız için teşekkür ederim...
Bildiğim tek şey henüz hiç bir şey bilmediğim...

Sdttn

Al değişkenini tek bit yapma 8 bit ve ya daha büyük olsun. İlgili düğmeye basıldığında devamlı bu bilgiyi göndersin. AL değişkenini devamlı olarak yenile.

sadogan

7805 in 5 volt tarafında kondansator kapasıtesini artırın buntondan elinizi çekseniz bile bir müddet daha devrenizi beslemeye devam eder.