- Jenis Gangguan
- Mengganggu di Arduino
- Menggunakan Gangguan di Arduino
- Komponen Diperlukan
- Rajah Litar
- Pengaturcaraan Selang Arduino
- Demonstrasi Mengganggu Arduino
Pertimbangkan kereta yang bergerak pantas, jika tiba-tiba dilanggar oleh kereta lain ke arah yang bertentangan, perkara pertama yang berlaku adalah, sensor pecutan yang ada di dalam kereta merasakan penyahpecutan secara tiba-tiba dan mencetuskan gangguan luaran ke mikrokontroler yang ada di kereta itu. Kemudian berdasarkan gangguan itu, mikrokontroler menghasilkan isyarat elektrik untuk segera memasang beg udara. Pengawal mikro yang terdapat di dalam kereta memantau banyak perkara secara serentak seperti merasakan kelajuan kereta, memeriksa sensor lain, mengawal suhu penghawa dingin dan lain-lain. Jadi apa yang menyebabkan pembukaan beg udara secara tiba-tiba dalam beberapa saat? Jawapannya adalah gangguan, isyarat gangguan digunakan di sini yang mempunyai keutamaan tertinggi dari semua.
Contoh sederhana lain dari gangguan adalah telefon bimbit skrin sentuh yang mempunyai keutamaan tertinggi dalam arti "Sentuhan". Hampir setiap alat elektronik mempunyai gangguan untuk 'mengganggu' proses biasa dan melakukan beberapa perkara keutamaan yang lebih tinggi pada acara tertentu. Proses biasa disambung semula setelah menjalani perkhidmatan Interrupt.
Oleh itu secara teknikal, Interrupts adalah mekanisme di mana I / O atau arahan dapat menangguhkan pelaksanaan normal pemproses dan diservis sendiri kerana mempunyai keutamaan yang lebih tinggi. Sebagai contoh, pemproses yang melakukan pelaksanaan normal dapat diganggu oleh beberapa sensor untuk menjalankan proses tertentu yang terdapat di ISR ββ(Interrupt Service Routine). Setelah menjalankan pemproses ISR sekali lagi dapat meneruskan pelaksanaan normal.
Jenis Gangguan
Terdapat dua jenis gangguan:
Gangguan Perkakasan: Ia berlaku apabila peristiwa luaran berlaku seperti pin gangguan luaran mengubah keadaannya dari RENDAH ke TINGGI atau TINGGI ke RENDAH.
Gangguan Perisian: Ia berlaku mengikut arahan dari perisian. Contohnya gangguan Pemasa adalah gangguan perisian.
Mengganggu di Arduino
Sekarang kita akan melihat bagaimana menggunakan gangguan di Arduino Board. Ia mempunyai dua jenis gangguan:
- Gangguan Luaran
- Tukar Pin Ganggu
Gangguan Luaran:
Gangguan ini ditafsirkan oleh perkakasan dan sangat pantas. Gangguan ini dapat diatur untuk memicu sekiranya berlaku tahap RISING atau FALLING atau RENDAH.
Lembaga Arduino |
Pin Gangguan Luaran: |
UNO, NANO |
2,3 |
Mega |
2,3,18,19,20,21 |
Gangguan Pin Pin:
Arduino boleh mempunyai pin gangguan yang lebih banyak diaktifkan dengan menggunakan gangguan penukaran pin. Di papan Arduino berasaskan ATmega168 / 328 sebarang pin atau semua 20 pin isyarat boleh digunakan sebagai pin gangguan. Mereka juga boleh dipicu menggunakan tepi yang RISING atau JATUH.
Menggunakan Gangguan di Arduino
Untuk menggunakan gangguan dalam Arduino, konsep berikut perlu difahami.
Rutin Perkhidmatan Ganggu (ISR)
Rutin Perkhidmatan Interrupt atau pengendali Interrupt adalah peristiwa yang mempunyai sekumpulan petunjuk kecil di dalamnya. Apabila gangguan luaran berlaku, pemproses terlebih dahulu menjalankan kod ini yang ada di ISR ββdan kembali ke keadaan di mana ia meninggalkan pelaksanaan normal.
ISR mempunyai sintaks berikut di Arduino:
attachInterrupt (digitalPinToInterrupt (pin), ISR, mod);
digitalPinToInterrupt (pin): Di Arduino Uno, NANO pin yang digunakan untuk gangguan adalah 2,3 & dalam mega 2,3,18,19,20,21. Tentukan pin input yang digunakan untuk gangguan luaran di sini.
ISR: Ini adalah fungsi yang dipanggil ketika gangguan luaran dilakukan.
Mode: Jenis peralihan untuk mencetuskan, mis.
- RISING: Untuk mencetuskan gangguan ketika pin bergerak dari RENDAH ke TINGGI.
- JATUH: Untuk mencetuskan gangguan ketika pin beralih dari TINGGI ke RENDAH.
- PERUBAHAN: Untuk mencetuskan gangguan ketika pin beralih dari RENDAH ke TINGGI atau TINGGI ke RENDAH (iaitu, apabila keadaan pin berubah).
Beberapa Syarat semasa menggunakan Interrupt
- Fungsi Interrupt Service Routine (ISR) mestilah sesingkat mungkin.
- Fungsi Delay () tidak berfungsi di dalam ISR dan harus dielakkan.
Dalam tutorial Arduino Interrupt ini, angka bertambah dari 0 dan dua butang tekan digunakan untuk memicu Interrupt, masing-masing disambungkan ke D2 & D3. LED digunakan untuk menunjukkan Interrupt. Sekiranya satu butang tekan ditekan, led akan menyala dan paparan menunjukkan interrupt2 dan mati, dan apabila butang tekan lain ditekan, LED akan mati dan paparan menunjukkan gangguan1 dan mati.
Komponen Diperlukan
- Arduino Board (Dalam tutorial ini Arduino NANO digunakan)
- Butang tekan - 2
- LED - 1
- Perintang (10K) - 2
- LCD (16x2) - 1
- Papan Roti
- Wayar Penyambung
Rajah Litar
Sambungan Litar antara paparan Arduino Nano dan 16x2 LCD:
LCD |
Arduino Nano |
VSS |
GND |
VDD |
+ 5V |
V0 |
Ke PIN Pusat Potensiometer Untuk Mengawal Kontras LCD |
RS |
D7 |
RW |
GND |
E |
D8 |
D4 |
D9 |
D5 |
D10 |
D6 |
D11 |
D7 |
D12 |
A |
+ 5V |
K |
GND |
Dua butang tekan disambungkan ke Arduino Nano di pin D2 & D3. Mereka digunakan untuk menggunakan dua gangguan luaran, satu untuk mematikan LED dan satu lagi untuk mematikan LED. Setiap butang tekan mempunyai perintang penarik 10k yang disambungkan ke tanah. Oleh itu, apabila butang tekan ditekan adalah logik TINGGI (1) dan apabila tidak ditekan maka logiknya RENDAH (0). Perintang tarik ke bawah adalah wajib jika tidak, akan ada nilai apungan pada pin input D2 & D3
A LED juga digunakan untuk menunjukkan bahawa Interrupt telah dicetuskan atau butang yang telah ditekan.
Pengaturcaraan Selang Arduino
Dalam tutorial ini, angka bertambah dari 0 yang terus menerus dipaparkan dalam (16x2) LCD yang disambungkan ke Arduino Nano, setiap kali butang tekan kiri (pin interupsi D3) ditekan, LED menyala dan paparan menunjukkan Interrupt2, dan apabila butang tekan kanan (pin interrupt D2) ditekan LED mati dan paparan menunjukkan Interrupt1.
Kod Lengkap dengan video berfungsi diberikan pada akhir tutorial ini.
1. Pertama fail header untuk paparan LCD disertakan dan kemudian pin LCD yang digunakan untuk menyambung dengan Arduino Nano ditentukan.
#sertakan
2. Di dalam fungsi setup void (), paparkan dahulu beberapa mesej intro pada paparan LCD. Ketahui lebih lanjut mengenai menghubungkan LCD dengan Arduino di sini.
lcd.begin (16,2); lcd.setCursor (0,0); lcd.print ("CIRCUIT DIGEST"); lcd.setCursor (0,1); lcd.print ("ArduinoInterrupt"); kelewatan (3000); lcd.clear ();
3. Kemudian dalam fungsi kekosongan yang sama () fungsi input dan output pin mesti ditentukan. Pin D13 disambungkan ke Anode LED, jadi pin ini mesti ditakrifkan sebagai output.
pinMode (13, OUTPUT);
4. Sekarang bahagian penting utama dalam pengaturcaraan adalah fungsi attachInterrupt (), ia juga disertakan di dalam setup void ().
attachInterrupt (digitalPinToInterrupt (2), butangTekan1, RISING); attachInterrupt (digitalPinToInterrupt (3), buttonPressed2, RISING);
Di sini dinyatakan bahawa pin 2 adalah untuk gangguan luaran, dan fungsi buttonPressed1 dipanggil apabila terdapat RISING (RENDAH ke TINGGI) pada pin D2. Dan pin 3 juga untuk gangguan luaran dan fungsi buttonPressed2 dipanggil apabila terdapat RISING pada pin D3.
5. Di dalam gelung kekosongan (), angka (i) bertambah dari sifar dan dicetak pada LCD (16x2).
lcd.clear (); lcd.print ("KAUNTER:"); lcd.print (i); ++ i; kelewatan (1000);
Dalam gelung kekosongan yang sama (), digitalWrite () digunakan pada pin D13 di mana anod LED disambungkan. Bergantung pada nilai dalam output berubah LED akan menyala atau mati
digitalWrite (13, output);
6. Bahagian yang paling penting ialah membuat fungsi pengendali interrupt mengikut nama yang digunakan dalam fungsi attachInterrupt () .
Oleh kerana dua pin interrupt digunakan 2 dan 3 maka diperlukan dua ISR. Di sini dalam pengaturcaraan ini digunakan ISR berikut
butang Ditekan1 ():
butang kekosonganTekanan1 () { output = RENDAH; lcd.setCursor (0,1); lcd.print ("Selang 1"); }
Fungsi ini dijalankan apabila butang tekan pada pin D2 ditekan (RISING EDGE). Fungsi ini mengubah keadaan output menjadi RENDAH menyebabkan LED mati dan mencetak "interrupt1" pada paparan LCD.
butang Ditekan2 ():
butang kosongTekanan2 () {output = TINGGI; lcd.setCursor (0,1); lcd.print ("Interrupt2"); }
Fungsi ini dilaksanakan apabila butang tekan pada pin D3 ditekan. Fungsi ini mengubah keadaan output menjadi TINGGI menyebabkan LED menyala dan mencetak "interrupt2" pada paparan LCD.
Demonstrasi Mengganggu Arduino
1. Apabila Tombol PUSH di sebelah kiri ditekan LED menyala dan LCD memaparkan Interrupt2.
2. Apabila Tombol PUSH di sebelah kanan ditekan LED menyala dan LCD memaparkan Interrupt1
Ini adalah bagaimana Interrupt dapat berguna untuk memicu tugas penting di antara pelaksanaan normal.