- Kesinti Türleri
- Arduino'daki kesintiler
- Arduino'da Kesintileri Kullanma
- Gerekli Bileşenler
- Devre şeması
- Arduino Interrupt Programlama
- Arduino Kesinti Gösterimi
Hızlı hareket eden bir arabayı düşünün, aniden başka bir arabanın ters yöne çarpması durumunda meydana gelen ilk şey, arabada bulunan ivmeölçer sensörünün ani bir hızlanmayı algılaması ve içindeki mikro denetleyiciye harici bir kesintiyi tetiklemesidir. araba. Daha sonra bu kesintiye bağlı olarak mikro denetleyici, hava yastıklarını anında açmak için bir elektrik sinyali üretir. Araçta bulunan mikrodenetleyiciler, arabanın hızını algılama, diğer sensörleri kontrol etme, klima sıcaklığını kontrol etme vb. Gibi birçok şeyi aynı anda izler. Peki bir hava yastığının saniyeler içinde aniden açılmasına neden olan nedir? Cevap kesintilerdir, burada en yüksek önceliğe sahip olan bir kesinti sinyali kullanılır.
Kesmelerin bir başka basit örneği, "Dokunma" duygusuna en yüksek önceliğe sahip dokunmatik ekranlı cep telefonlarıdır. Hemen hemen her elektronik cihaz, normal süreci 'kesintiye uğratmak' ve belirli bir olayda daha yüksek öncelikli şeyler yapmak için bir tür kesintiye sahiptir. Interrupt'ı kullandıktan sonra normal süreç devam ettirilir.
Dolayısıyla teknik olarak, Kesmeler, bir G / Ç veya talimatın işlemcinin normal çalışmasını askıya alabildiği ve daha yüksek önceliğe sahipmiş gibi kendi kendine servis gördüğü bir mekanizmadır. Örneğin, normal bir yürütme yapan bir işlemci, ISR'de (Interrupt Service Routine) bulunan belirli bir işlemi yürütmek için bazı algılayıcılar tarafından kesintiye uğratılabilir. ISR işlemcisi çalıştırıldıktan sonra tekrar normal çalışmaya devam edebilir.
Kesinti Türleri
İki tür kesinti vardır:
Donanım Kesmesi: Harici bir kesinti piminin durumunu DÜŞÜK'ten YÜKSEK'e veya YÜKSEK'ten DÜŞÜK'e değiştirmesi gibi harici bir olay meydana geldiğinde meydana gelir.
Yazılım Kesintisi: Yazılımın talimatına göre gerçekleşir. Örneğin, Zamanlayıcı kesintileri yazılım kesintileridir.
Arduino'daki kesintiler
Şimdi Arduino Board'da kesintileri nasıl kullanacağımızı göreceğiz. İki tür kesintiye sahiptir:
- Harici Kesme
- Pin Değiştirme Kesmesi
Harici Kesinti:
Bu kesintiler, donanım tarafından yorumlanır ve çok hızlıdır. Bu kesintiler, YÜKSELME veya DÜŞME veya DÜŞÜK seviyelerde tetiklenecek şekilde ayarlanabilir.
Arduino Kurulu |
Harici Kesme pimleri: |
UNO, NANO |
2,3 |
Mega |
2,3,18,19,20,21 |
Pin Değiştirme Kesintileri:
Arduino'lar, pin değiştirme kesintilerini kullanarak daha fazla kesme pini etkinleştirebilir. ATmega168 / 328 tabanlı Arduino kartlarında herhangi bir pin veya 20 sinyal pininin tamamı kesme pini olarak kullanılabilir. YÜKSELEN veya DÜŞEN kenarlar kullanılarak da tetiklenebilirler.
Arduino'da Kesintileri Kullanma
Arduino'da kesintileri kullanmak için aşağıdaki kavramların anlaşılması gerekir.
Kesinti Servis Rutini (ISR)
Interrupt Service Routine veya Interrupt işleyicisi, içinde küçük talimatlar içeren bir olaydır. Harici bir kesme meydana geldiğinde, işlemci önce ISR'de bulunan bu kodu çalıştırır ve normal yürütmeyi bıraktığı duruma geri döner.
ISR, Arduino'da aşağıdaki sözdizimine sahiptir :
attachInterrupt (digitalPinToInterrupt (pin), ISR, mode);
digitalPinToInterrupt (pin): Arduino Uno, NANO'da kesme için kullanılan pinler 2,3 ve mega 2,3,18,19,20,21'dir. Burada harici kesme için kullanılan giriş pinini belirtin.
ISR: Harici bir kesme yapıldığında çağrılan bir fonksiyondur.
Mod: Tetiklenecek geçiş türü, örneğin düşme, yükselme vb.
- YÜKSELEN: Pim DÜŞÜK'ten YÜKSEK'e geçtiğinde bir kesintiyi tetiklemek için.
- DÜŞME: Pim YÜKSEK'ten DÜŞÜK'e geçiş yaptığında bir kesintiyi tetiklemek için.
- DEĞİŞTİR: Pim LOW'dan HIGH'a veya HIGH'dan LOW'a geçiş yaptığında (yani, pin durumu değiştiğinde) bir kesintiyi tetiklemek için.
Interrupt'ı Kullanırken Bazı Koşullar
- Interrupt Service Routine işlevi (ISR) mümkün olduğunca kısa olmalıdır.
- Delay () işlevi ISR içinde çalışmaz ve bundan kaçınılmalıdır.
Bu Arduino Interrupt öğreticisinde, 0'dan bir sayı artırılır ve Interrupt'ı tetiklemek için iki buton kullanılır, her biri D2 ve D3'e bağlıdır. Kesmeyi belirtmek için bir LED kullanılır. Bir düğmeye basıldığında, led YANAR ve ekranda interrupt2 gösterilir ve söner ve başka bir düğmeye basıldığında led söner ve ekran interrupt1'i gösterir ve söner.
Gerekli Bileşenler
- Arduino Board (Bu eğitimde Arduino NANO kullanılmıştır)
- Basma düğmesi - 2
- LED - 1
- Direnç (10K) - 2
- LCD (16x2) - 1
- Ekmek Tahtası
- Kabloların Bağlanması
Devre şeması
Arduino Nano ve 16x2 LCD ekran arasındaki Devre Bağlantısı:
LCD ekran |
Arduino Nano |
VSS |
GND |
VDD |
+ 5V |
V0 |
Potansiyometre Merkez PIN'ine LCD Kontrastını Kontrol Etmek İçin |
RS |
D7 |
RW |
GND |
E |
D8 |
D4 |
D9 |
D5 |
D10 |
D6 |
D11 |
D7 |
D12 |
Bir |
+ 5V |
K |
GND |
Arduino Nano'ya pin D2 ve D3'te iki adet buton bağlanmıştır. Biri LED'i AÇIK hale getirmek ve diğeri bir LED'i KAPATMAK için iki harici kesinti kullanmak için kullanılırlar. Her basma düğmesinin toprağa bağlı 10k'lik bir aşağı çekme direnci vardır. Bu nedenle, basma düğmesine basıldığında mantık YÜKSEK (1) ve basılmadığında mantık DÜŞÜK (0) olur. Aşağı çekme direnci zorunludur, aksi takdirde D2 ve D3 giriş pinlerinde değişken değerler olacaktır.
Bir Kesmenin tetiklendiğini veya bir düğmeye basıldığını belirtmek için bir LED de kullanılır.
Arduino Interrupt Programlama
Bu öğreticide, Arduino Nano'ya bağlı (16x2) LCD'de sürekli olarak görüntülenen 0'dan bir sayı artırılır, sol basma düğmesine (kesinti pimi D3) her basıldığında LED AÇIK olur ve ekranda Kesinti2 gösterilir ve sağ basma düğmesi (kesinti pini D2) basılırsa LED KAPALI ve ekranda Kesinti1 gösterilir.
Bu eğitimin sonunda bir çalışma videosu ile Tam Kod verilmiştir.
1. Öncelikle LCD ekran için başlık dosyası eklenir ve ardından Arduino Nano ile bağlantıda kullanılan LCD pinleri tanımlanır.
#Dahil etmek
2. void setup () işlevinin içinde, önce LCD ekranda bazı giriş mesajlarını görüntüleyin. LCD ile Arduino arasında arayüz oluşturma hakkında daha fazla bilgiyi burada bulabilirsiniz.
lcd.begin (16,2); lcd.setCursor (0,0); lcd.print ("DEVRE DIGEST"); lcd.setCursor (0,1); lcd.print ("ArduinoInterrupt"); gecikme (3000); lcd.clear ();
3. Daha sonra aynı void setup () fonksiyonunda giriş ve çıkış pinleri belirtilmelidir. D13 pimi LED'in Anotuna bağlıdır, bu nedenle bu pin çıkış olarak tanımlanmalıdır.
pinMode (13, ÇIKIŞ);
4. Şimdi programlamadaki ana önemli kısım, attachInterrupt () işlevi, aynı zamanda void setup () içine dahil edilmiştir.
attachInterrupt (digitalPinToInterrupt (2), buttonPressed1, RISING); attachInterrupt (digitalPinToInterrupt (3), buttonPressed2, RISING);
Burada pin 2'nin harici kesinti için olduğu belirtilir ve D2 pininde RISING (LOW to HIGH) olduğunda buttonPressed1 fonksiyonu çağrılır. Ve pin 3 de harici interrupt içindir ve D3 pininde RISING olduğunda buttonPressed2 fonksiyonu çağrılır.
5. Boşluk döngüsü () içinde, sıfırdan bir sayı (i) artırılır ve LCD (16x2) üzerine yazdırılır.
lcd.clear (); lcd.print ("SAYAÇ:"); lcd.print (i); ++ i; gecikme (1000);
Aynı boşluk döngüsünde (), digitalWrite (), LED'in anodunun bağlı olduğu D13 pininde kullanılır. Değişken çıkıştaki değere bağlı olarak LED açılacak veya kapanacaktır
digitalWrite (13, çıktı);
6. En önemli kısım, attachInterrupt () işlevinde kullanılan ada göre bir kesme işleyici işlevi oluşturmaktır.
İki kesme pini 2 ve 3 kullanıldığı için iki ISR gereklidir. İşte bu programlamada aşağıdaki ISR kullanılmıştır
buttonPressed1 ():
void buttonPressed1 () { output = LOW; lcd.setCursor (0,1); lcd.print ("Kesinti 1"); }
Bu fonksiyon, pim D2 üzerindeki düğmeye basıldığında (YÜKSELEN KENAR) yürütülür. Bu işlev, çıkışın durumunu DÜŞÜK olarak değiştirir ve LED'in KAPALI olmasına neden olur ve LCD ekranda "kesinti1" yazar.
buttonPressed2 ():
void buttonPressed2 () {çıktı = YÜKSEK; lcd.setCursor (0,1); lcd.print ("Kesme2"); }
Bu fonksiyon, D3 pimi üzerindeki düğmeye basıldığında çalışır. Bu işlev çıktının durumunu YÜKSEK olarak değiştirerek LED'in AÇIK hale gelmesine neden olur ve LCD ekranda "interrupt2" yazar.
Arduino Kesinti Gösterimi
1. Sol taraftaki PUSH DÜĞMESİ'ne basıldığında LED YANACAK ve LCD'de Interrupt2 görüntülenir.
2. Sağ taraftaki PUSH DÜĞMESİ'ne basıldığında LED KAPALI ve LCD'de Kesinti1 görüntülenir.
Bu, normal yürütme arasında herhangi bir önemli görevi tetiklemek için bir Kesme'nin nasıl yararlı olabileceğidir.