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 ?
% 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.
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 ?
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/ (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.
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 ?
while döngüsüne girmeden buton arkı önlenebilir mi?
aynı anda iki buton ile sayaç kullanıyorum. delay kullanınca yanlış sayıyorum.
birşeyler saymanız gerekiyorsa timerleri kullanın. Yoksa illaki sıkıntı olur.
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.
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.
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