Tutorial Belajar Interrupt Arduino Dasar


Pada saat program running pada microcontroller, umumnya menjalankan instruksi secara berurutan instruction. Sebuah interrupt merupakan external event yang akan dieksekusi terlebih dahulu. Dengan kata lain program yang seharusnya dijalankan secara berurutan tersebut, akan ditunda, untuk mengerjakan instruksi interrupt, Interrupt Service Routine (ISR), terlebih dahulu. Singkat kata interrupt memiliki prioritas eksekusi lebih tinggi dari blok program biasa. Baru, setelah Interrupt Service Routine (ISR) selesai dijalankan, sistem akan kembali menjalankan program secara berurutan kembali. Dalam hal ini instruksi merupakan sebuah machine instruction, bukan berupa baris source code (sketch) dalam C.

<img src="arduino.png" alt="arduino">


Sebelum menjalankan suatu interrupt dan memanggil ISR, ada beberapa syarat yang harus terpenuhi terlebih dahulu, yakni.
  • Interrupt harus terlebih dahulu aktif, enable
  • Untuk interrupt mask yang terkait juga harus aktif, enable
Pada umumnya interrupt dapat diaktifkan dengan function interrupts(), atau noInterrupts() untuk tidak menjalankan interrupt. Secara default pada Arduino firmware interrupt telah aktif, bersifat enable. Untuk interrupt mask dapat dijalankan atau dimatikan melalui setting bit pada Interrupt Mask Register, TIMSKx.
Pada saat sebuah interrupt terjadi, flag pada interrupt flag register (TIFRx) diberikan nilai high. Kemudian bit interrupt tersebut dengan sendirinya dikembalikan ke kondisi default, ketika memasuki ISR, atau dengan secara manual pada bit interrupt flag register.

Timer Interrupt
Suatu timer dapat digunakan untuk menghasilkan berbagai macam interrupt. Untuk register dan definisi bit bisa dilihat pada data sheet dan pada I/O file header iomx8.h untuk Arduino. Contoh TIMSK1, Timer1 Interrupt Mask Register 1, atau OCR2A Timer2 Output Compare Register A.

Timer Overflow
Timer overflow berarti timer telah mencapai nilai batas. Pada saat timer overflow interrupt terjadi, timer overflow bit TOVx akan menjalankan interrupt flag register TIFRx. Pada saat timer overflow interrupt enable bit TOIEx pada interrupt mask register TIMSKx aktif, maka timer overflow interrupt service routine ISR(TIMERx_OVF_vect) akan dijalankan.

Output Compare Match
Pada saat output compare match interrupt terjadi, flag OCFxy akan menjalankan interrupt flag register TIFRx . Ketika output compare interrupt enable bit OCIExy pada interrupt mask register TIMSKx dijalankan, output compare match interrupt service routine ISR(TIMERx_COMPy_vect) akan dijalankan.

Timer Input Capture
Pada saat timer input capture interrupt terjadi, input capture flag bit ICFx akan menjalankan interrupt flag register TIFRx. Ketika input capture interrupt enable bit ICIEx pada interrupt mask register TIMSKx dijalankan, maka timer input capture interrupt service routine ISR(TIMERx_CAPT_vect) akan dijalankan.