buton hakkında

Başlatan yolcu27, 25 Mart 2016, 19:39:57

yolcu27

saygıdeğer forum üyeleri aşağıdaki verdiğim kodlarda her etikette 2 adet portb logic değerleri var. birisi çakar olması için bu şekilde. sorum şu olacak buradaki kodlarda butona basılması için beklenen süre 1 sn. yani bu 1.sn süre boyunca butona bassamda etki etmiyor.

şimdi size iki sorum olacak.

1- bu bekleme yerine etiketin herhangi bir satırı gerçekleşirken butona bassam etiketi değiştirmesi için nasıl bir ekleme yapmalıyım.

2- portb6 ye bağlı bir ledi hiçbir komuttan etkilenmeden sürekli bağımsız olarak çakar şeklinde yakabilir miyim
yani etiketlerin içerisindeki yanip sönmeler butona basmalar saniyeler falanlar filanlar hiçbir şey etkilemeyecek sadece yazmış olduğum 500ms bekle yan 500ms bekle sön şeklinde devam edecek enerji verip taki kesene kadar?



          
A:
  portb=%01100000     
   pause 500
   portb=%01000000
   pause 500
  A1:
portb=%01100001
pause 500

portb=%01000001
pause 500

if porta.0=1 Then bcd
if porta.2=1 then bce
goto a1

dursuncemal

interrupt kullanmalisin ayrica kurdugun interrupta a fonksiyonunun icinde yaptigin iside yaparsin.
:=

yolcu27

hocam tam istediğim şey aslında port6 ya bağlı led çaksın dursun etiketlerin içinde bunun için ekstra kod yazmayayım.bu şekilde buton süresini kısabiiliyorum. en azından 500ms bekleme koyuyorum yeterli oluyor.

amacım portb6 ya bağlı ledin bağımsız şekilde akım gelince cakmaya başlasın taki enerji kesilene kadar.

aynı zamanda ben portb ye bağlı diğer pinler ile farklı kombinasyonlarla diğer ledleri yakıyorum.

şuan kodları yazarken örnekteki gibi mesela portb1 portb2 portb3 yanıyor ve portb6 çakar şeklinde tekrarlıyor etiket içinde.

ben bu çakarı etiket ile değilde sürekli olarak başka şekilde yapmak istiyorum. kendimi anlatabilmişimdir umarım.

dursuncemal

ben seni analdim ama sen beni anladin mi onemli olan anladigim kadari ile su anda yeni yeni ogrenmaya basliyorsun. ama bu tip zamanlamalarda cok nadiren boyle uzun delaylar kullanilir.onun icin interrupt kullanmayi ogren bence.evt bbaktim uzun delaylar kullanarak yazmana ragmen cok ta iyi yazmisin.basic bilmedigim icin tarif olsun diye yazicam > if porta.0=1 Then portb=%01000001 dersen butona basili tutugun surece cakmasi lazim.
:=

yolcu27

if then komutlarını az çok öğrendim kullanmakta sıkıntı çekmiyorum.

dediğiniz gibi yeniyim daha bu bahsettiğiniz interputa bakayım bir.

dursuncemal

benim basic bilgim yok ama ustad cok guzel anlatmis sabirla takip edersen ogrenirsin.http://etepic.com/index.php?board=7.0
:=

yolcu27

çok amelece oldu ama yaptım 500ms lik aralara butonu koydum ve çakarın yanıp sönmesini etkilemedi.

yani ilk 500ms likten sonra koydugum if komutunda bir etikete git
ikinci 500ms likten sonra koyduğum if komutunda başka bir etikete git şeklinde kombinasyonlar yaptım.

aynı tuşa hangi aralıkta basılırsa ona göre etikete yöneliyor oradada aynı mantık ile kendimce bir döngü oluşturdum. ama güzel oldu.

şimdilik hallettik

mehmet

#7
Neden "Stage State Machine" mantığını incelemiyorsunuz?

Düzeltme:
Yazım hatası...
Olan olmuştur,
olacak olan da olmuştur.
Olacak bir şey yoktur.
---------------------------------------------
http://www.mehmetbilgi.net.tr

yolcu27

Alıntı yapılan: mehmet - 26 Mart 2016, 21:25:46
Neden "Stage Machine" mantığını incelemiyorsunuz?

Hocam biraz açar mısınız bir kac cümle ile bu mantığı.
Daha önce de yazdığım gibi çok acemiyim bu konuda. Kendi çapımsda gerçek olması gereken givi olmasa da geçici çözümler buluyorum böyle ama tam olarak istediğim gibi dd değil yani sadece şuan işlevini yapmakta. Hala o 500ms lik araya denk gelince buton tutukluk yapıyor.

dursuncemal

     "state machine" olsa gerek.
:=

yolcu27

birisi az bir örnek verse daha güzel olacak :)

mehmet

Alıntı yapılan: dursuncemal - 27 Mart 2016, 17:24:53
     "state machine" olsa gerek.

Haklısınız yanlış yazmışım. "State Machine" olacak...

Kısaca şöyle anlatılabilir;
bir timer belli bir sürede kesmeye ayarlanır. Kesme içerisinde
bir genel değişken artırılır. Ana döngüde bu değişken kontrol
edilir. İlgili değerlerde belli işler yaptırılır. Bir döngüde yapılan
işler bitince bu genel değişken sıfırlanır...
Olan olmuştur,
olacak olan da olmuştur.
Olacak bir şey yoktur.
---------------------------------------------
http://www.mehmetbilgi.net.tr

dursuncemal

timerin icindeki bir degiskeni ana dongu icinde kontrol etmek cok mantikli geimedi. zira ana dongumuzun kesmeden cok cok  uzun oldugu bir durumda  veri kacirma sansimiz yokmudur? yada ben mi yanlis anladim?
:=

bigbey

Bir önerim var..
Timer0 kesmesi kullan tmr0 oluştuğunda diyelimki 50mSn geçmiş olsun interrupt rutininde bir değişkeni her timer interrupt'ında 1artırırsın değer 10 olunca 500mSn dolmuş olur. flaş yapan ledini konum değiştirirsin. diğer zamanlarda buton sor ne istersen yap. flaş ledi devamlı interrut'a bağlı olarak çalışır. sende diğer işlerini yaparsın.
TA6R

yolcu27

Kod olarak bir örnek varmı acaba. Cakar sürekli yansin sonsun . ben ise buton ile etiketler arası geçiş yapayım. Port önemli değil ornek kod gorsem kendi projeme uyarlamaya çalışırim.  Acemi olduğum için ornek kod olmadan açıkçası fazla birşey anlamiyorum . şimdiden anlayışınız için teşekkürler