CCS C ile Buton Arkı önleme

Başlatan makine_terbiyecisi, 17 Nisan 2016, 11:17:04

makine_terbiyecisi

Merhaba arkadaşlar..

Projemdeki Tuş takımının ark oluşturmasını yazılımsal olarak önlemek istiyorum ..
Şöyle Bir kod yazdım olur mu ?
if(input(s1))    {while(input(s1)); tus=1;}
if(input(s2))    {while(input(s2)); tus=2;}


Burada while döngüsü ARK ı önler mi ?
# ÖĞRENELİM, ÖĞRETELİM #

sadogan

% de 100 olmasada önler. while içerisini birkaç ms niyelik delay la daha garanti olur.
Ancak buton basılı olduğu sürece başka işlem yapamasınız.

makine_terbiyecisi

Alıntı yapılan: sadogan - 17 Nisan 2016, 13:03:04
% de 100 olmasada önler. while içerisini birkaç ms niyelik delay la daha garanti olur.
Ancak buton basılı olduğu sürece başka işlem yapamasınız.

yanıtınız için teşekkür ederim ...
Bu beklemeden KESME fonksiyonları etkilenir mi ?
# ÖĞRENELİM, ÖĞRETELİM #

hakansefau

Burada butonu bırakmanızı sürekli bekleyecektir. Sizin exorlama mantığını düşünerek araya debounce süresi eklemeniz gerekecek. http://hackaday.com/2010/11/09/debounce-code-one-post-to-rule-them-all/ Bu linklerdeki çalışmaları deneyebilirsiniz. Aslında yapacağınız butona basıldığını algıladıktan sonra ne kadar süre sonra bırakıldığını kontrol edeceğinizi debounce süresi olarak ekleyip çalıştırabilirsiniz.

dursuncemal

#4
buton okulalarinda butonun statusunu while dongusu ile kilitlemek son derece yanlis bir uygulamadir.buna ragmen kullanacak isek  eger araya delay girmessen kesinlikle onlemez.ayrica bu delaylardan kesme fonksiyonu etkilenmez fakat programinizin ana dongusu kesinlikle etkilenir.bu durumun onune gecmek icin tuslarinizi ya timer interrupta yada external chage interrupta okumaniz cok daha efektif olacaktir.

Alıntı yapılan: makine_terbiyecisi - 17 Nisan 2016, 11:17:04
Merhaba arkadaşlar..

Projemdeki Tuş takımının ark oluşturmasını yazılımsal olarak önlemek istiyorum ..
Şöyle Bir kod yazdım olur mu ?

if(input(s1))    {delay_ms(1);  while(input(s1)); tus=1;}
if(input(s2))    {delay_ms(1);  while(input(s2)); tus=2;}


Burada while döngüsü ARK ı önler mi ?
:=

Endorfin35+

while döngüsüne girmeden buton arkı önlenebilir mi?

aynı anda iki buton ile sayaç kullanıyorum. delay kullanınca yanlış sayıyorum.
"İşi bilen yapar, az bilen akıl verir, bilmeyen eleştirir, yapamayan çamur atar."

tekosis

birşeyler saymanız gerekiyorsa timerleri kullanın. Yoksa illaki sıkıntı olur.
İlim ilim bilmektir, ilim kendin bilmektir, sen kendin bilmezsin, bu nice okumaktır.

makine_terbiyecisi

Alıntı yapılan: Endorfin35+ - 04 Mayıs 2018, 18:16:13while döngüsüne girmeden buton arkı önlenebilir mi?

aynı anda iki buton ile sayaç kullanıyorum. delay kullanınca yanlış sayıyorum.

Timer 2 modülünü kullanarak delay yapman gerekiyor. CCS C kendi delay fonksiyonu kesmeleri etkiler.
Hatta watchdogtimer kurulu ise pic reset yer.
# ÖĞRENELİM, ÖĞRETELİM #

Salih

Alıntı yapılan: makine_terbiyecisi - 05 Mayıs 2018, 14:52:26Timer 2 modülünü kullanarak delay yapman gerekiyor. CCS C kendi delay fonksiyonu kesmeleri etkiler.
Hatta watchdogtimer kurulu ise pic reset yer.

Düzeltme için söylüyorum, CCS C'de delay komutu kesmeleri etkilemez.
Buton okuma için bende Timer kesmelerini tavsiye ederim.

dursuncemal

#9
buton'un ne sekilde calismasini istediginizi bilmiyorum.yukarıdakı kossdan anladığım kadarı ile basinca isi yapacak elimizi cekene kadar islem yapmayacak fakat program takili kalmayacak.

ben genelde bu durumlarda iki tane fonksiyon yaziyorum.
birtane de bit tanimliyorum 'tus_izin' diye

birinci fonksiyonda   'tuş_izin.'  biti & ilgili porta  bakip uygun ise tuş'u okuyup yapılması gereken işi yapıp tuş_izin bitimi pasif(0) yapiyorum.

ikinci fonksiyonda ilgili port'a bakıp elin tuştan çekilip cekilmedigine bakiyorum eger cekilmişse 'tus_izin' bitini aktif ediyorum. 

bu iki fonksiyon'a program'ın istediğin yerinden gidebilirsin. veya bir inteeruptun icinden gidebilirsin.
heri iki fonksiyona ayri ayri zamanlarda gittiginiz icin tus gurultusu icin gereken zaman gecikmesinide otomatikman elde etmis olursunuz.
ayrica bir sayiciniz var ise  ve hizlı bir sayma yapiyor iseniz mutlaka timer kullanmalisiniz
:=