Jelajahi eBook
Kategori
Jelajahi Buku audio
Kategori
Jelajahi Majalah
Kategori
Jelajahi Dokumen
Kategori
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.
1.
2.
3.
4.
5.
6.
7.
8.
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.
Fungsi
Operasi normal, OC0 tidak
terhubung pin
Tidak digunakan
Bernilai 0 setelah
TCNT0=OCR0 dan bernilai 1
saat TOP (puncak)
Bernilai 1 setelah TCNT0OCR0, dan bernilai 0 saat TOP
(puncak)
Fungsi
Operasi normal, OC0 tidak
terhubung pin
Tidak digunakan
Bernilai 0 setelah TCNT0=OCR0
saat mencacah naik, dan bernilai
1 setelah TCNT0=OCR0 saat
mencacah turun
Bernilai 1 setelah TCNT0=OCR0
saat mencacah naik, dan bernilai
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
0
0
0
0
1
1
0
1
1
0
0
1
0
1
0
1
Fungsi
Tidak ada clock, timer/counter
berhenti
Prescale = 1
Prescale = 8
Prescale = 64
Prescale = 256
Prescale = 1024
Sumber clock eksternal pada
pin T0, clock pada transisi
turun (falling edge)
Sumber clock eksternal pada
pin T0, clock pada transisi naik
(rising edge)
1.
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/
COM1B1 COM1B0
0
Fungsi
Operasi normal,
OC1A/OC1B tidak
terhubung pin
Kondisi toggle jika
TCNT1=OCR1A/OCR1B
Bernilai 0 setelah
TCNT1=OCR1A/OCR1B
Bernilai 1 setelah
TCNT1=OCR1A/OCR1B
COM1A1/ COM1A0/
COM1B1 COM1B0
0
0
0
Fungsi
Operasi normal, OC1A/OC1B tidak terhubung pin
Jika WGM13:0=15, OC1A toggle pada saat
TCNT1=OCR1A dan OC1B sebagai port I/O
WGM yang lain, OC1A/OC1B sebagai port I/O
Bernilai 0 setelah TCNT1=OCR1A/OCR1B dan
bernilai 1 setelah mencapai TOP
Bernilai 1 setelah TCNT1=OCR1A/OCR1B dan
bernilai 0 setelah mencapai TOP
COM1A1/ COM1A0/
COM1B1 COM1B0
0
0
0
Fungsi
Operasi normal, OC1A/OC1B tidak terhubung pin
Jika WGM13:0=9 atau 14, OC1A toggle pada
saat TCNT1=OCR1A dan OC1B sebagai port
I/O
WGM yang lain, OC1A/OC1B sebagai port I/O
Bernilai 0 setelah TCNT1=OCR1A/OCR1B saat
mencacah naik dan bernilai 1 setelah
TCNT1=OCR1A/OCR1B saat mencacah turun
Bernilai 1 setelah TCNT1=OCR1A/OCR1B saat
2.
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
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.
4.
5.
6.
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
fclock
Ttimer
N
1+FFFFh
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
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)
{
};
}
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
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.
10