Mikrodenetleyiciler ile mikroişlemciler arasında ki en büyük fark mikrodenetleyicilerin RAM, ROM, CPU, portlar gibi bütün birimleri bir aradadır. Mikrodenetleyiciler kod sırasını takip ederek tek bir işlemi gerçekleştirirler. Mikrodenetleyicilerin bu dezavantajını ortadan kısmen kaldırmanın tek yolu interrupt yani Türkçe ismi ile kesme kullanılmasıdır.

İnterrupt kullanımının basit bir dille izahı şöyledir;

Bir kişi televizyon izlerken kapı çalarsa televizyon izleme işini keser ve kapıyı açıp, tekrar televizyon izlemeye devam eder. Bu da interrupt’ın işleyiş mantığını anlatan basit bir örnektir.

Ancak belirtilmelidir ki mikrodenetleyicilerde ki her bacak interrupt bacağı değildir ve interrupt bacakları sınırlı sayıdadır. Ayrıca programlarken interruptlar arasında da öncelik sıralaması yapılması gereklidir ki, devreniz ve programınız sağlıklı çalışabilsin.

Arduino da İnterrupt Kullanımı

 

Arduino kullanıcılarının pek çoğu ne yazık ki interrupt kullanmayı bilmezler hatta interrupt’ın varlığından dahi haberdar değillerdir. Bu nedenle de programlarını kısıtlı olarak programlamak ve devrelerini ona göre dezavantajlı şekilde oluşturmaktadırlar. İşinde iyi bütün elektronikçiler bilir ki  interrupt kullanımı mikrodenetleyiciler için çok kritiktir.

Arduino kartlarında ki interrupt kullanımlarının tamamı aynıdır. Ancak bilinmesi gereklidir ki her Arduino kartın interrupt bacakları farklıdır, bu bilgiye ulaşmak için Arduino kartının üstünde ki mikrodenetleyicinin datasheetine bakabilir, bir dakikadan kısa sürede bu bilgiye ulaşabilirsiniz.

Arduino kartlarının birkaçının interrupt bacakları aşağıda ki gibidir;

Untitled

Arduinoda İnterrupt Kullanımı Örnek Kod[sociallocker id=”10094″]

int pin = 15; // 15. Dijital pin, “pin” ismine eşitliyor ve int olarak tanımlıyor.
volatile int state = LOW; // interrupt low olursa harekete geçecek yani 0 olursa interrupt oluşacak

void setup()
{
pinMode(pin, OUTPUT); // 15. Dijital pin çıkış olarak ayarlanıyor ve pull-down direnci aktif olur
attachInterrupt(0, blink, CHANGE); // eğer interrupt aktif olursa yani 0. Pin’e gelen değer 0 sıfır olduğunda interrupt geçer.
}

void loop()
{
digitalWrite(pin, state); // interrupt aktif olduğunda, yani 0 olursa 15. Pin de olacak değişim bu satırdadır.
}

void blink()
{
state = !state;
}

[/sociallocker]

Yukarı da ki kodun çok daha kompleks olanını bir diğer yazıda, daha detaylı şekilde bir başka anlatacağım.

Neden İnterrupt Bu Kadar Kritik Öneme Sahiptir?

Özellikle buton içeren, kritik öneme sahip pin işlevlerinde, uzun yazılıma sahip devrelerde ya da düşük hızda mikrodenetleyicilerde öncelik tanımak yaptığınız devreyi oldukça verimli kılar. Bu nedenle de interrupt kullanmaya özen gösterirseniz daha başarılı devreler oluşturabilirsiniz.

True C olarak geçen Atmel AVR programlama da interrupt örneğini ve daha detaylı bir Arduino interrupt yazılımını sizler için kaleme alacağım. Mikrodenetleyicilerin en önemli özelliklerini etkin kullanmak her zaman için avantaj sağlamaktadır.

  • Elinize sağlık yazınız güzel olmuş. Fakat bir noktada yanlış var. Mikroişlemciler de aynı anda tek işlem yapabilirler. Kesmeler mikroişlemciler için kullanılır. Mikro denetleyiciler de RAM ve Mikroişlemciden oluşur. FPGA gibi mimarisi serbest ve birbirinden bağımsız transistörlerden oluşan gömülü sistemler paralel işlem yapabilme özelliğine sahiptir sadece.

    • Çalışma mantığı olarak anlatmıştım ancak mikrodenetleyiciler mimarisi gelişmemiş RAM ve mikroişlemciden oluşur. Bir başka söylemle mikroişlemcileri programlamak için hafıza tasarımını bilmek, harici hafızaya yani ihtiyaç duyulan RAM ile birlikte çalıştırmak gereklidir. Dediğiniz gibi aslında yazıda o noktada hata olmuş ve şuan düzeltiyorum. Anlatmak istediğim ile anlattığım biraz farklı olmuş.

      İlginiz için teşekkür ederim.