MIKROPROSESOR
TIMER PADA ARDUINO
LABORATORIUM MIKROKONTROLER
PROGRAM STUDI TEKNIK ELEKTROMEDIK
PROGRAM VOKASI
UNIVERSITAS MUHAMMADIYAH YOGYAKARTA
2019
TUGAS I
TIMER PADA ARDUINO
I. Dasar Teori
Sebuah pewaktu, timer, merupakan bagian dari microcontroller yang berperan sebagai clock
internal untuk mengukur waktu suatu event. Untuk timer dapat diatur dengan menggunakan
beberapa register khusus. Pada firmware Arduino semua timer memiliki konfigurasi frekuensi
1 kHz dengan enable interrupt. Berikut ini timer khusus untuk Arduino.
A. Interrupt
Interrupt adalah suatu fungsi yang dapat digunakan untuk membuat sesuatu terjadi secara
otomatis, dapat juga dipakai untuk penggunaan timer dan pulse with modulation (PWM).
Saat interrupt dipicu atau dipanggil, fungsi ini akan menghentikan program yang sedang
dijalankan dan menjalankan program yang berada pada fungsi interrupt.
Interrupt external dapat kita picu dengan menambahkan fungsi sebagai berikut :
attachinterrupt(interrupt, function, mode)
Arduino sendiri telah menyediakan pin untuk penggunaan interrupt, Tabel 1.1 berikut
menunjukkan pin interrupt pada arduino.
Tabel 1.1 Pin Interrupt pada Arduino
BOARD DIGITAL PINS USABLE FOR INTERUPTS
UNO, NANO, MINI, OTHER 2, 3
328-BASED
UNO WIFI REV.2 All digital pins
MEGA, MEGA2560, MEGAADK 2, 3, 18, 19, 20, 21
MICRO, LEONARDO, OTHER 0, 1, 2, 3, 7
32U4-BASED
ZERO All digital pins, except 4
MKR FAMILY BOARDS 0, 1, 4, 5, 6, 7, 8, 9, A1, A2
DUE All digital pins
101 All digital pins (Only pins 2, 5, 7, 8, 10, 11, 12, 13
work with change)
Arduino memiliki 4 keadaan/ mode untuk memicu interrupt yaitu :
1. LOW
Mode ini akan mengaktifkan interrupt saat pin interrupt memiliki input low dan akan
terus aktif selama masih berlogika low.
2. CHANGE
1
Interrupt akan aktif jika terjadi perubahan logika pada pin interrupt baik dari HIGH –
LOW ataupun sebaliknya. Pengaktifan mode ini terjadi hanya sementara dan program
arduino sebelumnya akan kembali bekerja.
3. RISING
Pengaktifan akan terjadi jika pin interrupt mengalami perubahan dari logika LOW-
HIGH. Sifat pengaktifan mode ini sama seperti mode CHANGE.
4. FALLING
Pengaktifan akan terjadi jika pin mengalami perubahan logika dari HIGH-LOW. Sifat
pengaktifan mode ini sama seperti mode CHANGE.
B. Timer Register
Salah satu timer register yang paling penting adalah TCCRx (Timer/Counter Control
Register), dengan x adalah nomor. Berikut merupakan timer register yang sering
digunakan :
1. TCCRx (Timer/ Counter Control Register), prescaler sekaligus mode operasi timer
dapat dikonfigurasi di sini.
2. TCNTx (Timer/ Counter Register), nilai timer akan disimpan, merupakan register
pencacah mulai dari 0 hingga nilai maksimum.
3. OCRx (Output Compare Register), berfungsi untuk membandingkan nilai OCR yang
diberikan dengan TCNT.
4. TIMSKx (Timer/ Counter Interrupt Mask Register), digunakan untuk menjalankan
atau mematikan timer interrupt.
5. TIFRx (Timer/ Counter Interrupt Flag Register), menandakan timer interrupt hasil
operasi timer.
C. Timer 0
Timer 0 terdiri atas 8 bit data sehingga, timer ini hanya dapat menampung data counter
maksimum 255. Setelah timer mencapai nilai maksimum, timer akan kembali ke nilai
nol. Keadaan ini sering disebut dengan overflow timer. Timer 0 sering digunakan untuk
fungsi pewaktu seperti delay(), millis() dan micros().
Berikut merupakan gambar penggunaan Timer 0 pada ATMega 328
2
ATMega328 memiliki register ORC0 sehingga mampu berjalan pada mode normal dan
CTC.
TOV0 dapat digunakan untuk menghasilkan interupsi timer overflow sementara itu, untuk
mengaktifkan penghitung waktu 0 ATMega perlu SET (1) bit TOIE 0 dalam register
TIMSK. Berikut langkah – langkah untuk mengatur nya :
1. Atur TCCR0A
2. Atur TCCR0B
Pengaturan pada TCCRx akan mengatur prescaler maupun mode timer. Berikut
merupakan deskripsi dari pengaturan yang dipakai
3
D. Timer 1
Timer 1 terdiri atas 16 bit data, dapat menampung data counter maksimum 65535. Dalam
arduino, timer 1 yang banyak digunakan adalah Servo library. Berikut merupakan gambar
penggunaan timer 1 pada ATMega 328
Timer / Counter1 dapat berjalan dalam mode normal (0xFFFF) dan 2 mode
CTC. Perbedaan antara mode 2 CTC bahwa mode 4 menggunakan register OCR1A untuk
nilai perbandingannya dan mode 12 menggunakan register ICR1.
TOV1 dapat menghasilkan interupsi overflow dalam mode normal. Untuk mengaktifkan
timer1 overflow, SET (1) bit TOIE1 dalam register TIMSK1.
Dalam mode CTC (mode 4) OCIF1A dapat menghasilkan interupsi ketika mendeteksi
kecocokan pembandingan untuk mengaktifkan timer1, CTC interrupt SET (1) bit OCF1A
dalam register TIMSK1.
Dalam mode CTC (mode 12) TICIE1 dapat menghasilkan interupsi ketika mendeteksi
kecocokan pembandingan. Untuk mengaktifkan SET1 CTC interupsi timer1 (1) bit TICIE1
dalam register TIMSK1.
4
E. Timer 2
5
Timer 2 memiliki penyimpanan data yang sama dengan Timer 0 sebanyak 8 bit data
namun, fungsi untuk timer 2 berbeda. Timer 2 bekerja dengan fungsi tone().
Gambar berikut menjelaskan tentang pengaturan pada timer 2
Timer / Counter2 adalah timer yang lebih disukai programmer untuk penundaan waktu
yang singkat karena, prescalernya memiliki jumlah opsi terbanyak serta dapat berjalan
dalam mode normal atau mode CTC.
Dalam mode normal, TOV2 dapat menghasilkan interupsi overflow, untuk mengaktifkan
timer1 overflow, SET (1) bit TOIE1 dalam register TIMSK2.
Dalam mode CTC, OCIF2 dapat menghasilkan interupsi ketika mendeteksi kecocokan
pembandingan. Untuk mengaktifkan timer1 SET interupsi CTC (1) OCF2 sedikit dalam
register TIMSK.
6
II. Hasil
A. Timer
#include <TM1637Display.h> //memasukkan library TM1637
sei();//menjalankan interrupt
7
}
if(mili >= 100) //jika mili lebih besar atau sama dengan 100
mili=0;//mili tertampil 0
B. Timer 1
#include <TM1637Display.h>
#define CLK 2
#define DIO 3
int mili,detik;
ISR(TIMER1_OVF_vect)
if (mili >= 1000) //jika mili bernilai lebih dari sama dengan 1000
detik++;//detik counter up
void setup()
8
display.setBrightness(0x0f);
sei();//menjalankan interupsi
C. Timer 2
#include <TM1637Display.h>
#define CLK 2
#define DIO 3
int mili,detik;
if (mili >= 1000) //jika mili lebih besar atau sama dengan 1000
display.setBrightness(0x0f);
9
TCCR2B=(1<<CS22) | (0<<CS21) | (0<<CS20); //prescaler diatur sebesar
64
sei();//menjalankan interupsi
III. Lampiran
10