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)
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:
Sehingga jika ingin didapatkan waktu maksimum dari timer 1 yang memiliki
resolusi 16 bit dengan
prescaller =1 didapatkan
Dimana :
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.
III.
IV.
V.
1 Unit
1 Unit
1 Buah
Setting Percobaan
Prosedur Percobaan
Prosedur Umum
1.
2.
Atur semua kode program yang ada kemudian diletakkan sesuai pada bagian-bagian
kode hasil generate wizard.
3.
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
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
};
}
/***************************************************
This program was produced by the
/*****************************************************
This program was produced by the
CodeWizardAVR V2.03.4 Standard
Automatic Program Generator
char
a,
b,
kondisi=1,
{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
LED[8]
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
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
};
}
VI.
Tugas
1. Jelaskan edge detector serta jelaskan jenisnya?
2. Apa perbedaan dan persamaan dari Digital Input, Eksternal Interrupt dan Timer
sebagai Counter
3. Jelaskan fungsi dari Prescaller pada timer AVR
4. Apa yang dimaksud dengan autoreload Timer, ilustrasikan!
5. Melibatkan ISR apa untuk interrupt pada timer sebagai counter, ilustrasikan
pada penggunaan vector interrupt berdasarkan dari percobaan anda diatas
I.