giriş ve kesme alma hakkında

Başlatan suleymozer, 18 Ağustos 2011, 00:23:07

suleymozer

Arkadaşlar, yavaş yavaş amatör yolumda ilerliyorum, kendimi geliştiriyorum ufaktan, biliyorum çok basit ve acemice soru ama kitaplardada nettede cevap bulamadım;
  Hi-Tec kullanarak c ile derleme yapıyorum. Dışardan kesme almak için giriş bacaklarını tanımladıktan sonra, kitabın bana öğrettiği üzere
" void interrupt fonksiyon(void) { **yapılacak iş** } "olarak dış kesme geldiğinde yapılacak olan işi belirtiyorum, dışardan kesme gelince burdaki kodu uyguluyor. Sorum şu, ben 4-5 bacağı giriş olarak kullanmak istiyorum ve her bacağa gelen uyarıda farklı işlemler yapılmasını istiyorum. Bunun içinde mi bu interrupt u kullanacağım, evetse nasıl kullanacağım? Acemi seviyesine göre yardımcı olursanız minnettar kalırım.
Not: kitapta tüm örneklerde rb0 giriş yapılmış ve programın içinde "INTE=1; // RB0 kesmeyi aktifle" diye bir not düşülmüş

esensoy

hangi pic le çalıştığınız bilmiyorum, 18F452 için konuşursak bu işlemcide donanımsal olarak 3 tane int kesmesi var,
int0 --> rb0
int1 --> rb1
int2 --> rb2

bununla bilrlikte aynı işlemcide rb4-rb7 değişiminde tetiklenen kesme de var,
siz ihtiyacınıza göre ya bunları kombine ederek sistemi oluşturacaksınız,
ya da hairici kesmesi fazla olan işlemci bulup yola onunla devam edeceksiniz,
en doğru sonucu işlemcinizin datasheet inin Interrupts kısmını ve kesmelerle ilgili registerları inceleyerek elde edersiniz.

bu arada ben sadece çözüm yollarının aklıma gelen 2 sinden bahsettim, farklı yollar da geliştirebilirsiniz.
En tehlikeli an "zafer" anıdır.

suleymozer

877a ile çalışacağım. Daha işin çok başındayım, mantığı oturtmaya çalışıyorum o yüzden mazur görün;
1-yani şu şekilde, işlemci giriş kabul edilen portları sürekli denetleyecek, her denetlemenin sonunda portların 1-0 durumuna göre işlem yapacak, öyle mi? Öyleyse "if(rb0==0)" şeklinde port port mu vereceğiz komutu?
2-Kitaptaki örneklerde main fonksiyondan sonra for(;;) ile sonsuz döngüye sokuluyor, bu döngüye girdikten sonra her döngünün başına geldiğinde işlemci kendi tarıyor mu giriş olan portların durumunu yoksa komutla mı taratılıyor?
3-(mesajınız üstüne farkedip araştırdım, doğru anlamış mıyım teyid etmek için soruyorum) kitapta 16f84 işlemci tanıtılırken (bazı bacaklar muhaf) bacaklara çift yönlü ok koyulmuş ve bunların giriş ve çıkış olarak kullanılabilecekleri söylenmiş, bunlardan giriş alamıyor muyum, giriş alabileceğim bacaklar sınırlı ve önceden belirli her pic modeli için, doğru mu?

eistain_54

Hitec bilmiyorum ama donanım ile ilgili şunu söyleyebilrim.Çift ok ile gösterilenlerden kasıt istediğin takdirde giriş istediğin takdirde çıkış olarak yönlendirebilirsin.Bunu programının başında tris kaydedicileriyle belirliyorsun.Programının ilerleyen kısımlarında değiştirebilebilirmisin bilmiyorum.Tek ok ile gösterilen pinler (bacaklar) donanım dolayısıyla ya giriş olur yada çıkış.Sadece birini kullanabilirsin.Örneğin "ra4 pini Open Drain yapısı (Bunuda hiçbir zaman tam anlamayacağım sanırım) nedeniyle çıkış olarak kullanılırken pull up direnç (1k yada 10k gibi bir dirençle +5vta bağlanması olayı) kullanılmalıdır." gibi bir ifade geçiyordu çeviri data sheette.Diğer bir örnek 16f628 deki mclr-porta5 bacağı.Reset kullanacaksan mclr oluyor kullanmassan sadece çıkışmı oluyodu.Öyle bişeydi.:)Son olarak son cümlende haklısın.Önceden her pic için hangi bacağın giriş,çıkış yada giriş-çıkış olabileceği belli.Farklı olarak PSOC gibi bir işlemci ailesi vardı.Onlarda istediğin gibi belirleyebiliyordun galiba...
Her gün 24 altın verilirken bunun için kime şükredersin ey ademoğlu!?!

esensoy

#4
Serdar Çiçek in ccs c kitabı, fxdev in hitec c kitabı, ete 'nin de pic basic le alakalı envai çeşit konu kaynak vs leri var, onları takip edebilirsin,
En tehlikeli an "zafer" anıdır.

suleymozer

elimde picc ile kaynaklar var ama, neredeyse tamamı belirli bir temel üstüne anlatmış, çok yeterli olmuyorlar benim için. Bacak işini anladım fakat bacakların nasıl yazılıma dönüşeceğini henüz tam kavrayamadım, örneğin rb0-1 giriş olarak tanıtıldı. 2 bitlik girişler. Bu girişlerden 0 numarada sinyal varsa A işlemi, 1 deki sinyal ile B işlemini başlatmak istiyorum, bunu kabaca nasıl yazabilirim? Programın içinde tercih edilen bir yere if(rb0==1) {a} şeklinde mi?

eistain_54

Evet aynen öyle yapacaksın.Sorgulama yöntemiyle.Kesme olayını istersen o çok sonra yapılacak iş.Şuan ki bilginle girişme...

if (koşul)
{
yapmak istediklerin.
}
else if
{
şart yanlışsa yapmak istediklerin...
}

if içindeki koşul doğruysa o kısım 1 değerini alır ve işleme girer.Yanlışsa 0 değerini alır ve else if ile belirttiğin yere gider.
Her gün 24 altın verilirken bunun için kime şükredersin ey ademoğlu!?!

papsukkal

c konusunda ben de yeniyim. henüz elle tutulur iki proje tamamlayabildim. sıfırdan başladım ve sadece serdar çiçek'in kitabını okudum tavsiye ederim. kesme için ise üç farklı kitaptan sonra ete hocanın dersleri sayesinde tam olarak kavrayabildim. yeni başlayanlar için bu iki kaynağı tavsiye ederim mutlaka incele.

suleymozer

hmm, bahsettiğiniz kitapları araştırayım şimdi. Çok teşekkür ediyorum yardımlarınız için. Keypad ve ısı ölçmeyle ilgili bikaç küçük deney projeyide başarabilirsem hayalimdeki projeme geçeceğim haftaiçinde, o projede sizden bol bol yardım talep edeceğim :d