Anda di halaman 1dari 10

TIMER - COUNTER

TUJUAN
1. Praktikan mampu memahami fungsi timer/counter dalam mikrokontroler AVR
2. Praktikan mampu mengatur fungsi timer/counter
3. Praktikan mampu membuat program untuk mengendalikan timer/counter serta untuk
aplikasinya.

DASAR TEORI
Mikrokontroler ATMega8535 memiliki beberapa pre-dimensi variable (register yang
terdapat pada datasheet) dengan fungsi tertentu. Tiga diantaranya adalah Timer0, Timer1
dan Timer2.
1. Timer0
Merupakan timer 8 bit jadi dapat menghitung dari 0 sampai dengan 255 yang multi fungsi,
fitur-fitur dari Timer0 adalah:
a. Counter 1 kanal
b. Timer di-nol-kan saat nilai perbandingan tercapai
c. Sebagai pembangkit gelombang PWM
d. Sebagai pembangkit frekuensi
2. Timer1
Merupakan timer 16 bit jadi dapat menghitung dari 0 sampai dengan 65535 yang
memungkinkan program pewaktu menjadi lebih akurat, fitur yang ada pada Timer1 antara
lain
a. Dua buah unit pembanding
b. Dua buah register pembanding
c. Satu buah input capture unit
d. Dapat menghasilkan gelombang PWM
e. Sebagai pembangkit frekuensi
3. Timer2
Merupakan timer 8 bit jadi dapat menghitung dari 0 sampai dengan 255, dengan fitur
hampir sama dengan timer0.

Register Timer dan Counter


Masing-masing timer/counter pada ATMega8535/16/32 memiliki register tertentu yang
digunakan untuk mengatur mode dan cara kerjanya, namun terdapat dua register yang
digunakan bersama-sama oleh ketiga timer/counter tersebut yaitu register TIMSK dan
register TIFR. Selain itu, masing-masing timer/counter memiliki register tersendiri yang
akan dibahas pada subbab berikut.
Register TIMSK
Register Timer/Counter Interrupt Mask (TIMSK) digunakan oleh ketiga timer
ATMega8535 untuk mengaktifkan interupsi. Register ini memiliki susunan bit seperti pada
Gambar 7.2.

Gambar 1. Register TIMSK


1. Bit7, Timer/Counter2 Output Compare Match Interrupt Enable (OCIE2),
merupakan bit untuk mengaktifkan interupsi Output Compare Match (OCM)
Timer/Counter2.

Petunjuk Praktikum Mikrokontroler Timer dan Counter 1


2. Bit6, Timer/Counter2 Overflow Interrupt Enable (TOIE2), merupakan bit untuk
mengaktifkan interupsi Overflow Timer/Counter2.
3. Bit5, Timer/Counter1 Input Capture Interrupt Enable (TICIE1), merupakan bit
untuk mengaktifkan interupsi Input Capture Timer/Counter1.
4. Bit4, Timer/Counter1 Output Compare A Match Interrupt Enable (OCIE1A),
merupakan bit untuk mengaktifkan interupsi Output Compare A Match (OCM)
Timer/Counter1.
5. Bit3, Timer/Counter1 Output Compare B Match Interrupt Enable (OCIE1B),
merupakan bit untuk mengaktifkan interupsi Output Compare B Match (OCM)
Timer/Counter1.
6. Bit2, Timer/Counter1 Overflow Interrupt Enable (TOIE1), merupakan bit untuk
mengaktifkan interupsi Overflow Timer/Counter1.
7. Bit1, Timer/Counter0 Output Compare Match Interrupt Enable (OCIE0),
merupakan bit untuk mengaktifkan interupsi Output Compare Match (OCM)
Timer/Counter0.
8. Bit0, Timer/Counter0 Overflow Interrupt Enable (TOIE0), merupakan bit untuk
mengaktifkan interupsi Overflow Timer/Counter0.
Register TIFR
Register Timer/Counter Interrupt Flag Register (TIFR) memilki fungsi sebagai penanda,
status, atau flag apakah terjadi interupsi atau tidak. Jika bernilai 1 berarti terjadi interupsi,
kemudian program akan melompat ke vektor interupsi yang sesuai. Susunan dari register
TIFR ditunjukkan pada Gambar 7.3.

Gambar 2. Register TIFR


1. Bit7, Timer/Counter2 Output Compare Match Flag (OCF2), merupakan flag yang
menunjukkan adanya interupsi Output Compare Match Timer/Counter2.
2. Bit6, Timer/Counter2 Overflow Flag (TOV2), merupakan flag yang menunjukkan
adanya interupsi Overflow Timer/Counter2.
3. Bit5, Timer/Counter1 Input Capture Flag (ICF1), merupakan flag yang
menunjukkan adanya interupsi Input Capture Timer/Counter1.
4. Bit4, Timer/Counter1 Output Compare A Match Flag (OCF1A), merupakan flag
yang menunjukkan adanya interupsi Output Compare A Match Timer/Counter1.
5. Bit3, Timer/Counter1 Output Compare B Match Flag (OCF1B), merupakan flag
yang menunjukkan adanya interupsi Output Compare B Match Timer/Counter1.
6. Bit2, Timer/Counter1 Overflow Flag (TOV1), merupakan flag yang menunjukkan
adanya interupsi Overflow Timer/Counter1.
7. Bit1, Timer/Counter0 Output Compare Match Flag (OCF0), merupakan flag yang
menunjukkan adanya interupsi Output Compare Match Timer/Counter0.
8. Bit0, Timer/Counter0 Overflow Flag (TOV0), merupakan flag yang menunjukkan
adanya interupsi Overflow Timer/Counter0.

Timer/Counter 8 bit (Timer0 dan Timer2)


Timer 8 bit dapat menghitung maksimal hingga 255 (00-FF) cacahan, dengan periode
setiap hitungan (clock) tergantung dari pengaturan prescaller-nya. Register yang mengatur
mode T/C dan prescaller-nya, digunakan register TCCRx (x adalah 0 atau 2). Contoh
susunan TCCRx yaitu sebagai berikut (contoh untuk TCCR0)

Petunjuk Praktikum Mikrokontroler Timer dan Counter 2


Gambar 3. TCCR0

1. Bit7, Force Output Compare (FOC0), digunakan pada mode non PWM, jika diset 1
maka pin OC0 akan mengeluarkan sinyal sesuai yang ditentukan COM01 dan
COM00.
2. Bit6 dan Bit 3, Waveform Generation Mode (WGM00 dan WGM01), digunakan
untuk menentukan mode Timer/Counter0, dengan susunan sesuai Tabel 7.1.

Table 1. Mode Timer0 dari konfigurasi WGM00 dan WGM01


Timer/Counter TOV0
WGM01 WGM00 Update of
Mode Mode of TOP Flag Set
(CTC0) (PWM0) OCR0
Operation on
0 0 0 Normal 0xFF Immediate MAX
PWM, Phase
1 0 1 0xFF TOP BOTTOM
Correct
2 1 0 CTC OCR0 Immediate MAX
3 1 1 Fast PWM 0xFF TOP MAX

3. Bit 5 dan 4, Compare Match Output Mode (COM01 dan COM00), digunakan untuk
mengatur keluaran dari pin OC0. Pengaturan COM01 dan COM00 ini berbeda
untuk tiap modenya, yaitu sesuai dengan Tabel 7.2, Tabel 7.3 dan Tabel 7.4.

Table 2. Bentuk keluaran OC0 pada Mode Non-PWM


COM01 COM00 Fungsi
Operasi normal, OC0 tidak
0 0
terhubung pin
Kondisi toggle jika
0 1
TCNT0=OCR0
Bernilai 0 setelah
1 0
TCNT0=OCR0
Bernilai 1 setelah TCNT0-
1 1
OCR0

Table 3. Bentuk keluaran OC0 pada Mode Fast PWM


COM01 COM00 Fungsi
Operasi normal, OC0 tidak
0 0
terhubung pin
0 1 Tidak digunakan
Bernilai 0 setelah
1 0 TCNT0=OCR0 dan bernilai 1
saat TOP (puncak)
Bernilai 1 setelah TCNT0-
1 1 OCR0, dan bernilai 0 saat TOP
(puncak)

Petunjuk Praktikum Mikrokontroler Timer dan Counter 3


Table 4. Bentuk keluaran OC0 pada Mode Phase Correct PWM
COM01 COM00 Fungsi
Operasi normal, OC0 tidak
0 0
terhubung pin
0 1 Tidak digunakan
Bernilai 0 setelah TCNT0=OCR0
saat mencacah naik, dan bernilai
1 0
1 setelah TCNT0=OCR0 saat
mencacah turun
Bernilai 1 setelah TCNT0=OCR0
saat mencacah naik, dan bernilai
1 1
0 setelah TCNT0=OCR0 saat
mencacah turun

4. Bit2, 1, dan 0, Clock Select, merupakan kombinasi bit untuk mengatur prescale
dengan susunan sesuai Tabel 7.5.

Table 5. Fungsi kombinasi bit CS00:2


CS02 CS01 CS00 Fungsi
Tidak ada clock, timer/counter
0 0 0
berhenti
0 0 1 Prescale = 1
0 1 0 Prescale = 8
0 1 1 Prescale = 64
1 0 0 Prescale = 256
1 0 1 Prescale = 1024
Sumber clock eksternal pada
1 1 0 pin T0, clock pada transisi
turun (falling edge)
Sumber clock eksternal pada
1 1 1 pin T0, clock pada transisi naik
(rising edge)

Register pada T/C 8 bit selain TCCRx adalah sebagai berikut

1. Timer/CounterX Register (TCNTx)


Register TCNTx berfungsi untuk menyimpan data cacahan Timer/Counterx.
Register ini memiliki ukuran 8-bit sehingga maksimal nilai cacahan adalah 0xFF
atau 255.
2. Output Compare Register x (OCR0)
Register OCRx berfungsi sebagai data pembanding yang akan selalu dibandingkan
dengan isi register TCNT0. Jika nilai TCNTx sama dengan nilai OCRx maka akan
terjadi keluaran pada pin OCx sesuai dengan mode yang telah ditentukan di register
TCCRx.
Timer Counter 16 bit (Timer1)
Timer1 sebagai T/C 16 bit, memiliki nilai maksimum cacahan sebanyak 65536 cacahan
atau 0x0000 0xFFFF. Register yang berkaitan dengan Timer1 yaitu TCCR1A, TCCR1B,
TCNT1H, TCNT1L, OCR1AH, OCR1AL, OCR1BH, OCR1BL

Petunjuk Praktikum Mikrokontroler Timer dan Counter 4


1. Timer/Counter1 Control Register A (TCCR1A)
TCCR1A memiliki susunan seperti pada Gambar 4.

Gambar 4. Susunan TCCR1A


Bit 7:6 merupakan COM1A1:0, dan bit 5:4 COM1B1:0, berfungsi untuk mengatur pola
keluaran pada pin OC1A dan OC1B seperti ditunjukkan pada Tabel 6, Tabel 7, dan Tabel
8.
Table 6. Bentuk keluaran OC1A/OC1B pada Mode Non-PWM

COM1A1/ COM1A0/
Fungsi
COM1B1 COM1B0
Operasi normal,
0 0 OC1A/OC1B tidak
terhubung pin
Kondisi toggle jika
0 1
TCNT1=OCR1A/OCR1B
Bernilai 0 setelah
1 0
TCNT1=OCR1A/OCR1B
Bernilai 1 setelah
1 1
TCNT1=OCR1A/OCR1B

Table 7. Bentuk keluaran OC1A/OC1B pada Mode Fast-PWM

COM1A1/ COM1A0/
Fungsi
COM1B1 COM1B0
0 0 Operasi normal, OC1A/OC1B tidak terhubung pin
Jika WGM13:0=15, OC1A toggle pada saat
0 1 TCNT1=OCR1A dan OC1B sebagai port I/O
WGM yang lain, OC1A/OC1B sebagai port I/O
Bernilai 0 setelah TCNT1=OCR1A/OCR1B dan
1 0
bernilai 1 setelah mencapai TOP
Bernilai 1 setelah TCNT1=OCR1A/OCR1B dan
1 1
bernilai 0 setelah mencapai TOP

Table 8. Bentuk keluaran OC1A/OC1B pada Mode Phase Correct-PWM

COM1A1/ COM1A0/
Fungsi
COM1B1 COM1B0
0 0 Operasi normal, OC1A/OC1B tidak terhubung pin
Jika WGM13:0=9 atau 14, OC1A toggle pada
saat TCNT1=OCR1A dan OC1B sebagai port
0 1
I/O
WGM yang lain, OC1A/OC1B sebagai port I/O
Bernilai 0 setelah TCNT1=OCR1A/OCR1B saat
1 0 mencacah naik dan bernilai 1 setelah
TCNT1=OCR1A/OCR1B saat mencacah turun
1 1 Bernilai 1 setelah TCNT1=OCR1A/OCR1B saat

Petunjuk Praktikum Mikrokontroler Timer dan Counter 5


mencacah naik dan bernilai 0 setelah
TCNT1=OCR1A/OCR1B saat mencacah turun
Bit3 adalah Force Output Compare for Channel A (FOC1A), dan Bit 2 adalah Force
Output Compare for Channel B (FOC1B), digunakan pada mode Non-PWM. Jika
FOC1A diset 1, maka pin OC1A akan dipaksa menghasilkan sinyal sesuai
pengaturan pada COM1A1:0. Demikian pula jika FOC1B diset 1, maka pin OC1B
akan dipaksa mengeluarkan sinyal sesuai pengaturan pada COM1B1:0.
Bit1:0, Waveform Generation Mode (WGM11 dan WGM10). Kedua bit ini
bersama-sama dengan WGM13 dan WGM12 pada register TCCR1B menentukan
mode pembangkitan runtun Timer/Counter1. Fungsi WGM10:13 ditunjukkan pada
Tabel. 9

Table 9. Deskripsi Waveform Generation Mode (WGM)

2. Timer/Counter1 Control Register B (TCCR1B)

Gambar 5. Register TCCR1B


Bit 7, Input Capture Noise Canceler (ICNC1), merupakan bit untuk mengaktifkan
filter pada pin ICP1. Jika ICNC1 diset 1, berarti filter pada ICP1 diaktifkan.
Bit 6, Input Capture Edge Select (ICES1), merupakan bit untuk mengatur pemicu
kejadian input capture. Jika ICES1 bernilai 0, maka input capture terpicu oleh
transisi turun (falling edge) pada pin ICP1, sedangkan jika bernilai 1, maka input
capture terpicu oleh transisi naik (rising edge)pada ICP1.
Bit 5 tidak digunakan
Bit 4:3, WGM13:12, digunakan bersama-sama dengan WGM11:WGM10. Lihat
Tabel 9.
Petunjuk Praktikum Mikrokontroler Timer dan Counter 6
Bit 2:0, Clock Select (CS12:0), merupakan bit untuk mengatur prescale yang akan
digunakan oleh Timer/Counter1 dimana penggunaannya sama dengan CS02:0 pada
Tabel 5.
3. Timer/Counter Register 1 (TCNT1H dan TCNT1L)
Register TCNT1H dan TCNT1L merupakan register untuk menyimpan data cacahan
Timer/Counter1. TCNT1H (High) merupakan MSB dari 16 bit, dan TCNT1L (Low)
sebagai LSB dari 16 bit. Gabungan keduanya mampu menyimpan hingga 65535
cacahan.
4. Output Compare Register 1 A (OCR1AH dan OCR1AL)
Gabungan kedua register ini sering disebut dengan OCR1A yang berfungsi untuk
menyimpan data pembanding 16 bit yang selalu dibandingkan dengan register
TCNT1.
5. Output Compare Register 1 B (OCR1BH dan OCR1BL)
Gabungan kedua register ini sering disebut dengan OCR1B yang berfungsi untuk
menyimpan data pembanding 16 bit yang selalu dibandingkan dengan register
TCNT1.
6. Input Capture Register 1 (ICR1H dan ICR1L)
Register ini digunakan untuk mengukur rentang waktu sebuah kejadian. Dengan
input capture dapat diukur frekuensi dan duty cycle suatu sinyal.

Prescaler
Pada dasarnya Timer hanya menghitung pulsa clock. Frekuensi pulsa clock yang dihitung
bisa sama dengan frekuensi kristal atau dapat diperlambat menggunakan prescaler dengan
faktor 8, 64, 256, 1024.
Misal suatu AVR dengan kristal 8 MHz, timer yang digunakan adalah Timer1 16 bit, maka
maksimum waktu yang dihasilkan adalah
Tmax = 1/fclock (FFFFh + 1)
= 0,125 s 65536
= 0,00819 s
Untuk menghasilkan waktu yang lebih lama, dapat digunakan prescaler misal yang
digunakan 1024 maka waktu maksimum yang dihasilkan timer adalah
Tmax = 1/fclock (FFFFh + 1) N
= 0,125 s 65536 1024
= 8,3886 s

Perhitungan Waktu Timer



= (1 + )
TCNT : Nilai timer (Hex/Dec)
fclock : frekuensi kristal (Hz)
Ttimer : waktu yang diinginkan (detik)
N : prescaler (1, 8, 64, 256, 1024)
1+FFFFh : Nilai maksimum timer 16 bit adalah FFFFh atau 8 bit adalah FFh dan saat
overflow.

LANGKAH KERJA
1. Hubungkan salah satu port dengan display led.
2. Hubungkan switch kedalam pin T0, T1, dan T2.

Petunjuk Praktikum Mikrokontroler Timer dan Counter 7


3. Buatlah program dibawah dengan CodeVision AVR, kemudian download dan amati hasilnya.

Program 1
/*membuat timer dengan TC0, fc=8Mhz
*/
#include <mega16.h>
#include <delay.h>
unsigned char lamp=0xCC;
interrupt [TIM0_OVF] void timer0_ovf_isr(void)
{
TCNT0=0X00; //set nilai T/C0
lamp=~lamp;
PORTB=lamp;
}
void main(void)
{
DDRB=0XFF; //PortD sebagai keluaran
PORTB=lamp; //data led dikeluarkan pada Port D
TCNT0=0X00; //Set nilai awal T/C0
TCCR0=0X05; //Set skala clock 1024
TIMSK=0X01; //Aktifkan interupt timer0
TIFR=0X00; //Hapus bendera interupt timer0
#asm("sei") //aktifkan interupsi global
while(1)
{
};
}

Program 2 : Timer untuk membuat delay 1 detik


/*membuat timer dengan TC0, fc=8Mhz
untuk delay 1 detik
*/
#include <mega16.h>
#include <delay.h>
unsigned char lamp=0xCC;
unsigned char count=0;
interrupt [TIM0_OVF] void timer0_ovf_isr(void)
{
TCNT0=0X64; //set nilai T/C0
count++;
if (count==50)
{
lamp=~lamp;
PORTB=lamp;
count=0;
}
}
void main(void)
{
DDRB=0XFF; //PortD sebagai keluaran
PORTB=lamp; //data led dikeluarkan pada Port D
TCNT0=0X64; //Set nilai awal T/C0
TCCR0=0X05; //Set skala clock 1024
TIMSK=0X01; //Aktifkan oscillosc timer0
TIFR=0X00; //Hapus bendera oscillosc timer0
#asm(sei) //aktifkan interupsi global
while(1)
{
};
}

Petunjuk Praktikum Mikrokontroler Timer dan Counter 8


Program 3 : Membuat counter mode FAST PWM dengan TC 1
/*program timer mode fast PWM dengan TC1
fc=8Mhz
membuat sinyal kotak frekuensi
amati keluaran 0C1A dan OC1B dengan oscilloscope
*/
#include <mega16.h>
void main(void)
{
DDRD=0XFF; //PortD out, karena OC1A/B ada di sini
TCCR1A=0XA3; //configurasi fast pwm 10 bit
TCCR1B=0X0B; //configurasi fast pwm 10 bit
TCNT1=0X0000; //set nilai awal tcnt1
OCR1A=0X0100; //set nilai OCR1A
OCR1B=0X0300; //set nilai OCR1B
while(1);
}

Program 4 : Membuat counter dari TC0


/*
Program counter dengan TC0, fc=8Mhz
*/
#include <mega16.h>
#include <delay.h>

interrupt [TIM0_OVF] void timer0_ovf_isr(void)


{
unsigned char i;
TCNT0=0XF6;
for(i=1;i<6;i++)
{
PORTD=0X0F;
delay_ms(500);
PORTD=0XF0;
delay_ms(500);
};
PORTD=0XFF;
}

void main(void)
{
DDRB=0X00;
PORTB=0XFF;
DDRD=0XFF;
PORTD=0XFF;
TCCR0=0X07; //T0 clock eksternal
TCNT0=0XF6;
TIMSK=0X01; //T0 interupt overflow
#asm("sei")
while(1)
{
PORTD=~TCNT0;
};
}

Tugas Praktikum
Hitung berapa waktu maksimum yang dihasilkan dari Program 1.
Variasikan variable pada Program 2 sehingga dapat menghasilkan delay waktu 2
atau 3 detik.
Ubahlah dan amati hasil pada Program 3 sehingga:

Petunjuk Praktikum Mikrokontroler Timer dan Counter 9


o Menjadi mode Fast PWM 8 atau 9 bit (ubah TCCR1A dan TCCR1B)
o Menjadi mode PWM Phase Correct 10 bit (ubah TCCR1A dan TCCR1B)
Pada Program 3 ubahlah juga nilai OCR1A dan OCR1B dan amati yang terjadi.
Pada Program 4 ubahlah menjadi counter dengan TC1.

Petunjuk Praktikum Mikrokontroler Timer dan Counter 10

Anda mungkin juga menyukai