Modul2-Timer Counter AVR in Cvavr PDF
Modul2-Timer Counter AVR in Cvavr PDF
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.
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.
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.
4. Bit2, 1, dan 0, Clock Select, merupakan kombinasi bit untuk mengatur prescale
dengan susunan sesuai Tabel 7.5.
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
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
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
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
LANGKAH KERJA
1. Hubungkan salah satu port dengan display led.
2. Hubungkan switch kedalam pin T0, T1, dan T2.
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)
{
};
}
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: