CCS C ile düşen-yükselen kenar tetikleme nasıl yapılı

Başlatan fractal, 19 Şubat 2009, 11:04:35

fractal

arkadaşlar şu akılllı röleler de bile her girişin sonuna düşen yada yükselen kenar tetikleme bloğu kullanarak bir set yada reset yapabiliyoruz.bunu pic te belirlediğimiz girşler için nasıl yapabiliriz.bunu istememmin nedeni.sensör görünce set olsun görmeye devam etse bile işlem olmasın.gibi...
Restantum cogniscutur Quantum deligutur

atila

şu şekilde yapabilirsin;
if(input(pin_b1))
{
 while(input(pin_b1);//RB1 den sinyal geldiği sürece alta geçmez.
........
.......
}


veya harici  kesme kullanıyorsan;
ext_int_edge(L_to_H);
komutu ile yükselen veya düşen kenar tetiklemesi seçilebilir.

fractal

ama burda ynılmıyorsam sadece b1  pini ve kesmesi kullanılmış.değer pinler içinde olmazmı böyle birşey.bu akıllı rölelerde her pin için donanımsal bişeymi var böyle.yoksa yazılımlamı oluyor..
Restantum cogniscutur Quantum deligutur

atila

ilk verdiğim kodu giriş olarak ayarladığın bütün pinler için kullanabilirsin.Ben örnek olsun diye RB1'i verdim. Buton kullandığım bütün uygulamalarımda bu kodu kullanıyorum.Butondan elini çekince gerekli işlemleri yapması için.Mouse gibi...

Aşağıdaki kodu ise sadece harici kesme ucu RB0 için kullanabilirsin
ext_int_edge(L_to_H)

fractal

ama program o noktada çakılı kalır.diğer noktaları kontrol edemezki.ben cevrimde herhangi bir anda bazı girişlerimin yükselen kenar yaptımı birşeyleri set etmesini istiyorum.sürekli bir girşte çakılı kalmasın program.
Restantum cogniscutur Quantum deligutur

gallavi

o zaman bi timer interrupt kurup her kesmede gerekli pinleri kontrol ettireceksin ve global değişkenlere buton konumunu yazacaksın programın herhangi bi yerinde o değişkenden buton durumunu okuyabilirsin program kesintiye uğramadan ben bu şekilde LCD de sürüyorum ama buton gürültüsü için gerekli gecikmeleri koyman gerekecek kolay gelsin.
DemirHan=gallavi;

vebsel

eger interrupt kullanırsan bu işlem sadece bir uç  yada bilemedin iki uç için gerçekleşmiş olur  port  bazında da  interupt kurabiliyorsun fakat bu işi
o şekildede çözemezsin .
benim anladığım kadarıyla plc deki gibi yükselen kenarı yada düşen kenarı algılatmak istiyorsun bunu while komutu ile bir uç için de yapazsın
programın orada takılıp kalır .
ben plc ler bu işi nasıl yapıyor sana anlatayım belki yararı olur.

plc eğer bir yükselen kenar algılayacaksa bunu bir önceki taramadaki o bitin değerine bakarak algılar bir önceki taradığı bilgiyi bir register e yazar o anda porttan gelen bilgi ile karşılatırır.  bir öncekinden farklıysa o komutu çalıştırır.


sende her porta baktığında bu portun değerini bir register e kaydet.
yeni okudugun bilgi ile eskisi arasında bir kaşılaştırma yap eğer bir önceki zamana göre  o bit 0>1 e çekilmişse o bit  yükselen kenar  yapmıştır deyip o yordamı çalıştır.