atmega8 ile 3 kesmeye ihtiyacım var nasıl yaparım?

Başlatan forumsad, 04 Ocak 2012, 14:49:40

forumsad

arkadaşlar bir projemde int0 ve int1 kesmelerini kullanıyorum bir kesmeye daha ihtiyacım var portbchange kesmesi işimi görürmü acaba

int0 tetiklendiğinde timer saymaya başlıyor int1 tetiklendiğinde saymayı bırakıyor geçen zamanı pc'ye gönderiyor   burda 3'üncü sensörden gelen hatalı ürün sinyalinide alıp pc ye göndermem lazım şu mantık işe yararmı

int0 ve int1 geçen süreyi hesaplayıp pc'ye veri gönderme işine devam etsin bu arada portb0 change kesmesi eğer herhangi birzamanda gerçekleşirse
hata değişkenini 1yapıp dönğüye geri dönsün
int0 a sinyal geldiğinde timer saymaya başlar int1 tetiklendiğinde timer durur zamanı alır hata değişkenini kontrol eder hata varsa pc'ye ayrı bir veri gönderir hata yoksa normal süreyi gönderiri..

arkadaşlar bu mantığı atmeğa8 ile yapabilirmiyim


saygılarımla

Kabil ATICI

Atmel işlemcilerde portbchange kesmesi yok.
Bu söylediğin her şeyi tek bir kesme ile yapabilirsin. Sadece kesme bacağı haricindeki başka iki bacağı birlikte kullanman gerek. Basitçe kesme bacağı ve diğer bacaklar arasında  diyot bağllıyorsun. Herhangi bir bacak lojik 0 düştüğü zaman kesme tetikleniyor.  Kesme vektörüne girildiği zaman sadece hangi bacakları basıldığını kontrol ettirmek yeterli.

Yada hata haricindeki başla ve durdur için kullandığın yapı için aynı şekilde kesme bacağı ve bir tane ek bacak kullanılıyor. diyotlar kesme bacağında birleştirilmek üzere  bir diyot bir sensöre ve diğer diyot diğer bacak üzerinden diğer sensörü bağlanır. Normalde sadece kesme geldiğinde sadece ek bağın 1 veya sıfır olduğun kontrol ettirmek yeterli.


Hata sensörü tek başına bir kesme kullanır.
ambar7

SERRO EFE

#2
@ambar7  cok hızlı değişimler oluyorsa dediğiniz yöntem pek işe yaramaz iki sinyal aynı anda gelirse birini es geçer sistem sizinki daha çok tuş okumada kolaylık sağlar.
Analog karşılaştırıcıyı kullanabilirsin kesme oluşturmak için yada okuma yaptığın sensörün ne sıklıkla yada kaç ms çıkış verdiğini biliyorsan ikinci bi timer içinde kontrol ettirebilirsin.

ambar7 haklısın ben sensörüde aynı kesmeye dahil edeceğini anlamışım.. :)

Kabil ATICI

Şartlara bakarsan zaten başla ve bitir sinyallerinin aynı anda gelmesi zaten bir hata durumunu ortaya çıkarıyor. Her halikarda  int0 ve int1 kullanımında bile zaten öncelik hangisinde ise önce o devre girer komutlar işlenir ve ilk kesme bitiminden sonra diğer kesme devre girer.
ambar7

snubber

Devre şemanı henüz çizmediysen, interrupt almak istediğin sinyalleri başka portlara ver, diğer taraftan da bu portlara verdiğin sinyalleri OR kapısından geçirerek INT0 veya INT1 int. girişine ver. Interrupta girince bakarsın hangi porttan gelmiş diye. Ona göre yaparsın kontrollerini.

forumsad

bu sıkıntıdan dolayı tek işlemci ile yapmam gereken işlemi 2 işlemci ile yapıyorum

kartın tasarımını yaptım şu anda aşagıdaki anlatacağım şekilde çalışıyor çok sağlıklı olmadı tabi

ilk sensörüm portd5'e bağlı ilk sensör tetiklendiğinde işlemciye olan mesafesi 15 metre olduğu için 555 timer ile tetikleme süresini uzattim sensör çok hızlı tetiklendiğinde mesafe uzak olduğu için sensör sinyali hatta kayboluyor bunu önlemek için sensör 555 devresini tetikliyor 555 devresi ayarlı sekilde örnek 5sn işlemciye 1 gönderiyor

ürün ilk sensörü tetikledi 555 devresi 5sn süreyi başlattı
sonra ürün int0 tetikler timer saymaya başlar hemen arkasından int1 tetiklenir in1 tetiklenince 555 devresinden gelen sinyale bakar (portd5) 1 ise ona göre işlem yapar değilse onar göre işlem yapar
sistem şu anda bu mantıkla çalışıyor

sorun 555 timer olayı ürün int0'ı 5 sn yeden sonra tetiklerse ilk sensörün anlamı kalmıyor....

burda kendimce 2 yöntem denemeyi düşünüyorum

yöntem1:ilk sensöre küçük bir işlemci koy rs485 ile ana işlemciye bağla(ana işlemci zaten rs485 ile haberleşiyor)  yani ilk sensörden rs485 kanalıyla seri iletişim kesmesi gelecek ana işlemci içinde gelen veri
değerlendirilip değişkene atılacak iş bitecek

yöntem2:  bu yöntem olurmu bilmiyorum  elektronikde tam adını hatırlayamadım  sinyal gelince çözülene kadar 1 kalmaya devam eden bir durum vardı lunch mıydı neydi hatırlayamadım   bu işi görecek küçük bir entegreyi ilk sönsürün yanına koyacağım 555 devresini iptal edeceğim sensörden sinyal geldiği anda entegre (tristör gibi)  işlemciye sürekli 1 gönderecek işlemci int1 kesmesi gerçekleşince sinyal göndererek entegreyi çözecek

sensör girişlerini başka bacaklara verip diyotla int0 dan tetikletip bacakları okuma olayını denedim
çalışıyor ama pek sağlıklı değil çünkü int0 ile int1 tetiklenme süresi bazen 1sn altında gerçekleşiyor


görüş öneri bildirdiğiniz için teşekkür ederim 
saygılarımla