- Jenis Interupsi
- Menyela di Arduino
- Menggunakan Interupsi di Arduino
- Komponen Diperlukan
- Diagram Sirkuit
- Pemrograman Interupsi Arduino
- Demonstrasi Interupsi Arduino
Pertimbangkan mobil yang bergerak cepat, jika tiba-tiba ditabrak mobil lain dengan arah yang berlawanan, hal pertama yang terjadi adalah, sensor akselerometer yang ada di mobil merasakan de-percepatan tiba-tiba dan memicu interupsi eksternal ke mikrokontroler yang ada di mobil. Kemudian berdasarkan interupsi tersebut mikrokontroler menghasilkan sinyal listrik untuk segera menyebarkan airbag. Mikrokontroler hadir di monitor mobil banyak hal secara bersamaan seperti merasakan kecepatan mobil, memeriksa sensor lain, mengontrol suhu AC dll. Lalu apa yang membuat kantung udara tiba-tiba terbuka dalam hitungan detik? Jawabannya adalah interupsi, di sini digunakan sinyal interupsi yang memiliki prioritas tertinggi.
Sederhana lain contoh dari Interupsi adalah ponsel layar sentuh yang memiliki prioritas tertinggi untuk arti “Sentuh”. Hampir setiap perangkat elektronik memiliki beberapa jenis interupsi untuk 'mengganggu' proses reguler dan melakukan beberapa hal dengan prioritas yang lebih tinggi pada acara tertentu. Proses reguler dilanjutkan setelah melayani Interrupt.
Jadi secara teknis, Interrupts adalah mekanisme di mana I / O atau instruksi dapat menangguhkan eksekusi normal prosesor dan diservis sendiri seolah-olah memiliki prioritas yang lebih tinggi. Misalnya, prosesor yang melakukan eksekusi normal dapat diinterupsi oleh beberapa sensor untuk menjalankan proses tertentu yang terdapat dalam ISR (Interrupt Service Routine). Setelah menjalankan prosesor ISR dapat kembali melanjutkan eksekusi normal.
Jenis Interupsi
Ada dua jenis interupsi:
Interupsi Perangkat Keras: Ini terjadi ketika peristiwa eksternal terjadi seperti pin interupsi eksternal mengubah statusnya dari RENDAH ke TINGGI atau TINGGI ke RENDAH.
Interupsi Perangkat Lunak: Ini terjadi sesuai dengan instruksi dari perangkat lunak. Misalnya interupsi Timer adalah interupsi perangkat lunak.
Menyela di Arduino
Sekarang kita akan melihat bagaimana menggunakan interupsi di Arduino Board. Ini memiliki dua jenis interupsi:
- Interupsi Eksternal
- Pin Change Interrupt
Interupsi Eksternal:
Interupsi ini diinterpretasikan oleh perangkat keras dan sangat cepat. Interupsi ini dapat diatur untuk memicu saat terjadi level RISING atau FALLING atau LOW.
Papan Arduino |
Pin Interupsi Eksternal: |
UNO, NANO |
2,3 |
Mega |
2,3,18,19,20,21 |
Pin Ubah Interupsi:
Arduino dapat memiliki lebih banyak pin interupsi yang diaktifkan dengan menggunakan interupsi perubahan pin. Dalam papan Arduino berbasis ATmega168 / 328, semua pin atau semua 20 pin sinyal dapat digunakan sebagai pin interupsi. Mereka juga bisa dipicu menggunakan edge RISING atau FALLING.
Menggunakan Interupsi di Arduino
Untuk menggunakan interupsi di Arduino, konsep berikut perlu dipahami.
Interrupt Service Routine (ISR)
Interrupt Service Routine atau Interrupt handler adalah peristiwa yang memiliki sejumlah kecil instruksi di dalamnya. Ketika interupsi eksternal terjadi, prosesor pertama-tama mengeksekusi kode ini yang ada di ISR dan kembali ke status di mana ia meninggalkan eksekusi normal.
ISR memiliki sintaks berikut dalam Arduino:
attachInterrupt (digitalPinToInterrupt (pin), ISR, mode);
digitalPinToInterrupt (pin): Di Arduino Uno, NANO pin yang digunakan untuk interupsi adalah 2,3 & di mega 2,3,18,19,20,21. Tentukan pin input yang digunakan untuk interupsi eksternal di sini.
ISR: Ini adalah fungsi yang dipanggil ketika interupsi eksternal dilakukan.
Mode: Jenis transisi untuk memicu, misalnya jatuh, naik, dll.
- RISING: Untuk memicu interupsi ketika pin berpindah dari LOW ke HIGH.
- JATUH: Untuk memicu interupsi saat pin berpindah dari HIGH ke LOW.
- CHANGE: Untuk memicu interupsi ketika pin berpindah dari LOW ke HIGH atau HIGH ke LOW (yaitu, ketika status pin berubah).
Beberapa Kondisi saat menggunakan Interrupt
- Fungsi Interrupt Service Routine (ISR) harus sesingkat mungkin.
- Fungsi Delay () tidak bekerja di dalam ISR dan harus dihindari.
Dalam tutorial Interupsi Arduino ini, angka bertambah dari 0 dan dua tombol tekan digunakan untuk memicu Interupsi, masing-masing terhubung ke D2 & D3. Sebuah LED digunakan untuk menunjukkan Interupsi. Jika satu tombol ditekan, led akan ON dan tampilan menunjukkan interupsi2 dan mati, dan ketika tombol tekan lain ditekan, led mati dan tampilan menunjukkan interupsi1 dan mati.
Komponen Diperlukan
- Arduino Board (Dalam tutorial ini Arduino NANO digunakan)
- Tombol tekan - 2
- LED - 1
- Resistor (10K) - 2
- LCD (16x2) - 1
- Papan Roti
- Menghubungkan Kabel
Diagram Sirkuit
Koneksi Sirkuit antara Arduino Nano dan layar LCD 16x2:
LCD |
Arduino Nano |
VSS |
GND |
VDD |
+ 5V |
V0 |
Ke PIN Pusat Potensiometer Untuk Mengontrol Kontras LCD |
RS |
D7 |
RW |
GND |
E |
D8 |
D4 |
D9 |
D5 |
D10 |
D6 |
D11 |
D7 |
D12 |
SEBUAH |
+ 5V |
K |
GND |
Dua tombol push terhubung ke Arduino Nano di pin D2 & D3. Mereka digunakan untuk menggunakan dua interupsi eksternal, satu untuk menyalakan LED dan satu lagi untuk mematikan LED. Setiap tombol tekan memiliki resistor pull down 10k yang terhubung ke ground. Jadi saat push button di tekan berlogika TINGGI (1) dan bila tidak ditekan berlogika LOW (0). Sebuah resistor Pull down wajib diisi jika tidak akan ada nilai mengambang pada pin input D2 & D3.
Sebuah LED juga digunakan untuk menunjukkan bahwa Interrupt telah memicu atau tombol telah ditekan.
Pemrograman Interupsi Arduino
Dalam tutorial ini angka bertambah dari 0 yang ditampilkan terus menerus dalam LCD (16x2) yang terhubung ke Arduino Nano, setiap kali tombol tekan kiri (pin interupsi D3) ditekan, LED menyala dan tampilan menunjukkan Interupsi2, dan ketika tombol tekan kanan (pin interupsi D2) ditekan LED mati dan tampilan menunjukkan Interupsi1.
Kode Lengkap dengan video kerja diberikan di akhir tutorial ini.
1. Pertama , file header untuk tampilan LCD disertakan dan kemudian pin LCD yang digunakan untuk menghubungkan dengan Arduino Nano ditentukan.
#include
2. Di dalam fungsi void setup (), pertama-tama tampilkan beberapa pesan intro pada layar LCD. Pelajari lebih lanjut tentang antarmuka LCD dengan Arduino di sini.
lcd.begin (16,2); lcd.setCursor (0,0); lcd.print ("CIRCUIT DIGEST"); lcd.setCursor (0,1); lcd.print ("ArduinoInterrupt"); penundaan (3000); lcd.clear ();
3. Kemudian dalam fungsi void setup () yang sama, pin input dan output harus ditentukan. Pin D13 terhubung ke Anoda LED, jadi pin ini harus didefinisikan sebagai output.
pinMode (13, OUTPUT);
4. Sekarang bagian penting utama dalam pemrograman adalah fungsi attachInterrupt (), itu juga termasuk di dalam void setup ().
attachInterrupt (digitalPinToInterrupt (2), buttonPressed1, RISING); attachInterrupt (digitalPinToInterrupt (3), buttonPressed2, RISING);
Di sini ditentukan bahwa pin 2 untuk interupsi eksternal, dan fungsi buttonPressed1 dipanggil ketika ada RISING (LOW to HIGH) pada pin D2. Dan pin 3 juga untuk interupsi eksternal dan fungsi buttonPressed2 dipanggil ketika ada RISING pada pin D3.
5. Di dalam void loop (), angka (i) bertambah dari nol dan dicetak pada LCD (16x2).
lcd.clear (); lcd.print ("COUNTER:"); lcd.print (i); ++ i; penundaan (1000);
Dalam void loop () yang sama, digitalWrite () digunakan pada pin D13 di mana anoda LED terhubung. Bergantung pada nilai dalam variabel output LED akan menyala atau mati
digitalWrite (13, keluaran);
6. Bagian terpenting adalah membuat fungsi penangan interupsi sesuai dengan nama yang digunakan dalam fungsi attachInterrupt () .
Karena dua pin interupsi digunakan 2 dan 3 maka diperlukan dua ISR. Di sini, di pemrograman ini ISR berikut digunakan
tombolTekan 1 ():
void buttonPressed1 () { output = LOW; lcd.setCursor (0,1); lcd.print ("Interupsi 1"); }
Fungsi ini dijalankan saat push button pada pin D2 ditekan (RISING EDGE). Fungsi ini mengubah status output ke LOW menyebabkan LED mati dan mencetak "interrupt1" pada layar LCD.
tombolTekan2 ():
void buttonPressed2 () {output = HIGH; lcd.setCursor (0,1); lcd.print ("Interupsi2"); }
Fungsi ini dijalankan saat push button pada pin D3 ditekan. Fungsi ini mengubah status output ke TINGGI menyebabkan LED menyala dan mencetak "interupsi2" pada layar LCD.
Demonstrasi Interupsi Arduino
1. Saat PUSH BUTTON di sisi kiri ditekan, LED akan ON dan LCD menampilkan Interrupt2.
2. Saat TOMBOL PUSH di sisi kanan ditekan, LED akan mati dan LCD menampilkan Interupsi1
Beginilah cara Interrupt dapat berguna untuk memicu tugas penting apa pun di antara eksekusi normal.