Takılma

Başlatan zeka43, 03 Mayıs 2015, 14:28:39

zeka43

Arkadaşlar burda sorun nedir bazen buton cevap vermiyor




'****************************************************************
PAUSE 1000
DEFINE OSC 20
D1 var byte
D2 var byte

'-------------------------------------------------------------------------------
TRISB=%00000011
TRISA=%00000000
PORTA=0

@ DEVICE pic16F628A                                                   
@ DEVICE pic16F628A, WDT_OFF             
@ DEVICE pic16F628A, PWRT_ON             
@ DEVICE pic16F628A, PROTECT_ON         
@ DEVICE pic16F628A, LVP_OFF
@ DEVICE pic16F628A, MCLR_OFF
@ DEVICE pic16F628A, BOD_OFF
@ DEVICE pic16F628A, HS_OSC

CMCON=7               
OPTION_REG.7=0               

'-------------------------------------------------------------------------------
PAUSE 1000
PORTB.3=1 'TX AKTİF
PAUSE 100

Butonkontrol:
   
D1=0
D2=0

     
    Button PORTB.0,1,255,0,D1,0,ezan
    Button PORTB.1,1,255,0,D2,0,KAPAMA
    Goto Butonkontrol



Ezan: '2343
    PORTA.1=1
    PAUSE 100
    DTMFOUT PORTB.4,200,150,[1,1,1,1]
    Pause 150
    PORTA.1=0
    Pause 150
    PORTA.2=1
    PAUSE 100
    Goto Butonkontrol


KAPAMA:  '1379
   
     '1       
    PORTA.1=1
    PAUSE 100
    dTMFOUT PORTB.4,200,150,[0,0,0,0]
    pause 150
    PORTA.1=0
    PAUSE 150
    PORTA.2=0
    Pause 100
    Goto Butonkontrol
       
    End

t2

Butonlardan biri basıldıysa gecikmelerin olduğu bölüm işletiliyor. 500ms civarı gecikme var.

Bu esnada diğer buton basılmışsa, mevcut iş bitene kadar yeni basıulan buton algılanmaz. Sebep bu olabilir.

Belki de button komutu parametrelerini ayarlamak gerek. kısa basıldığı için algılamamış olabilir.

Alıntı YapButton komutunun yazılışı şu şekildedir:
BUTTON Pin,Bas,Gecikme,OtoTekrar,Degisken,Islev,Etiket Pin: Butonun bağlı olduğu pin


Bas: Buton basılı olduğunda, butonun bağlı olduğu pinin durumu ( 0 – 1 ). pull-up yapılmış buton için 0, pull-down yapılmış buton için 1. Biz örneğimizde pull-down bağlantı yaptık. Aşağıda pull-up ve pull-down bağlantı şekilleri anlatılmıştır
Gecikme: Gecikme yani butonun tekrar kontrolü için geçmesi gereken saykıl sayısı. 0 ile 255 arası bir değer yazılır. 0 yazıldıysa ark söndürme gecikmesi ve oto tekrar gecikmesi yapılmaz, 255 ise ark söndürme gecikmesi yapılır ama oto tekrar gecikmesi yapılmaz. Arasındaki değerlerde ark söndürme gecikmesi ve oto tekrar gecikmesi yapılır.
OtoTekrar: Butona sürekli basıldığında otomatik tekrar için beklenecek süre ( 0 – 255 )
Degisken: Dahili gecikme ve tekrar gerisayımı için kullanılan byte boyutunda değişken. Kullanılmadan önce sıfıra ayarlanmalıdır ve başka yerde kullanılmamalıdır.
Islev: Eylemin yapılacağı buton durumu (Buton basılıyken mi komutlar çalışacak yoksa değilken mi)
Etiket: Butona basıldıysa çalıştırılacak komutun etiketi

ete

Kullandığınız buton kontrolüne göre yada son iki parametrelerine göre,
Button PORTB.1,1,255,0,D2,0,KAPAMA  komut satırına hiç ulaşılamayacak. Ulaşılması için PORTB.0 da bağlı olan butona basılması gerekiyor.
İki butona aynı anda basamayacağınıza göre daha farklı bir komut kullanmanız gerekir.
Buton komutunda en sondaki iki parametreye bakın. Önce ilk satıra bakalım,
Button PORTB.0,1,255,0,D1,0,ezan    son iki parametre Action =0 ve Label=EZAN. Action=0 ise şayet tuşa basılmamış ise demektir. 1 olsaydı basılmış ise olacak idi. EZAN ise şayet tuşa basılmamış ise gidilecek etiket ismidir. Kısaca  siz  bu tuşa basılmamış ise EZAN isimli satıra git diyorsunuz.  O halde tuşalara basılmadığı müüdetçe program bu satıra gelecek ve oradan direk EZAN isimli satıra atlayacaktır. Böylece alttaki satıra hiç ulaşılmayacaktır.

Şu Button komutunu oldum olası sevmemişimdir. Komuta çok hakim olmadan kullanmamak gerekir. Çünki bir sürü parametresi var ve siz birini ayarlayım derken göz ardı ettiğiniz diğer parametreler oluyor. Tuş kontrolünü kendiniz yaparsanız hata yapma olsılığınız çok azalır.

Ete

Bilgi hazinedir paylaştıkça büyür.            http://etepic.com

zeka43

Yani hocam son olarak böyle diyebilirmiyiz
OPTION_REG.7=0
Button PORTB.0,0,255,0,D1,1,ezan
Button PORTB.1,0,255,0,D2,1,KAPAMA
Teşekkürler

ete

Sorunu anlamışsın çözümüde bulmuşsun. Deneyip sonuç alsan daha iyi olurdu.

Ete
Bilgi hazinedir paylaştıkça büyür.            http://etepic.com

zeka43

Sayenizde Hocam dediğiniz gibi bu komut sevilecek bir komut değil, kurulu devre şuan bende olmadığı için deneyemedim, ama sorunu anladım teşekkürler

ete

#6
Bu kadar karmaşık komut kullanacağıma Buton kontrolünü şöyle yapardım ben olsam.

Butonkontrol:
IF PORTB.0=1 then             'butona basılmış ise
  WHILE PORTB.0=1:WEND 'buton bırakılıncaya kadar bekle
  PAUSE 100                       'tuş kontak sıçramasını engellemek için bu gecikmeyi uygula
  GOTO EZAN                      'ezan etiketine git
ENDIF

IF PORTB.1=1 then 
  WHILE PORTB.1=1:WEND
  PAUSE 100
  GOTO KAPAMA
ENDIF
Goto Butonkontrol


Ete
Bilgi hazinedir paylaştıkça büyür.            http://etepic.com

zeka43

Teşekkürler Ete Hocam
Programı düzenledim bu kadar olur
En azından kafan rahat acaba şumuydu yoksa bu muydu

zeka43

Cihaz kendi mekanımda gayet güzel çalışıyor, bu kadar olur demiştim
Takacağım yer de pek yakın değil gittim taktım bir de ne göreyim kendi kendine habire cihaz çalışıyor prize takılı olan tüm cihazların fişini çektim yok değişen bir şey yok
aynı sigorta ayarları ile bir önceki program çalışıyor ama yeni düzenleme olmuyor
Dedim herhalde işlemciyi bozduk b.sayar da yoktu yanımda geri döndüm mekanda yine düzgün çalışıyor.
önceki program yukarıdaki gibi yenisi
PAUSE 1000
DEFINE OSC 20

'-------------------------------------------------------------------------------
TRISB=%00000000
TRISA=%00001000
PORTA=0

@ DEVICE pic16F628A                                                   
@ DEVICE pic16F628A, WDT_OFF             
@ DEVICE pic16F628A, PWRT_ON             
@ DEVICE pic16F628A, PROTECT_ON         
@ DEVICE pic16F628A, LVP_OFF
@ DEVICE pic16F628A, MCLR_OFF
@ DEVICE pic16F628A, BOD_OFF
@ DEVICE pic16F628A, HS_OSC

CMCON=7               
OPTION_REG.7=0               

'-------------------------------------------------------------------------------
PAUSE 1000
PORTB.7=1 'TX AKTİF
PAUSE 100



Butonkontrol:
IF PORTA.3=1 then             'butona basılmış ise
  WHILE PORTA.3=1:WEND 'buton bırakılıncaya kadar bekle
  PAUSE 100        'tuş kontak sıçramasını engellemek için bu gecikmeyi uygula
  GOTO EZAN                      'ezan etiketine git
ENDIF
goto butonkontrol


Ezan: '2343
    PORTA.0=1
    PAUSE 100
    DTMFOUT PORTA.2,200,150,[1,1,1,1]
    Pause 100
    PORTA.0=0
    Pause 100
    PORTA.1=1 ' ezan mikrofounu aktif
    PAUSE 100
IF PORTA.3=1 then             'butona basılmış ise
  WHILE PORTA.3=1:WEND 'buton bırakılıncaya kadar bekle
  PAUSE 100        'tuş kontak sıçramasını engellemek için bu gecikmeyi uygula
  GOTO KAPAMA                      'ezan etiketine git
ENDIF   
GOTO Ezan

KAPAMA:  'C,C,C,C
   
     '1       
    PORTA.0=1
    PAUSE 100
    dTMFOUT PORTA.2,200,150,[0,0,0,0]
    pause 100
    PORTA.0=0
    PAUSE 100
    PORTA.1=0  'Vaaz mikrofonu aktif
    Pause 100
    Goto Butonkontrol
       
    End
'------------------------------------------------------------------------------

zeka43

Teşekkürler Hocam en kısa zamanda uyarlayıp deneyeceğim.

zeka43

Nasıl böyle basit bir hata yapmışım şaşırdım ezana dallanınca sürekli kapatma şifresi gönderiyor.
Bu sefer oldu salla gitsin demeyeceğim dedim yeni bilgiler de öğrendik iyi oldu.
OPTION_REG.7=0  pull-up komutuna emin olamadım iptal edip yani sildim kendim pull-up yaparak denedim çok garip, program IF PORTA.3=1 yapınca da çalışıyor IF PORTA.3=0 yapınca da ve buton ucuna cımbız ile dokunduğumda butona basılmış gibi davranıyor bu normalmidir, yani bu sorunu çözebilirmiyim diye denemeler yaptım değişen birşey yok.

zeka43

Buton sorunun önüne geçemedim yoksa bu normal mi
10-15cm buton kablosu, buton komutu ve diğer türlü, birsürü deneme yaptım
butonun ucuna metal ile dokunulduğunda basılmış gibi hareket ediyor şaseye 470nF attım sıkıntı çözüldü gibi her dokunmada çalışmıyor nadir oluyor

F.T

ıf buton=1 then demişsen şunu düşünmek lazım.ben butona basınca pic girişine 1 gelecek.Basmadı isem 0 yani şase gelecek.Yani aslında butonun bağlı olduğu pic girişi 10kohm ile şasede olmalı.Böyle olduğu taktirde buton girişi sürekli şasede olacağı için şartın aktif olmaz.Taki butona basana kadar.Butona basınca buton artıyı alıp pic girişine verir ve pic ayağına artı gelir.O zaman ıf buton=1 then şartı sağlanır ve bu şartın içindeki işlenir.
Hakk şerleri hayr eyler Zannetme ki gayr eyler Ârif anı seyreyler Mevlâ görelim neyler Neylerse güzel eyler.

zeka43

Aynen öyle ama nasıl oluyor da iki şekilde de program çalışır anlamıyorum benim derleyici de mi bir sıkıntı var bilmiyorum
Buton için ekstra bir önlem program ve donanım olarak yapmam gerekir mi, butonun bu kadar hassas olması 20mhz osilatör kullanıyor olmam olabilir mi