kesmesiz kesme nasıl yapılabilir

Başlatan mert3162, 13 Eylül 2015, 22:17:27

mert3162

merhaba üstadlarım geçenlerde bir arkadaşımla bir konuyu olurmu olmazmı acaba derken işin içinden cıkamayınca sizlere danışmaya karar verdim.

şimdi diyelimki 1 buton ve 1 ledden oluşan bir devremiz var

buton başlangıçta low durumda butona bastıktan sonra 1 dakika boyunca led yanıyor ve süre sonunda sönüyor (merdiven otomatiği gibi)

ancak bu 1 dakikalık süre içerisinde tekrar butona bastığımızda devre kendine reset atacak ve tekrar 1 dakika yanmaya devam edecek.

diyelim 42.saniyede bastım bastığım andan itibaren tekrar 60 sn sonra sönecek

kesme kullanmadan bu iş yapılabilirmi yapılırsa nasıl yapılabilir.

Kod istemiyorum sadece fikir istiyorum.(kod olarakta örnek verebilirsiniz mantığı anlatacak düzeyde :) )

yardımlarınız için şimdiden teşekkürler
|^^^^^^^^^^^^\ ||\
|__PICPROJE.ORG __
||'""|""\___
| _____________ l | |__|__|___| )
(@!)!(@)"""""**|(@) (@)****|(@)---------

 Üstadlarım nonstradam & Logan

mehmet

Her butona basıldığında zaman değişkeni 60sn. olacak
şekilde değiştirilir.
Olan olmuştur,
olacak olan da olmuştur.
Olacak bir şey yoktur.
---------------------------------------------
http://www.mehmetbilgi.net.tr

tekosis

delay komutunu 60000 msn vermezsin de 100msn bekleme verip for ile 600 defa döngüye sokarsın. döngünün her turunda buton kontrolü yaparsın. butona basılmışsa for döngüsünü tekrar başlatırsın.
İlim ilim bilmektir, ilim kendin bilmektir, sen kendin bilmezsin, bu nice okumaktır.

RaMu

Kesmesiz derken
sadece harici kesme (external interrupt) mi, yoksa
timer kesmeside mi kullanılmayacak?

Kesme kullanmayacaksan
butonu sürekli kontrol etmek zorunda kalırsın.

Kısaca butonun basıldığını algılayabiliyorsan
süre ile ilgili istediğini yapabilirsin.
Sorularınıza hızlı cevap alın: http://www.picproje.org/index.php/topic,57135.0.html

t600

butonu pul up ile  artıya çek . Buton eksi olduğunda bir dönrüde dword diye tanımladığın bir değeri artır , bu arada buton a sürekli bak , buton  eksiye düştüğünde değişkeni 0 yap

Gökhan BEKEN

RTC bile kurabilirsiniz, tabi içinde RTC olan bir mcu kullanıyorsanız ve kod kalabalığı olmasın istiyorsanız...
60sn sonrasına alarm kurarsınız,
eğer butona tekrar basılırsa alarmın süresini ötelersiniz, ya da eski alarmı iptal edip baştan 60sn sonrasına kurarsınız.
Alarm oluştuğunda otomatik olarak kesmeye düşersiniz.
Özel mesaj okumuyorum, lütfen göndermeyin.

ete

BU işi yapmanın iki yolu var. Birisi tamda sizin tabirinizle kesmesiz kesme ile diğeri ise döngü yardımı ile olur.
Kesmesiz Kesme ile yapılması:
TMR1 sayacını 500 ms de bir kesme yaratacak şekilde kurarsın.(Global kesmeleri aktif etmeden) Sadece TMR1 kesme bayrağını manual olarak kontrol ederek 120 kesme olup olmadığını kontrol edilecektir. Böylece 120 kesme süresi toplamda 60 sn edecektir. Bir tane byte değişkeni kullanırsın ve başlangıçta sıfır değerinde olan bu byte değişkeni kesme olduğunda değeri bir artırılır. Sonuçta değer 120 olunca led söndürülürek program en başa yönlendirilir.
Adım adım açıklama gerekirse;
- Tusa basıldımı ? basılmadı ise tekrar başa dön.
- Tuşa basıldı, Ledi yak. Kesme sayacını sıfırla. TMR1 sayacını kur 500 ms de bir kesme oluştursun. TMR1 sayacına bir ön yükleme değeri vereceksin bunu ver.
- While wend döngüsü kur ve döngü TMR1 kesme bayrağı olan PIR1.0=0 olduğu müddetçe dönsün. Bu esnada buton kontrolü de yap.
- Butona bu arada tekrar basılır ise TMR1 önyükleme değerini tekrar ver ve kesme sayacını sıfırla ki 60 sn daha çalışsın sistem.
- 500 ms dolunca kesme bayrağı 1 olacağı için wend sonrası satıra gelirsin.
- wend sonrasında kesme bayrağını sıfırla kesme sayacını 1 artır ve 120 olup olmadığını test et. Olmuş ise ledi söndür ve başa git. Değil ise tekrar TMR1 önyükleme değeri verilen While den bir önceki satıra git.

Döngü yöntemi ile yapılması
- Tuşa basıldımı kontrol et basılmadı ise tekrar başa git.
- Basıldı ise, Ledi yak ve 0-6000 arasında çalışacak bir döngü kur.
- Döngü içinde tuş kontrolü yap tuşa basılmış ise programı döngüyü yeniden kuracak şekilde yönlendir.
- Döngü içinde 10 ms lik gecikme koy.
- Döngü bitince ledi söndür ve tekrar en başa git.

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

haydarpasamikro

Mikro reset girişini kullan. Bu reset butonu ile herşeyi sıfırlayıp baştan başlatabilirsin. Buton basılmazsa 60 sn sonra işlem stop yapılır.
Mikro Dünyası.Haydarpaşa Teknik ve Endüstri Meslek Lisesi Mikrodenetleyici Atl. Şefi

Emre MERMİ


Alıntı yapılan: haydarpasamikro - 14 Eylül 2015, 20:42:49
Mikro reset girişini kullan. Bu reset butonu ile herşeyi sıfırlayıp baştan başlatabilirsin. Buton basılmazsa 60 sn sonra işlem stop yapılır.
Hocam çok güzel ve farklı bir bakış açısı olmuş [emoji4]

mert3162

Yorumlarınız için çok teşekkürler bir işi yapmanın sayenizde 5 farklı yolu olabildiğini öğrenmiş oldum şuanda işlerim oldukça yoğun sakin bir zamanımda hepsini denemeyi düşünüyorum.

|^^^^^^^^^^^^\ ||\
|__PICPROJE.ORG __
||'""|""\___
| _____________ l | |__|__|___| )
(@!)!(@)"""""**|(@) (@)****|(@)---------

 Üstadlarım nonstradam & Logan