DAFTAR ISI
1. Dasar Teori [kembali]
TIMER DAN COUNTER
AVR ATMEGA16 memiliki tiga buah timer, yaitu Timer/Counter0 (8 bit), Timer/Counter1 (16 bit), dan Timer/Counter3 (16 bit).
Timer/ Counter 0
Timer/Counter0 adalah Timer/Counter 8 bit yang multifungsi. Fitur-fitur dari Timer/Counter0 pada ATMEGA16 adalah sebagai berikut.
a. Counter 1 kanal.
b. Timer di-nol-kan saat proses pembandingan tercapai (compare match).
c. Sebagai pembangkit gelombang PWM dan pembangkit frekuensi.
d. Clock prescaler 10 bit.
e. Sumber interupsi dari compare match (OCF0) dan overflow (TOV0).
Pengaturan Timer/Counter0 diatur oleh TCCR0 (Timer/Counter Control Register0) yang dapat dilihat pada Tabel dibawah.
Bit 7
|
Bit 6
|
Bit 5
|
Bit 4
|
Bit 3
|
Bit 2
|
Bit 1
|
Bit 0
|
FOC0
|
WGM00
|
COM01
|
COM00
|
WGM01
|
CS02
|
CS01
|
CS00
|
Penjelasan untuk tiap bit-bitnya adalah sebagai berikut.
a. Bit 7 – FOC0: Force Output Compare
b. Bit 6,3 –WGM01:WGM00: Waveform Generation Unit
Bit ini mengontrol kenaikan dari counter, sumber dari nilai maksimum counter, dan tipe dari jenis timer/counter yang dihasilkan, yaitu mode normal, clear timer, mode compare match, dan dua tipe dari PWM (Pulse Width Modulation).
Berikut ini tabel pengaturan pada bit WGM01 dan WGM00.
Mode
|
WGM01
(CTC0)
|
WGM00
(PWM0)
|
Mode operasi Timer/Counter
|
TOP
|
Update
OCR0
|
Bendera
TOV0
diset saat nilai
|
0
|
0
|
0
|
0xFF
|
Immediate
|
MAX
| |
1
|
0
|
1
|
PWM, phase correct
|
0xFF
|
TOP
|
BOTTOM
|
2
|
1
|
0
|
CTC
|
OCR0
|
Immediate
|
MAX
|
3
|
1
|
1
|
Fast PWM
|
0xFF
|
TOP
|
MAX
|
c. Bit 5, 4 – COM01:COM00: Compare Match Output Mode
Bit ini mengontrol pin OC0 (pin Output Compare). Apabila kedua bit ini nol atau clear, maka pin OC0 berfungsi sebagai pin biasa. Bila salah satu bit set, maka fungsi pin ini tergantung pada pengaturan bit pada WGM00 dan WGM01.
Berikut daftar tabel pengaturan bit COM01 dan COM00 sesuai pengaturan bit pada WGM00 dan WGM01.
Tabel Pengaturan Bit COM01 dan COM00 Mode Non-PWM
COM01
|
COM00
|
Keterangan
|
0
|
0
|
Operasi port normal, OC0 tidak dihubungkan.
|
0
|
1
|
Toggle OC0 saat proses pembandingan tercapai.
|
1
|
0
|
Clear OC0 saat proses pembandingan tercapai.
|
1
|
1
|
Set OC0 saat proses pembandingan tercapai.
|
Tabel Pengaturan Bit COM01 dan COM00 Mode Fast PWM
COM01
|
COM00
|
Keterangan
|
0
|
0
|
Operasi port normal, OC0 tak dihubungkan.
|
0
|
1
|
Reserved
|
1
|
0
|
Clear OC0 saat proses pembandingan tercapai, set OC0 pada nilai TOP.
|
1
|
1
|
Set OC0 saat proses pembandingan tercapai, clear OC0 pada nilai TOP.
|
Tabel Pengaturan Bit COM01 dan COM00 Mode Phase Correct PWM
COM01
|
COM00
|
Keterangan
|
0
|
0
|
Operasi port normal, OC0 tak dihubungkan.
|
0
|
1
|
Reserved
|
1
|
0
|
Clear OC0 saat proses pembandingan tercapai, yaitu ketika hitungan naik. Set OC0 saat proses pembandingan tercapai, yaitu ketika hitungan turun.
|
1
|
1
|
Set OC0 saat proses pembandingan tercapai, yaitu ketika hitungan naik. Clear OC0 saat proses pembandingan tercapai, yaitu ketika hitungan turun.
|
d. Bit 2, 1, 0 – CS02, CS01, CS00: Clock Select
Ketiga bit tersebut untuk memilih sumber clock yang akan digunakan oleh Timer/Counter0.
Tabel Konfigurasi Bit Clock Select
CS02
|
CS01
|
CS00
|
Keterangan
|
0
|
0
|
0
|
Tanpa sumber clock (timer/counter tidak difungsikan).
|
0
|
0
|
1
|
clkI/O /1 (tanpa prescaling)
|
0
|
1
|
0
|
clkI/O /8 (dari prescaler)
|
0
|
1
|
1
|
clkI/O /64 (dari prescaler)
|
1
|
0
|
0
|
clkI/O /256 (dari prescaler)
|
1
|
0
|
1
|
clkI/O /1024 (dari prescaler)
|
1
|
1
|
0
|
Sumber clock eksternal pada pin T0. Clock pada falling edge.
|
1
|
1
|
1
|
Sumber clock eksternal pada pin T0. Clock pada rising edge.
|
2. Hardware [kembali]
3. Rangkaian Simulasi [kembali]
4. Flowchart [kembali]
5. Listing Program [kembali]
#include <mega16.h> // pemanggilan fungsi I/O atmega 16
bit fl_timer; // deklarasi varibel fl_timer
interrupt [TIM1_OVF] void timer1_ovf_isr(void) // Timer1 overflow interrupt service routine
{
TCNT1H=0xD5; // reinitialize timer 1 value
TCNT1L=0xD0; // reinitialize timer 1 value
if(fl_timer==1) // periksa flag timer
{
PORTC=0xff; // jika fl_timer=1 > led mati
fl_timer=0; // clear fl_timer
}
else
{
PORTC=0x00; // jika fl_timer=0 > led nyala
fl_timer=1; // set fl_timer
}
}
void main(void)
{
PORTC=0x00;
DDRC=0xff;
TCCR1A=(0<<COM1A1) | (0<<COM1A0) | (0<<COM1B1) | (0<<COM1B0) | (0<<WGM11) | (0<<WGM10); // register pada TCCR1A off
TCCR1B=(0<<ICNC1) | (0<<ICES1) | (0<<WGM13) | (0<<WGM12) | (1<<CS12) | (0<<CS11) | (1<<CS10); // clk I/O / 1024 ( from prescaler
TCNT1H=0xD5; // reinitialize timer 1 value
TCNT1L=0xD0; // reinitialize timer 1 value
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;
#asm("sei")
fl_timer=0; // kondisi awal flag timer '0'
while (1)
{
// Place your code here
}
}
7. Link Download [kembali]
<rangkaian simulasi>
<listing program>
<html>
Tidak ada komentar:
Posting Komentar