Anda di halaman 1dari 18

I.

Tujuan
Setelah menyelesaikan praktikum ini, diharapkan dapat memahami:
1. Mengakses Timer dengan mode normal dan CTC serta Timer sebagai counter
2. Memprogram timer dengan ketiga mode tersebut
3. Mengaplikasi fungsi timer pada mikrokontroler AVRTeori Dasar

II.

Dasar Teori
Jenis timer yang diberikan oleh AVR ada dua yaitu timer dengan resolusi 8-bit dan
16-bit. Sedangkan fitur timer dari masing-masing resolusi tersebut adalah sebagai
berikut :
1. TIMER 0 dan 2 (resolusi 8-bit)
Features:
a. Single Compare Unit Counter
b. Clear Timer on Compare Match (Auto Reload)
c. Glitch-free, Phase Correct Pulse Width Modulator (PWM)
d. Frequency Generator
e. External Event Counter
f. 10-bit Clock Prescaler (1, 8, 64, 256, 1024)
g. Overflow and Compare Match Interrupt Sources (TOV0 and OCF0)

2. TIMER 1 (resolusi 16-bit)


Features:
a. True 16-bit Design (i.e., Allows 16-bit PWM)
b. Two Independent Output Compare Units
c. Double Buffered Output Compare Registers
d. One Input Capture Unit
e. Input Capture Noise Canceler
f. Clear Timer on Compare Match (Auto Reload)
g. Glitch-free, Phase Correct Pulse Width Modulator (PWM)
h. Variable PWM Period
i. Frequency Generator
j. External Event Counter
k. Four Independent Interrupt Sources (TOV1, OCF1A, OCF1B, and ICF1)

Secara umum mode pada Timer/Counter 0, 1 dan 2, diantaranya :


a. Normal
Mode yang paling sederhana dalam penggunaan timer adalah mode Normal
(WGM01:00=0). Didalam mode normal ini arah hitungan timer bersifat hitung naik
(incrementing). Pola kerja dari timer mode normal ini menghitung hingga
TOP=0xff dan kembali restart ke 0x00 (untuk timer resolusi 8-bit). Dan nilai
hitungan timer dapat diisi setiap saat pada register TCNTx
b. CTC (Clear Timer on Compare Match)
Didalam mode CTC menggunakan register OCRx untuk memanipulasi nilai
hitungan timer (WGM01:00=2). Mode CTC ini mulai menghitung naik
(incrementing) dan otomatis kembali Nol ketika nilai register TCNTx sama dengan
nilai register OCRx. Fenomena ini dikatakan mekanisme autoreload, dimana
internal AVR secara otomatis memberikan isi register TCNT bernilai 0 kembali dan
berjalan hitung naik kembali dan seterusnya. Sehingga timer dengan mode CTC ini
lebih presisi dibandingkan mode normal.

Dari mode CTC ini, terdapat istilah pembagi clock (prescaller = N) yang harus
diketahui dalam menghitung waktu atau frekuensi yang akan ditentukan nantinya,
rumusan tersebut yaitu :

Atau:

Rumusan waktu maksimum dari suatu timer adalah sebagai berikut:

Dimana : Fclk = nilai frekuensi kristal yang digunakan.


= nilai bit timer yang digunakan, bisa 8-bit atau 16-bit.

jika 8-bit maka = 255


jika 16-bit maka = 65535

N = Prescaller, faktor pembagi mulai 8, 64, 256 1024.


Contoh :
Diketahui Fclk = 11.059200 Mhz dan menggunakan TIMER 0/2, maka = 255
Hitung waktu maksimum timer tersebut dengan prescaller 1.
Jawab :

Sehingga jika ingin didapatkan waktu maksimum dari timer 1 yang memiliki
resolusi 16 bit dengan
prescaller =1 didapatkan

Dimana :

Interval Timer = Waktu yang diinginkan


Clock Value= Frekuensi kristal per prescaler:

Timer Value = besaran waktu yang akan ditanamkan pada mikrokontroler


= nilai bit timer yang digunakan, bisa 8-bit atau 16-bit.
jika 8-bit maka = 255
jika 16-bit maka = 65535

Salah satu fitur AVR ATMega16 yaitu fitur Timer tersebut difungsikan sebagai counter
yang bisa menerima masukan dari luar. Masukan sinyal fitur timer tersebut terbagi dua
yang dikendalikan oleh multiplekser clock select, yaitu :
1. via prescaler
merupakan konstanta yang digunakan sebagai faktor pembagi terhadap kristal yang
digunakan untuk menjadi denyut mikrokontroler, konstanta tersebut bernilai 1, 8, 64,
256
dan 1024 untuk diturunkan sebagai sumber clock - clkTn.
2. via sinyal eksternal
merupakan pengaktifasian timer sebagai counter, tiap fitur Timer di AVR
ATMega16 memiliki beda pin masukan yaitu T0-Timer0, T1-Timer1 dan/atau TOSC1Timer2. Kemudian sinyal eksternal tersebut masuk ke blok edge detector untuk
mendeteksi sinyal apakah sebagai rising edge atau falling edge.

Timer sebagai counter ini berjalan secara increment, dimana nilai akan MAX dan
nilai counter akan kembali ke 0 kembali. Selain itu nilai counter bisa ditentukan pada
register TCNTx untuk menentukan hitungan yang diinginkan untuk menjalankan
interrupt. Mekanisme ini ditentukan oleh register TCCRx dengan menentukan sumber
clock yaitu pada bit-bit CS[02:00]=110 atau 111. Selain itu pula pastikan mode timer
harus menggunakan mode normal yaitu bit-bit WGM[01:00]=00. Berikut ini ilustrasi
pada Timer0 untuk pengaturan register agar timer bisa menjadi counter.

Selain itu juga ada fitur mikrokontroler AVR ATMega16 yang juga mampu menerima
sinyal luar yang secara khusus dan spesifik terhadap masukan yang diterimanya. Dari
fitur tersebut bisa dijelaskan sebagai berikut :
1. Fitur Timer sebagai Counter
Pada fitur ini difungksikan sebuah timer yang ada di AVR ATMega16 dimana ada
dua timer yang bisa menerima sinyal data dari luar yaitu :
a. Timer0 pada pin T0
Berikut ini merupakan blok dari unit counter dimana sebuah input Tn atau T0
difungsikan sebagai sinyal eksternal yang masuk ke sistem counter dari Timer0.
Sinyal keluaran clkTn ditentukan oleh multiplekser untuk pembeda sinyal masuk
dari prescaler atau T0.

Timer1 pada pin T1


Berikut ini merupakan blok dari unit counter dimana sebuah input Tn atau T1
difungsikan sebagai sinyal eksternal yang masuk ke sistem counter dari Timer1.
Dikarenakan Data Counter adalah 16-bit, register TCNT1 dipecah menjadi 8-bit taitu

TCNT1H dan TCNT1L. register TEMP diisi dari TCNT1H ketika TCNT1L dibaca.
Dan TCNT1H diisi oleh register TEMP ketika register TCNT1L ditulis

III.

IV.

Alat dan Bahan


1. Komputer
2. Trainer board Mikrokontroller AVR
3. Kabel USB

1 Unit
1 Unit
1 Buah

Prosedur Percobaan
Prosedur Umum
1.

Secara keseluruhan beberapa percobaan dibawah ini menggunakan wizard sehingga


kode digenerate secara otomatis.

2.

Atur semua kode program yang ada kemudian diletakkan sesuai pada bagian-bagian
kode hasil generate wizard.

3.

Pastikan hasil compile tidak menghasilkan error dengan menekan F9.

4.

Selanjutnya download program tersebut ke MS-16 via USB dengan menekan ShiftF9 dan tekan tombol Program the chip.

5.

Amati dan analisa hasilnya kemudian catat hasil tersebut sebagai laporan
sementara.

Prosedur Khusus
Percobaan ke :
1. Generate delay 1 detik TIMER1 menggunakan mode normal

Selanjutnya ketikan program berikut:


/****************************************************
This program was produced by the
CodeWizardAVR V2.03.4 Standard
Automatic Program Generator
Copyright 1998-2008 Pavel Haiduc, HP InfoTech s.r.l.
http://www.hpinfotech.com
Project : Flip-flop using TIMER1 mode Normal
Version : 1.0
Date : 2013-03-11
Author : Taufiqurrahman
Company : D206 - EEPIS
Comments: Timer 1 overflow interrupt service routine
Chip type : ATmega16
Program type : Application
Clock frequency : 11.059200 MHz
Memory model : Small
External RAM size : 0
Data Stack size : 256
*****************************************************/
#include <mega16.h>
#define BarLED PORTD
int kondisi=0;
// Timer 1 overflow interrupt service routine
interrupt [TIM1_OVF] void timer1_ovf_isr(void)
{
// Reinitialize Timer 1 value
TCNT1H=0xD5;
TCNT1L=0xD0;
// Place your code here
if(kondisi){
BarLED=0xff;
kondisi=0;
}else{
BarLED=0x00;
kondisi=1;
}
}
// Declare your global variables here
void main(void)
{
// Declare your local variables here
// Input/Output Ports initialization

// Port A initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTA=0x00;
DDRA=0x00;
// Port B initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTB=0x00;
DDRB=0x00;
// Port C initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTC=0x00;
DDRC=0x00;
// Port D initialization
// Func7=Out Func6=Out Func5=Out Func4=Out Func3=Out Func2=Out Func1=Out
Func0=Out
// State7=0 State6=0 State5=0 State4=0 State3=0 State2=0 State1=0 State0=0
PORTD=0x00;
DDRD=0xFF;
// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: Timer 0 Stopped
// Mode: Normal top=FFh
// OC0 output: Disconnected
TCCR0=0x00;
TCNT0=0x00;
OCR0=0x00;
// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: 10.800 kHz
// Mode: Normal top=FFFFh
// OC1A output: Discon.
// OC1B output: Discon.
// Noise Canceler: Off
// Input Capture on Falling Edge
// Timer 1 Overflow Interrupt: On
// Input Capture Interrupt: Off
// Compare A Match Interrupt: Off
// Compare B Match Interrupt: Off
TCCR1A=0x00;
TCCR1B=0x05;
TCNT1H=0xD5;
TCNT1L=0xD0;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;
// Timer/Counter 2 initialization
// Clock source: System Clock
// Clock value: Timer 2 Stopped
// Mode: Normal top=FFh
// OC2 output: Disconnected
ASSR=0x00;
TCCR2=0x00;
TCNT2=0x00;
OCR2=0x00;
// External Interrupt(s) initialization
// INT0: Off
// INT1: Off
MCUCR=0x00;

MCUCSR=0x00;
// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=0x04;
// Analog Comparator initialization
// Analog Comparator: Off
// Analog Comparator Input Capture by Timer/Counter 1: Off
ACSR=0x80;
SFIOR=0x00;
// Global enable interrupts
#asm("sei")
while (1)
{
// Place your code here
};
}

2. Generate delay 1 detik TIMER1 menggunakan mode CTC (Clear Timer on


Compare Match Interrupt)
Mekanisme berikut ini adalah membuat delay 1 detik pada timer 1. Agar
memperoleh waktu yang lebih presisi, didapatkan nilai Compare A = 2A2FH

/***************************************************
This program was produced by the
CodeWizardAVR V2.03.4 Standard
Automatic Program Generator
Copyright 1998-2008 Pavel Haiduc, HP InfoTech s.r.l.
http://www.hpinfotech.com
Project : Flip-flop using TIMER1 mode CTC
Version : 1.0
Date : 2013-03-11
Author : Taufiqurrahman
Company : D206 - EEPIS
Comments: Timer 1 mode CTC interrupt
Chip type : ATmega16
Program type : Application
Clock frequency : 11.059200 MHz
Memory model : Small
External RAM size : 0
Data Stack size : 256
*****************************************************/
#include <mega16.h>
#define LED_DETIK PORTD
// Timer 1 output compare A interrupt service routine
interrupt [TIM1_COMPA] void timer1_compa_isr(void)
{

// Place your code here


LED_DETIK=~LED_DETIK;
}
// Declare your global variables here
void main(void)
{
// Declare your local variables here
// Input/Output Ports initialization
// Port A initialization
// Func7=In Func6=In Func5=In Func4
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTA=0x00;
DDRA=0x00;
// Port B initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTB=0x00;
DDRB=0x00;
// Port C initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTC=0x00;
DDRC=0x00;
// Port D initialization
// Func7=Out Func6=Out Func5=Out Func4=Out Func3=Out Func2=Out Func1=Out
Func0=Out
// State7=0 State6
DDRD=0xFF;
// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: Timer 0 Stopped
// Mode: Normal top=FFh
// OC0 output: Disconnected
TCCR0=0x00;
TCNT0=0x00;
OCR0=0x00;
// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: 10.800 kHz
// Mode: CTC top=OCR1A
// OC1A output: Discon.
// OC1B output: Discon.
// Noise Canceler: Off
// Input Capture on Falling Edge
// Timer 1 Overflow Interrupt: Off
// Input Capture Interrupt: Off
// Compare A Match Interrupt: On
// Compare B Match Interrupt: Off
TCCR1A=0x00;
TCCR1B=0x0D;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x2A;
OCR1AL=0x2F;
OCR1BH=0x00;
OCR1BL=0x00;
// Timer/Counter 2 initialization
// Clock source: System Clock
// Clock value: Timer 2 Stopped
// Mode: Normal top=FFh
// OC2 output: Disconnected
ASSR=0x00;

TCCR2=0x00;
TCNT2=0x00;
OCR2=0x00;
// External Interrupt
// INT0: Off
// INT1: Off
// INT2: Off
MCUCR=0x00;
MCUCSR=0x00;
// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=0x10;
// Analog Comparator initialization
// Analog Comparator: Off
// Analog Comparator Input Capture by Timer/Counter 1: Off
ACSR=0x80;
SFIOR=0x00;
// Global enable interrupts
#asm("sei")
While(1)
{
// Place your code here
};
}

3. Mengakses Timer0 sebagai Counter, penerima External Signal


Mengaktifkan fungsi T0 pada timer untuk menerima signal eksternal disimulasikan
menggunakan Push-Button yang terhubung dengan T0. Serta diimplementasikan pada
masukan sensor optocoupler yang sama sama terhubung pada T0.

Tambahkan program dalam fungsi void main di bagian while


Tetapi untuk mengakses optocoupler dengan LCD tidak bisa diakses bersamaan haru
memilih jumper 3 sesuai ilustrasi berikut ini.

4. Mengakses Timer0 sebagai counter dengan interrupt


Untuk membuat interrupt ketika timer0 difungsikan sebagai counter, dimana
ketika hitungan tercapai maka flag interrupt aktif. Berikut ini dibuat hitungan ke-6

maka BarLED menjalankan running led dan hitungan ke-3 running led tersebut
akan padam hingga proses tersebut berjalan seterusnya.

/*****************************************************
This program was produced by the
CodeWizardAVR V2.03.4 Standard
Automatic Program Generator
Copyright 1998-2008 Pavel Haiduc, HP InfoTech s.r.l.
http://www.hpinfotech.com
Project : Running LED using TIMER0 as Counter
Version : 1.0
Date : 2013-03-11
Author : Taufiqurrahman
Company : D206 - EEPIS
Comments: Timer 0 as counter
Chip type : ATmega16
Program type : Application
Clock frequency : 11.059200 MHz
Memory model : Small
External RAM size : 0
Data Stack size : 256
*****************************************************/
#include <mega16.h>
#include <delay.h>
#define BarLED PORTD
unsigned char a, b, kondisi=1, LED[8] = {0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
// Timer 0 overflow interrupt service routine
interrupt [TIM0_OVF] void timer0_ovf_isr(void)
{
if (kondisi==1){
// Reinitialize first condition Timer 0 value
TCNT0=0xFD;
// Place your code here
kondisi=2;
for(b=1;b<=3;b++){
for(a=0;a<=7;a++)
{
BarLED = ~LED[a];delay_ms(100);
}
}
}
else if(kondisi==2) {
// Reinitialize second condition Timer 0 value
TCNT0=0xFE;
// Place your code here
kondisi=3;
for(a=1;a<=10;a++){
BarLED = 0x55;delay_ms(100);BarLED = 0xAA;delay_ms(100);

}
}
else if(kondisi==3) {
// Reinitialize third condition Timer 0 value
TCNT0=0xFA;
// Place your code here
kondisi=1;
for(a=1;a<=10;a++){
BarLED = 0x00;delay_ms(100);BarLED = 0xFF;delay_ms(100);
}
}
}
// Declare your global variables here
void main(void)
{
// Declare your local variables here
// Input/Output Ports initialization
// Port A initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTA=0x00;
DDRA=0x00;
// Port B initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTB=0x00;
DDRB=0x00;
// Port C initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTC=0x00;
DDRC=0x00;
// Port D initialization
// Func7=Out Func6=Out Func5=Out Func4=Out Func3=Out Func2=Out Func1=Out
Func0=Out
// State7=0 State6=0 State5=0 State4=0 State3=0 State2=0 State1=0 State0=0
PORTD=0x00;
DDRD=0xFF;
// Timer/Counter 0 initialization
// Clock source: T0 pin Rising Edge
// Mode: Normal top=FFh
// OC0 output: Disconnected
TCCR0=0x07;
TCNT0=0xFA;
OCR0=0x00;
// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: Timer 1 Stopped
// Mode: Normal top=FFFFh
// OC1A output: Discon.
// OC1B output: Discon.
// Noise Canceler: Off
// Input Capture on Falling Edge
// Timer 1 Overflow Interrupt: Off
// Input Capture Interrupt: Off
// Compare A Match Interrupt: Off
// Compare B Match Interrupt: Off
TCCR1A=0x00;
TCCR1B=0x00;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;

OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;
// Timer/Counter 2 initialization
// Clock source: System Clock
// Clock value: Timer 2 Stopped
// Mode: Normal top=FFh
// OC2 output: Disconnected
ASSR=0x00;
TCCR2=0x00;
TCNT2=0x00;
OCR2=0x00;
// External Interrupt(s) initialization
// INT0: Off
// INT1: Off
// INT2: Off
MCUCR=0x00;
MCUCSR=0x00;
// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=0x01;
// Analog Comparator initialization
// Analog Comparator: Off
// Analog Comparator Input Capture by Timer/Counter 1: Off
ACSR=0x80;
SFIOR=0x00;
// Global enable interrupts
#asm("sei")
while (1)
{
// Place your code here
};
}

V.

Data Percobaan
pada percobaan 1 menmbuat program dengan timer (pewaktuan) dengan mode
Normal dengan mengisi register TCNT

TCNT=(1+FFFFh)-(

T timer x Fclk
N

TCNT=(1+FFFFh)-(

1 x 11059200
1024

)
)

TCNT=65526-10800 desimal
TCNT=10000h-2A30h
TCNT=D5D0
Sehingga nilai register yang diisi pada codewizard timer 1 pada mode normal adalah
D5D0h.
Berikut adalah gambar hasil percobaaan yang dilakukan:

Pada
Pada saat
saat PORTD
PORTD
dalam
dalam kondisi
kondisi
LOW
HIGH

pada percobaan 2 membuat program dengan timer (pewaktuan) dengan mode


CTC dengan mengisi register OCR sebagai pembanding dengan nilai register
TCNT. Jika nilai register TCNT sama dengan nilai OCR maka akan autoreload
menghitung dari nol kembali.
T timer x Fclk
N
OCR=
)-1

1 x 11059200
1024
OCR=

)-1

OCR=2A30-1
OCR=2A2F
Maka nilai register OCR diisi dengan nilai 2A2Fh.
Berikut adalah gambar hasil percobaan pada percobaan timer dengan mode
CTC

Pada saat PORTD dalam


kondisi LOW

Pada saat PORTD


dalam kondisi
HIGH

VI.

Tugas
1. Jelaskan edge detector serta jelaskan jenisnya?
Pada AVR at-mega16 yang dimaksud Edge Detector ialah PIN external dimana

pin tersebut yaitu T0-Timer0, T1-Timer1 dan/atau TOSC1-Timer2, dimana pin


tersebut untuk mendeteksi sinyal apakah sinyal tersebut sebagaian rising edge
atau falling edge. Dimana:

transisi naik (rising edge) adalah kondisi dimana program akan


menjalankan sub rutin interupsi ketika pada pin INT X terjadi
perubahan tegangan dari tegangan rendah ke tegangan tinggi.

transisi turun (falling edge) merupakan kebalikan dari rising edge


yaitu interupsi yang aktif ketika terjadi perubahan dari tegangan tinggi
ke tegangan rendah.

2. Apa perbedaan dan persamaan dari Digital Input, Eksternal Interrupt dan Timer
sebagai Counter?
Perbedaan dari Digital Input, Eksternal Interrupt dan Timer sebagai
Counter adalah pada digital input hanya berfungsi sebagai masukan atau
keluaran data secara digital saja (high atau low), sedangkan pada
External interupt merupakan inputan data yang dapat menginterupsi
suatu program dan timer sebagai counter sebagai counter yang
berjalan(bereksekusi ) berdasarkan waktu yang ditentukan dengan
mengisi nilai register TCNT ataupun Register OCR.
Persamaan dari Digital Input, Eksternal Interrupt dan Timer sebagai
Counter adalah pada Digital input, Ekternal Interupt dan Timer sebagai
Counter sama-sama merupakan mendapatkan inputan data dari luar dan
memberikan data keluar.
3. Jelaskan fungsi dari Prescaller pada timer AVR
Prescaller merupakan konstanta yang digunakan sebagai faktor pembagi terhadap
kristal yang digunakan untuk menjadi denyut mikrokontroler, konstanta tersebut
bernilai 1, 8, 64, 256 dan 1024 untuk diturunkan sebagai sumber clock - clkTn.

4. Apa yang dimaksud dengan autoreload Timer, ilustrasikan!


Autoreload dimana sebuah counter(perhitungan pada timer) yang menghitung
naik (incrementing) dan otomatis kembali ke Nol ketika register TCNTx sama
dengan nilai register OCRx. Mode ini biasanya mode CTC dimana menggunkan
register OCRx untuk memanipulasi nilai hitungan timer (WGM01:00=2).

Dari diagram diatas diambil dari datasheet AVR Atmega16 mengambarkan


mode CTC dimana akan autoreload saat niai register TCNTx sama dengan nilai
register OCRx. Ini yang dinamakan fenomena auto reload, mode ini sangat
presisi digunakan untuk membuat pewaktuan yang presisi seperti waktu jam.

5. Melibatkan ISR apa untuk interrupt pada timer sebagai counter, ilustrasikan
pada penggunaan vector interrupt berdasarkan dari percobaan anda diatas!
Pada percobaan diatas menggunakan ISR interupt timer0/counter overflow yang
dinyatakan seperti penggalan program berikut:
interrupt [TIM0_OVF] void timer0_ovf_isr(void)
Program diatas menyatakan ISR dalam mode interupt timer0/counter overflow
diamana vector interupt tersebut pada urutan ke-10 seperti yang dinayatakan
tabel dari datasheet Atmega 16 pada gambar dibawah:

VII.

Kesimpulan
Pada parktikum yang dilakukan dapat disimpulkan bahwa:
1. Timer /Counter adalah suatu peripheral yang tertanam didalam microcontroller
yang berfungsi pewaktu. Dengan peripheral ini pengguna microcontroller dapat
dengan mudah menentukan kapan suatu perintah dijalankan (delay), tentu saja
fungsi timer tidak hanya untuk penundaan perintah saja, timer juga dapat berfungsi
sebagai oscilator, PWM, ADC, dan lain-lain.
2. Pada mikrokontroler ATMEGA 16 memiliki 3 buah timer yaitu timer 0 (8bit),
timer1 (16bit), dan timer 2 (8bit). Untuk mengenai register lengkapnya bisa dibaca
pada datasheet. Namun yang akan dibahas pada tulisan kali ini hanya timer 0(8bit)
dan timer1 (16 bit) saja.
3. Register-register yang digunakan pada Timer & Counter

TCNT0 = Register Timer 1


TCNT 1 = Register Timer 0
Ttimer0 = Periode Timer 0
Ttimer 1 =Periode Timer 1
Tosc = Periode Clock
Fosc = Frekuensi Crystall Clock
N = Prescaler (1, 8, 64, 256, 1024)
4. Prescaller merupakan konstanta yang digunakan sebagai faktor pembagi terhadap
kristal yang digunakan untuk menjadi denyut mikrokontroler, konstanta tersebut
bernilai 1, 8, 64, 256 dan 1024 untuk diturunkan sebagai sumber clock - clkTn.
5. Mode CTC adalah mode yang paling akurat digunakan dalam sistem pewaktuan
dimana didalam mode CTC menggunakan register OCRx untuk memanipulasi nilai
hitungan timer (WGM01:00=2). Mode CTC ini mulai menghitung naik
(incrementing) dan otomatis kembali Nol ketika nilai register TCNTx sama dengan
nilai register OCRx. Fenomena ini dikatakan mekanisme autoreload, dimana
internal AVR secara otomatis memberikan isi register TCNT bernilai 0 kembali dan
berjalan hitung naik kembali dan seterusnya. Sehingga timer dengan mode CTC ini
lebih presisi dibandingkan mode normal.

Anda mungkin juga menyukai