Cara menggunakan Timer Interupsi (Timer Interrupt) di Arduino

 Apa itu Timer?

Sebagai pengguna sekaligus programmer Arduino, kita pasti pernah menggunakan timer dan interupsi tanpa kita sadari. Itu karena semua perangkat keras tingkat rendah disembunyikan oleh fungsi Arduino yang sudah dibuat sebelumnya. Beberapa fungsi Arduino yang menggunakan timer dapat di temukan misalnya pada fungsi waktu: delay(), millis(), micros() dan delayMicroseconds().

Timer adalah bagian dari perangkat keras yang terpasang di pengontrol Arduino dan tergantung pada model dari Arduino itu sendiri. Selain itu, timer dapat memiliki jumlah pengatur waktu yang berbeda. Sebagai contoh, Arduino UNO memiliki 3 timer, yaitu: Timer0, Timer1, dan Timer2.

Apa fungsi Timer?

Timer1 dan Timer2 pada Arduino UNO adalah 8 bit yang berarti dapat menghitung dari 0 sampai 255. Timer1 adalah 16 bit sehingga dapat menghitung dari 0 sampai 65546. Apabila timer sudah mencapai nilai maksimumnya, ia akan kembali ke 0 atau mulai menurun tergantung pada mode yang dipilih. Misalnya, timer mulai meningkatkan nilainya dari 0. Ketika kita mencapai 255 dalam kasus register 8 bit, kita kembali ke 0 dan meningkat sekali lagi. Sehingga akan membuat kurva zig zag.

Apa itu Prescalar?

Timer di atur oleh system clock, yang mana Arduino UNO mempunyai 16Mhz system clock atau tergantung pada bootloader yang bisa menjadi osilator internal sebesar 8MHz. Antara timer dan system clock, kita memiliki perangkat keras lain yang disebut prescalar. Prescalar ini membagi jumlah pulsa dari system clock dengan nomor yang dapat kita tentukan seperti 8, 64, 256 dan 1024.

Bisa kita bayangkan system clock 16Mhz  akan membuat sinyal persegi 16Mhz. Artinya, \(\frac{1}{16000000Hz}= 62.5ns (62.5 \times  10^{-9}s)\) untuk setiap pulsa. Misalnya, prescalar kita 64, maka keluaran sinyal dari prescalar akan menjadi lebih lambat 64 kali, yaitu sebesar \(4000ns\). Jadi, setiap 64 pulsa dari system clock, maka hitungan dari timer akan bertambah 1. Jika sudah mencapai hitungan maksimum 255 (8-bit), maka akan kembali lagi ke 0.

Mode ISR Timer

Setiap timer dapat menghasilkan satu atau lebih interupsi. Ketika interupsi terjadi, mikrokontroler menjalankan beberapa kode yang telah kita tempatkan dalam fungsi Interrupt Service Routine atau ISR. Berikut jenis-jenis mode interupsi:

Compare match

Kita dapat menulis nilai dalam register yang berbeda dan ketika nilai timer sama dengan nilai perbandingan, maka itu akan memicu interupsi. Sebagai contoh, kita menetapkan nilai compare match register sebesar100. Sehingga, setiap kali hitungan Timer0  sama dengan 100, maka itu akan membuat interupsi.

Overflow

Interupsi ini dipicu setiap kali hitungan timer mengalami overflow, artinya interupsi akan terjadi apabila hitungan timer melewati nilai maksimumnya 255 (dalam kasus 8-bit) dan kembali ke 0.

Input capture interrupt

Dalam hal ini, timer dapat menyimpan nilai pada register yang berbeda ketika setiap kali terjadi event (peristiwa) eksternal pada salah satu pin Arduino.

Pada Arduino UNO, mode compare match  dan overflow dapat di aplikasikan pada Timer0Timer1, dan Timer2. Namun, untuk mode input capture interrupt hanya dapat di aplikasikan pada Timer1.

Komentar

Yang lagi trending

Sistem Kontrol Dasar: Cara Merepresentasikan Sistem Dinamik

Sistem Kontrol Dasar: Apa itu Zero-Pole-Gain??

Apa itu access specifiers pada bahasa C++?