16F88 İLE BUTON KONTROLÜ

Başlatan dedim, 03 Haziran 2015, 10:01:18

dedim

pic ile buton kontrolü yapmak ıstıyorum.ama söyle bır sey olurmu olmazmı?picin içideki yazılımı buton ıle aktıf yada pasif yapabiliyormuyuz.picin 1 pinine bır buton baglanacak.butona basıp bırakınca yazılım calısmaya baslayacak.butona bır daha basıp bırakıncada yazılım duracak.bıraz sacma sapan bır soru oldu ama tek butonla röle kontrol gibi düşündüm.ama röle yerinede yazılım calıscak yada durcak olurmu sizce?

F®T

#1
ANAHTAR VAR BIT

ANAHTAR=0

BASLA:
IF BUTON=0 THEN
TOGGLE ANAHTAR
WHILE BUTON=0
WEND
ENDIF

GOSUB PROGRAM

GOTO BASLA

PROGRAM:
IF ANAHTAR=1 THEN
.
.
.
.
ENDIF
.RETURN
"Hakk" şerleri hayr eyler Zannetme ki gayr eyler Ârif anı seyreyler Mevlâ görelim neyler Neylerse güzel eyler.

ete

Şöyle de olur;

SYMBOL TUS=PORTX.z  'X hangi port ise o z de hangi bit ise odur)
..
..

BASLA:
           WHILE TUS=1:WEND  'tusa basılıncaya kadar bekle
           PAUSE 10
             WHILE TUS=0:WEND 'tus bırakılıncaya kadar bekle
           PAUSE 10
BASLA_BIR:
                  WHILE TUS=1
        'buraya programı yerleştireceksin
.......
.......
.......
                 WEND
                 pause 10
                 WHILE TUS=0:WEND 'tusu bırakıncaya kadar beklet
                 GOTO BASLA


Ete

dedim

verdiginız kod parcacıgı için tesekkur ederım tam olarak anlatamadım picin herhangı bır pınınde bır buton olcak.bu butona  basıp bırakıldıgında  program calısacak.tekrar basıp bırakırsam program kapanacak.bunu su sekılde yaptım ama garip calısıyor

 Device= 16F628A
Xtal 4

TRISA=%00000000
TRISB=%11111111
CMCON=7
Symbol LED=PORTA.0         
Symbol buton=PORTB.1

Dim  ANAHTAR As Bit

ANAHTAR=0

BASLA:
If buton=0 Then
Toggle ANAHTAR
While buton=0
Wend
EndIf                           

GoSub PROGRAM

GoTo BASLA

PROGRAM:
If ANAHTAR=1 Then
Low LED
DelayMS 1000
High LED
DelayMS 1000
EndIf
Return
End

dedim

ete usta bu noktalı yerlere ne gelcek anlayamadım

ete

Daha açık nasıl anlatılır bilemiyorum. Her programın BASLA satırından evvel olması gereken tanımlamaları bulunur. SIGORTA , TRIS, varsa LCD, Değişken tanımları vs. bunlar BASLA satırından evvel olan noktaların yerine gelecek.
BASLA satırından sonraki noktalar iiçinde oraya yazdım zaten programın bıuraya gelecek diye.

Verdiğim kod tamda açıkladığın şeyi yapar.

Ete


F®T

#6
Kodun çalışması lazım.Eğer botona basarsan anahtar biti 1 olur bırakıyorsun.gosub ile programa gidiypr ve anahtar biti 1 ise kodun çalışıyor.kod sürekli çalışıyor.taki butona bi daha bastın.anahtar sıfır oluyor.gosubla gidiyor bakıyor anahtar sıfır.geri dönüyor.bu şekilde çalışır.
low led ile hıgh led yerini değiştir.
"Hakk" şerleri hayr eyler Zannetme ki gayr eyler Ârif anı seyreyler Mevlâ görelim neyler Neylerse güzel eyler.

dedim

#7
ETE USTAM

nerde yanlıs yapıyorum

  
Device= 16F628A
Xtal 4

TRISA=%00000000
TRISB=%00000010
CMCON=7
Symbol TUS=PORTA.0         
Symbol LED=PORTB.1

BASLA:
       While TUS=1:Wend  'tusa basılıncaya kadar bekle
       DelayMS 50
       While TUS=0:Wend 'tus bırakılıncaya kadar bekle
       DelayMS 50
BASLA_BIR:
While TUS=1
High LED
DelayMS 100
Low LED
Wend
DelayMS 10
While TUS=0:Wend 'tusu bırakıncaya kadar beklet
delayMS 50
GoTo BASLA

Şayet Tuşa basıllınca HIGH oluyor ise program şöyle olmalı,

BASLA:
       While TUS=0:Wend  'tusa basılıncaya kadar bekle
       DelayMS 50
       While TUS=1:Wend 'tus bırakılıncaya kadar bekle
       DelayMS 50
BASLA_BIR:
While TUS=0
High LED
DelayMS 100
Low LED
Wend
DelayMS 10
While TUS=1:Wend 'tusu bırakıncaya kadar beklet
delayMS 50
GoTo BASLA

dedim

cevabınıda bulmus oldum.isisde yanlış bacakları baglamısım.düzeltince oldu ama ete ustam basınca calısıyor bırkınca duruyor.ben basıp bırakınca calıscak tekrar basıp bırakınca durcak sekılde nasıl duzeltebılırım

ete

#9
Her şeyden önce tus basılınca port pini LOW mu (0) yoksa HIGH (1) mı oluyor ona karar ver. Çünki yazdığn kodda bu pek belli değil. Ben örnek verdim ama şeman olmadığı için kendime göre kullandım. Benim prensibim bir TUS basılınca LOW vermelidir. Ama pek çok arkadaş her ne hikmetse basılınca HIGH versin şeklinde kullanıyor.

Sonra tabiri caiz ise "Bindiğin dalı kesmek" diye buna denir işte.
TUS isimli butonu programı başlatmak ve durdurmak için kullanıyorsun. Buna bir itirazım yok. Ama bak bakalım sence bu aşağıdaki işlem mantıklımı sence?

BASLA_BIR:
While TUS=1  'yani tuşa basılmadığı müddetçe burada bekle demek istiyorum.
If TUS=1 Then
'ama sen tusa basılınca HIGH oluyor kabul etmişsin çünki bu ifade onu gösteriyor. Bu TUS=1 ifadesi burada ne geziyor? gerek varmı buna? WHILE TUS=1 ifadesi tusa basılıncaya kadar WEND e kadar olanları yap demek istiyor ama sen araya yine bir IF TUS=1 ise diye komut sokuşturuyorsun. Bu yanlış. Program zaten önceki satırlarda tusa basıldığını tespit etti ve programı çalıştırmak üzere BASLA_BIR satırına geldi. Orada yapılacakları yani aşağıdakileri yapacak

High LED
DelayMS 100
Low LED
EndIf
Wend

Tuşa dokunduğun an program bu satıra gelecek WEND satırını geçmiş olacak. Zira komutun başında WHILE TUS=1 iken demiştik Sen tuşa dokununca TUS=0 olacak (benim mantığıma göre ) ve program otomatikman WEND satırını geçip bu satıra gelecek. Burada tuşun bırkılmasını bekleyecek ve yeniden tuşa basılmasını beklemek üzere BASLA satırına gidecek.

DelayMS 10
While TUS=0:Wend 'tusu bırakıncaya kadar beklet
GoTo BASLA 


Ete

not: son yazdığın kodları düzelttim oraya bak istersen

dedim

#10
ete ustam program su halı ıle calısıyor ama butona basılı oldugu muddetce led yanıyor bırakınca sönuyor.benım yapmak ıstedıgım ise butona basıp cekınce led yancak(yanı program calısmasına devam edecek)ben tekrar butana basıp cekınce de led sönecek.(program calısmasını durdurcak)bir nevi tek dugme ile on off kontrol gibi ama benım yapmak ıstedıgım yazılımın calısmasını ve durmasını saglamak.

Device= 16F628A
Xtal 4

TRISA=%00000000
TRISB=%00000010
CMCON=7
Symbol TUS=PORTB.1         
Symbol LED=PORTA.0

DelayMS 200  'açılış gecikmesi

BASLA:
           While TUS ==1:Wend  'tusa basılıncaya kadar bekle
          DelayMS 10
             While TUS ==0:Wend 'tus bırakılıncaya kadar bekle
           DelayMS 50
BASLA_BIR:
While TUS ==1
High LED
DelayMS 100
Low LED
DelayMS 100 'söndüğünü görebilmen için onada gecikme vermen gerekir
Wend
DelayMS 10
While TUS=0:Wend 'tusu bırakıncaya kadar beklet
DelayMS 50
GoTo BASLA
End 


isis dosyasınıda eklıyorum ete ustam rıca etsem bır kontrol edebilirmisin

ete

Kod kısmına yazdığın kodu düzelttim. Onu derle ve kontrol et.
Mantığını az çalıştırıyorsun.!!!!!
Ete

dedim

tesekkür ederım ete usta protonda yenı yenı basladıgımdan dolayı mantık hatalarını cok yapıyorum dogru söyluyorsunuz.ledı acmak ve kapatmak yerıne yazacagım programıda tus vasıtaı ıle durdurup baslatabılırmıyım peki ustam sorularımla bunaltıyorum farkındayım ama acemıyım ustam kusuruma bakma

F®T

#13
Device = 16F628A
Xtal =4

TRISA=%00000000
TRISB=%00000010
CMCON=7

Symbol BUTON=PORTB.1         
Symbol LED=PORTA.0

Dim ANAHTAR As Bit

ANAHTAR=0

BASLA:
If BUTON=0 Then
Toggle ANAHTAR
While BUTON=0:Wend
EndIf
If ANAHTAR=1 Then
High LED
Else
Low LED
EndIf
GoTo BASLA
End



Bu kod çalışıyor.Ete hocamın dediği gibi pek mantık yürütmüyorsun heralde.proton help kısmında herşey mevcut.Kolay geldsin.
"Hakk" şerleri hayr eyler Zannetme ki gayr eyler Ârif anı seyreyler Mevlâ görelim neyler Neylerse güzel eyler.

dedim

proton help kısmında her mevcut  google ceviricide güzel ceviriyor.yardımlarınız ıcın tesekkur ederım.sıkıntı bende protonda yenı yenı yazmaya basladıgımdan dolayı mantık hatalarını cok yapıyorum.sorunum akıs dıyagramı cizmeden ne yapacak ne edecek ne calıscak ne sayacak demeden aklıma gelenlerı sormamdan kaynaklanıyor.daha öncede ete ustam sagolsun benı kırmıyor her soruma cevap verıyor.her ne kadar ögrenmek ıstesemde meslegımden dolayı cok fazla ugrasamıyorum.ama elektronık ve yazılım işini  seviyorum.meslegım elektrık-elektronık yapıların elektrık ve elektronık aksamlarınının alt yapısını olusturmak.yardımlarını esirgemeyen herkesten allah razı olsun.

Powered by EzPortal