Anda di halaman 1dari 11

TUGAS I

MIKROPROSESOR
TIMER PADA ARDUINO

Nama : Novita Kusherdianti


NIM : 20173010080
Kelas : TEM C
Dosen Pengampu : Wisnu Kartika, S.T., M.Eng.

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

#define CLK 2 // pin 2 sebagai CLK

#define DIO 3 // pin 3 sebagai DIO

int mili,detik; // mengatur mili dan detik sebagai data integer

TM1637Display display(CLK, DIO); //display menampilkan CLK dan DIO

void setup()//inisialisasi program awal

display.setBrightness(0x0f); //pengaturan brightness

TCCR0A = 0; //mengatur TCCR0A di bit 0

TCCR0B = 0;//mengatur TCCR0B di bit 0

TCNT0 = 0;//menginisialisasi nilai TCNT0 sebagai 0

OCR0A = 156; // mengatur nilai OCR0A 156

TCCR0A |= (1 << WGM01); //mengatur nilai TCCR0A bernilai 1

TCCR0B |= (1 << CS02) | (1 << CS00);//mengatur CS01 Dan CS00 untuk


1024 prescaler

TIMSK0 |= (1 << OCIE0A); //menjalankan komparasi interrupt timer

sei();//menjalankan interrupt

7
}

ISR(TIMER0_COMPA_vect)//fungsi untuk menjalankan interupsi counter.

mili++; //counter pada int mili

if(mili >= 100) //jika mili lebih besar atau sama dengan 100

detik++; //detik counter up

mili=0;//mili tertampil 0

void loop()//inisialisasi program yang dijalankan secara terus menerus

display.showNumberDec(detik, true); //display menunjukkan nilai


detik sebagai bilangan desimal. Program diatur true sehingga semua LED
pada TM1637 akan hidup.

B. Timer 1
#include <TM1637Display.h>

#define CLK 2

#define DIO 3

int mili,detik;

TM1637Display display(CLK, DIO);

ISR(TIMER1_OVF_vect)

TCNT1H=0xC180 >> 8; //mengatur batas atas counter

TCNT1L=0xC180 & 0xff; //mengatur batas bawah TCNT

mili++; //mili akan counter up

if (mili >= 1000) //jika mili bernilai lebih dari sama dengan 1000

detik++;//detik counter up

mili=0;//mili akan bernilai 0

void setup()

8
display.setBrightness(0x0f);

TCCR1A=(0<<WGM11) |(0<<WGM10); //mengatur register A pada nilai 0

TCCR1B= (0<<WGM12) | (0<<CS12) | (0<<CS11) | (1<<CS10);//mengatur


interupsi timer tanpa prescaler.

TCNT1H=0xC1; //nilai timer batas atas

TCNT1L=0x80; //nilai timer batas bawah

TIMSK1=(1<<TOIE1); //memasukkan bit 1 pada TIMSK sebagai syarat


mengaktifkan timer

sei();//menjalankan interupsi

void loop() //program dijalankan secara berulang

display.showNumberDec(detik, true);//display menampilkan nilai detik


dalam decimal.

C. Timer 2
#include <TM1637Display.h>

#define CLK 2

#define DIO 3

int mili,detik;

TM1637Display display(CLK, DIO);

ISR(TIMER2_OVF_vect)//memperbarui waktu, menjalankan fungsi counter

TCNT2=0x06; //nilai TCNT diatur 6

mili++; //mili counter up

if (mili >= 1000) //jika mili lebih besar atau sama dengan 1000

detik++; //counter up detik

mili=0; //mili bernilai 0

void setup() //inisialisasi awal program

display.setBrightness(0x0f);

TCCR2A=(0<<WGM21) | (0<<WGM20); //mengatur register A di mode normal

9
TCCR2B=(1<<CS22) | (0<<CS21) | (0<<CS20); //prescaler diatur sebesar
64

TCNT2=0b00000110;//mengatur nilai TCNT sebesar 6

TIMSK2=(1<<TOIE2);//syarat mengaktifkan timer

sei();//menjalankan interupsi

void loop()//inisialisasi program yang dijalankan secara berulang

display.showNumberDec(detik, true);//menampilkan detik dalam bentuk


desimal pada TM1637

III. Lampiran

10

Anda mungkin juga menyukai