Laboratorium Dasar Teknik Elektro - Sekolah Teknik Elektro dan Informatika ITB
Abstrak
Pada praktikum Timer, Counter, Interrupt ini dipelajari
mengenai cara kerja timer & counter pada ATMega8535
yang merupakan fungsi dasar untuk menghasilkan delay.
Dalam implementasinya dilakukan dengan cara pengujian
seperti delay dengan timer/counter, external clock sebagai
counter, aplikasi interrupt dengan timer/counter, dan external
interrupt.
PENDAHULUAN
b.
2.
c.
2.2.2
c.
b.
e.
f.
g.
STUDI PUSTAKA
2.1
MIKROKONTROLER ATMEGA8535
Mikrokontroler
ATMega
8535
merupakan
mikrokontroler CMOS 8 bit yang memiliki daya
rendah dan termasuk ke dalam basis arsitektur
RISC. ATMega 8535 dapat bekerja dengan
kecepatan tinggi dan mengonsumsi daya rendah
karena instruksi dijalankan pada satu siklus clock
serta ATMega8535 memiliki throughput mendekati
1 MIPS per MHz.
2.1.1
a.
KONFIGURASI PIN
MIKROKONTROLER AVR ATMEGA
8535
2.2
sebagai
input
i.
j.
REGISTER TIMER/COUNTER
3.1
3.2
2.3
3.
METODOLOGI
1 unit computer
b.
Software WinAVR
c.
d. Trainer Board
e.
Power supply
f.
Kabel/konektor
Laporan Praktikum - Laboratorium Dasar Teknik Elektro STEI ITB
3.3
TIMER/COUNTER
3.4
EXTERNAL INTERRUPT
Set alat dan komponen yang diperlukan (sesuai pada
modul). Buka software WinAVR kemudian atur sesuai
dengan ketentuan.
4.
4.1
Bit
1 7372800
1 =
=
= 28800
256
LED
Bit
6 7372800
=
= 43200
1024
4.2
A. Tugas II.B.1
Berikut ini merupakan flowchart program
dengan kode program terlampir.
State 2
LED
Bit
4.3
TIMER/COUNTER
A. Tugas II.C.1
0
Gambar 4-10 Flowchart Tugas II.C.1
State 2
LED
Bit
State 1
LED
Bit
State 2
LED
Bit
B. Tugas II.C.2
Berikut ini merupakan flowchart program
dengan kode program terlampir.
State 1
LED
Bit
State 2
LED
Bit
detik
serta
keseluruhan.
LED
menyala
secara
4.4
EXTERNAL INTERRUPT
A. Tugas II.D.1
Berikut ini merupakan flowchart program
dengan kode program terlampir.
Bit
B. Tugas II.D.2
Berikut ini merupakan flowchart program
dengan kode program terlampir.
LED
Bit
State 2
LED
Laporan Praktikum - Laboratorium Dasar Teknik Elektro STEI ITB
LED
Bit
LED
Bit
5.
LED
Bit
KESIMPULAN
1
0
DAFTAR PUSTAKA
[1]
PETUNJUK
PRAKTIKUM:
Sistem
Mikroprosesor, Laboratorium Dasar Teknik
Elektro STEI ITB, Bandung, 2016.
[2]
Datasheet ATMega8535
[3]
https://en.wikipedia.org/wiki/Prescaler,
diakses pada 30 Maret 2016 20:00
[4]
https://msdn.microsoft.com/enus/library/ms892408.aspx?f=255&MSPPErr
or=-2147217396, diakses pada 30 Maret 2016
20:27
11
LAMPIRAN
A. Kode program Tugas II.A.1
#include <avr/io.h>
void init_tim(void);
void Delay(void);
int main(void)
{
DDRA=0xFF;
PORTA = 0x00;
init_tim();
while (1)
{
PORTA = 0x0F;
Delay();
PORTA = 0xF0;
Delay();
}
return 0;
}
void init_tim(void)
{
//mode operasi CTC, sumber clock prescaller 256
TCCR1A = 0;
TCCR1B = 0b00001100;
//overflow interrupt disable
TIMSK|=(0<<TOIE1);
}
void Delay(void)
{
//overflow interrupt enable
TIMSK|=_BV(TOIE1);//(1<<TOIE1);
//penentuan nilai awal timer
TCNT1H = 0;
TCNT1L = 0;
//penentuan nilai compare untuk delay 1 detik
OCR1AH = 0x70;
OCR1AL = 0x80;
//menunggu hingga compare match, nilai TCNT1 = OCR1A)
loop_until_bit_is_set(TIFR,OCF1A);
//meng-nol-kan flag
TIFR|=_BV(OCF1A);
//overflow interrupt disable
TIMSK|=_BV(TOIE1);
}
12
Delay();
PORTA = 0xF0;
Delay();
}
return 0;
}
void init_tim(void)
{
//mode operasi CTC, sumber clock prescaller 256
TCCR1A = 0;
TCCR1B = 0b00001101;
//overflow interrupt1 disable
TIMSK|=(0<<TOIE1);
}
void Delay(void)
{
//overflow interrupt enable
TIMSK|=_BV(TOIE1);//(1<<TOIE1);
//penentuan nilai awal timer
TCNT1H = 0;
TCNT1L = 0;
//penentuan nilai compare untuk delay 1 detik
OCR1AH = 0xA8;
OCR1AL = 0xC0;
//menunggu hingga compare match, nilai TCNT1 = OCR1A)
loop_until_bit_is_set(TIFR,OCF1A);
//meng-nol-kan flag
TIFR|=_BV(OCF1A);
//overflow interrupt disable
TIMSK|=_BV(TOIE1);
}
13
}
void init_tim(void)
{
//mode operasi dan sumber clock
TCCR0=0b00000110;
//overflow interrupt disable
TIMSK=(0<<OCIE0);
}
14
15
void init_int(void);
ISR(TIMER1_OVF_vect)
{
unsigned char i;
PORTA=0xFF;
_delay_ms(200);
TIFR=(1<<TOV1);
TCNT1H=0x57; //9mod5 +2=6, dengan 8MHz didapat 48E5, dengan 7372800
didapat 5740
TCNT1L=0x40;//9mod5 +2=6, dengan 8MHz didapat 48E5, dengan 7372800
didapat 5740
}
int main(void)
{
init_int();
DDRA=0xFF;
while (1)
{
PORTA = 0b01010101;
_delay_ms(100);
PORTA = 0b10101010;
_delay_ms(100);
TIMSK=0b000100;
}
return 0;
}
void init_int(void)
{
TIMSK=0b000000;
TCCR1B=0b00000101; //prescalar 1024
TCNT1H=0x57; //9mod5 +2=6, dengan 8MHz didapat 48E5, dengan 7372800
didapat 5740
TCNT1L=0x40;//9mod5 +2=6, dengan 8MHz didapat 48E5, dengan 7372800
didapat 5740
sei();
}
16
DDRA=0xFF;
while (1)
{
PORTA = 0b10101010;
_delay_ms(500);
PORTA = 0b01010101;
_delay_ms(500);
}
return 0;
}
void Init_Ext_Int(void)
{
MCUCR=0x02;
MCUCSR=0x00;
GICR=0x40;
GIFR=0x40;
}
17