Proton+ ile yükselen kenar algılama ?

Başlatan gtekdemir, 21 Aralık 2009, 16:13:40

gtekdemir

Pic girişlerini okuyup bir şeyler yaptıracağım. Girişlerin bir kısmı var-yok şeklinde, bu girişlere göre çıkışları basit olarak kontrol ediyorum. Mesela if PortB.0=1 then Portd.0=1 Else Portd.0=0 Endif gibi. Yani RB0=1 olduğu sürece RD0=1 olacak, aksi durumda ise RD0=0 olacak buraya kadar bir sorun yok. Bazı girişlerin ise her bir yükselen kenarında çıkışı kontrol etmem gerekiyor. Mesela RB1 den 1 geldiği anda RD1=1 olacak RB1=0 olduğunda RD1=1 olmaya devam edecek, RB1 tekrardan 1 olduğunda RD1=0 olacak, start-stop rölesi gibi olacak yani. RB1 portuna gelecek olan 1 süresi belli değil. 1ms'de olabilir 100 saat'de olabilir. Yükselen kenar algılayacak giriş sayısı 8 diyelim, mesela portb'nin tamamı olsun. Bu girişlere göre pord çıkışları kontrol edilsin. Nasıl bir mantıkla programı yazmalıyım ?

Erol YILMAZ

öncelikle yazdıklarının hepsini okuyamadım, :D
ama yapmak istediğin şey şu sanırım.
0 dan 1 e yükselen kenarı yakaladığın zaman bir iş yapacaksın.


o halde bu paterni yakalaman için tek yapman gereken
daha önce okuduğun port bilgisini saklamak ve
yeni = 1
eski = 0 paternini yakalamak...

yeni = PIN_D0;

if (yeni & !eski){
...BURASI PATERNİN YAKALANDIĞI YER....
}

eski = yeni;

gtekdemir

Allegro hocam cevap için sağolun fakat C bilmiyorum ne yazıkki. if (yeni & !eski) satırı ne ifade ediyor ?

M_B

Alıntı yapılan: "gtekdemir"Allegro hocam cevap için sağolun fakat C bilmiyorum ne yazıkki. if (yeni & !eski) satırı ne ifade ediyor ?


if(yeni&!eski)
komutu
yeni ile eskinin değilini & ( ve ) işlemine tabi tutuluyor.

yeni&!eski sonucu 1 olursa  bu blok  ıcerısındeki işlemler yapılır.
Degilse yapılmaz.
Umarım anlatabilmisimdir.
İmkanın sınırlarını görmek için imkansızı denemek lazım.                                                             Fatih Sultan Mehmet

gtekdemir

Hocam sağolun mantığı çözdüm, aslında oldukça basit ama nedense aklıma gelmemiş. Şöyle yaptım;

basla:
    yeni1=PORTB.0        'Yeni değeri değişken içine yaz
    If yeni1>eski1 Then  'Yeni değer ile eskiyi kıyasla büyükse
    Toggle PORTD.0        'çıkışı değiştir
    EndIf
    eski1=yeni1              'eski değişken içine yeni değeri yaz
goto basla