RB0 Kesme ile Clock Puls Saymak ?

Başlatan Nedenler, 31 Aralık 2010, 18:05:13

Nedenler

Arkadaşlar sorum şu;

RB0 dan clock pals alıyorum ve her düşen kenarda bunu sayıyorum. Fakat yapamadığım birşey var bu pals oldu da biyerde kesildi. Ben bunun kesilip kesilmediğini nasıl kontrol edicem ? 10 saniye pals geldi geldi saydım saydım sayacım bu 10 saniyede 100 pals saydı mesela sora pals durdu ve sayma işlemide durdu. Ben yazılımda "pals kesildi" diye nasıl hüküm vericem ? Arada bir zaman gecikmesi koymam lazım ki şu kadar zaman geçtikten sonra hala artmadıysa falan diye. TMR0 başka birşey için kullanıyorum. Kullandığım pic 877 timer kullanmadan ve minimum işlemle bunu nasıl yapabilirim ?

FEHMİ_ASM

Pals gelmediğinde programın mutlaka periyodik olarak uğradığı bir komut satırı var mı? Ayrıca bu istediğin zaman dilimi kritik mi?

SiVRiSiNEK

programın ana döngüsü içinde bir flag tayin edersin bu flagı RB0 içinde her palste değillersin mesela ana döngü içindede normal delay pause komutları ile 10sn boyunca bu flagta değişme olmazsa uyarı verdirirsin flagın her değişimindede delay süresini yeniden yüklersin filan

Nedenler

Alıntı yapılan: SiVRiSiNEK - 31 Aralık 2010, 19:38:39
programın ana döngüsü içinde bir flag tayin edersin bu flagı RB0 içinde her palste değillersin mesela ana döngü içindede normal delay pause komutları ile 10sn boyunca bu flagta değişme olmazsa uyarı verdirirsin flagın her değişimindede delay süresini yeniden yüklersin filan

İşte o 10 saniyeyi benim pause tarzı komutlar kullanmadan yapmam lazım ama hem pause kullanmadan hemde timer kullanmadan birşeyi zamanlamak mümkün olmaz sanırım :) şunu yapiyim diyorum; her pals geldiğinde sayaci bir arttır. sayaci git biryerde flag'in içine yaz 10 saniye sonra kontrol et sayaçla flag aynı mı. Ama o zamanda şu oluyor pals geldiyse ztn sayaç 1 iken 2 olmuştur sora gidip flag'a da 2 yazmıştır. Artık pals gelmese bile bu değişkenler aynı değer. Bu durumda bu şekilde kontrol yapılamıyor.

Alıntı yapılan: FEHMİ_ASM - 31 Aralık 2010, 19:01:46
Pals gelmediğinde programın mutlaka periyodik olarak uğradığı bir komut satırı var mı? Ayrıca bu istediğin zaman dilimi kritik mi?

Zaman kritik değil ben 2-3 saniye gibi birşey ayarlamayı düşünüyorum ama bu 2.2 saniyede olabilir 2.5 saniyede olabilir fakat pause gibi birşeyle programı 2 saniye bile kesemeyeceğim kadar kritik.

Maxim

pause komutu kullanabilirsin, ama 2 sn için "pause 2000" yazmak yerine for-next döngüsü kurup "pause 1" komutunu 2000 kere çalıştırabilir böylece aralardaki geçiş zamanlarında asli işine devam edebilirsin picbasicte .

FEHMİ_ASM

Öyle ise ana program kodlarının mutlaka belirli aralıklarda uğradığı bir satırın peşine - sayma yapan bir döngü yerleştir. Mesela program buraya her 8 milisaniyede bir gelirse, 2.4 saniye için tam 3.000 kez gelmesi gerekir. 3.000'inci karşılaştırmada programda istediğin dallanmayı yapabilir veya komut grubunu çalıştırabilirsin.