MODUL 2 Timer, Counter, Interupt Samuel Andrian (13213100) Asisten: Aditya Rachman (13212143) Tanggal Percobaan: 30/03/2015 EL3214-Praktikum Sistem Mikroprosesor
Laboratorium Dasar Teknik Elektro - Sekolah Teknik Elektro dan Informatika ITB Abstrak Empat buah tugas sederhana akan dilakukan pada percobaan ini. Tugas pertama bagaimana Mengimplementasikan delay dengan timer/counter. Tuga kedua yaitu membuat external clock sebagai counter. Tugas ketiga yaitu membuat membuat aplikasi interupt dengan timer/counter. Tugas terakhir yaitu tugas ke empat mengimplementasikan eksternal interupt . Bagaimanakah melakukan keempat tugas ini dan bagaimanakah keempat tugas ini di implementasikan, semua aka di bahas pada laporan praktikum kali ini.
Kata kunci: Timer, counter, interrupt. 1.
Pendahuluan
Gambar dan table berikut ini dikutipkan dari datasheet ATMega 8535.
Deskripsi register Timer/Counter (Timer/Counter 0) (Hal. 83)
Pengaturan perilaku pin OCO (untuk mode non PWM) (hal 84)
dalam modul praktikum ini adalah sebagai berikut: Praktikan dapat memahami datasheet ATMega8535.
Praktikan mampu membuat aplikasi Timer/Counter dan Interrupt pada AVR dengan menggunakan Bahasa pemogramanan C pada Win AVR.
Praktikan mampu membuat aplikasi External Interrupt pada AVR dengan menggunakan bahasa pemograman C pada WinAVR.
2. Studi Pustaka 2.1Konfigurasi timer/counter dan interrupt
bit
Konfigurasi Mode operasi (hal 83)
Adapun beberapa tujuan yang hendak dicapai
8
Pengaturan sumber clock (hal 85)
Register-register penting (hal 85)
Aplikasi WINAVR
Board Modul praktikum
Kabel downloader
Kabel port to port
Catu daya teregulasi (2 buah) 3.2Langkah kerja
3.2.1 Tugas 2A1 2.2
Konfigurasi External Input
Register-register untuk keperluan external interrupt diuraikan pada hal. 68-70 di datasheet ATMega8535. Di sini diberikan kutipan-kutipannya.
1. Buat program untuk tugas 1A1 2. Download ke ATMega 8535 3. Lihat keluaran 3.2.2 Tugas 2A2 1. Modiikasi program pada tugas 1A1 2. Download ke ATMega 3. Lihat keluarannya 3.2.3 Tugas 2B1 1
Buat program untuk tugas 2B1
2
Download ke ATMega 8535
3
Lihat keluaran
3.2.4 Tugas 2B2 1. Modifikasi program untuk tugas 2B2 2. Download ke ATMega 8535 3. Lihat keluaran Bit 7 – INT1: External Interrupt Request 1 Enable Bit 6 – INT0: External Interrupt Request 0 Enable Bit 5 – INT2: External Interrupt Request 2 Enable
3.2.5 Tugas 2C1 1
Buat program untuk tugas 2C1
2
Download ke ATMega 8535
3
Lihat keluaran
3.2.6 Tugas 2C2 Bit 7 – INTF1: External Interrupt Flag 1
1. Modifikasi program 2C1 untuk tugas 2C2
Bit 6 – INTF0: External Interrupt Flag 0
2. Download ke ATMega 8535
Bit 5 – INTF2: External Interrupt Flag 2
3. Lihat keluaran
3.
Metodologi 3.1Alat dan komponen
3.2.7 Tugas 2D1 1
Buat program untuk tugas 2D1
2
Download ke ATMega 8535
3
Lihat keluaran
sehingga OCR didapat sebesar 28800 dalam hexadecimal 0x7080. 4.2
3.2.4 Tugas 2D2 1. Modifikasi program 2D1 untuk tugas 2D2 2. Download ke ATMega 8535 3. Lihat keluaran
Tugas 2A1
7
6
5
4
3
2
1
0
7
6
5
4
3
2
1
0
Gambar 4-2a : hasil untuk tugas 2A2
start 4
Hasil dan analisis
Berikut adalah data dari setiap percobaan dan analisisnya.
TCR 1A =0 TCR1B = 0b00001100
4.1Tugas 1A
7
6
5
4
3
2
1
0
7
6
5
4
3
2
1
0
TIMSK = (0<
End
Gambar 4-1a : Hasil untuk tugas 1A1
start Gambar 4-2b : flow-chart program utama dan penggalan program tugas 2A1
TCR 1A =0 TCR1B = 0b00001100 TIMSK = (0<
Analisis : Hasil yang didapat hampir sama dengan percobaan 1A1 hanya delaynya yang dirubah menjadi dua detik. Untuk membuat delay sebesar 2 detik maka nilai OCR diubah dengan menggunakan rumus
End
OCR=Tyan
Gambar 4-1b : flow-chart dan penggalan program tugas 2A1 Analisis : Delay yang didapat sebesar 1 detik karena sesuai rumus
OCR=Tyan
g diinginkan∗FCPU prescaler
Dengan T yang di inginkan = 1 detik dan FCPU sebesar 7372800 dan prescaler 256
g diinginkan∗FCPU prescaler
Dengan T yang di inginkan = 2 detik dan FCPU sebesar 7372800 dan prescaler 256 sehingga OCR didapat sebesar 57600 dalam hexadecimal 0xE100. 4.3Tugas 2B1
7
6
5
4
3
2
1
0
7
6
5
4
Gambar 4-3a : 1B1
3
2
1
Interrupt
0
hasil untuk percobaan
Program utama
start End
Program utama
Interrupt
Program utama
End
flow-chart dan penggalan program tugas 2b1 Gambar 4-3b : Analisis :
Gambar 4-4b : flow-chart dan penggalan program tugas 2b2 Analisis :
Hasilnya LED akan flip-flop seperti pada gambar 4-3a dengan delay 0.5 detik. Delay menggunakan delay eksternal sebesar 500ms seperti gambar 4-3b.
Hasil dapat dilihat pada gambar 4.4 dengan delay yang diinginkan sebesar 3 detik maka untuk membuat delay sebesar 3 detik untuk TCNT = 123 maka OCR0 = 125.
4.4
4.5
Tugas 2B2
Tugas 2C1
7
6
5
4
3
2
1
0
7
6
5
4
3
2
1
0
7
6
5
4
3
2
1
0
7
6
5
4
3
2
1
0
Gambar 4-4a : 2B2
hasil untuk percobaan
start Program utama
Gambar 4-5a : untuk setiap 0.1 detik maka LED akan flipflop seperti ini
7
6
5
4
3
2
1
0
Gambar 4-5b : untuk setiap 1 detik maka lampu akan menyala semua seperti gambar ini
Sehingga TCNT yang didapatkan0xE3DF.
start
4.6
Tugas 2C2
7
6
5
4
3
2
1
0
7
6
5
4
3
2
1
0
Program utama
Interrupt
Program utama
Gambar 4-6a : untuk setiap 0.1 detik maka LED akan flipflop seperti ini
7
6
5
4
3
2
1
0
Gambar 4-6b : untuk setiap 2 detik maka lampu akan menyala semua seperti gambar ini
End
Gambar 4-5c : flow-chart dan penggalan program tugas 2C1
start
Analisis : Untuk delay sebesar 0.1 detik digunakan delay eksternal sebesar 100 ms. Sedangkan untuk delay interrupt sebesar 1 detik didapatkan dengan menggunakan rumus
Program utama
Interrupt
g ∗FCPU OCR=Tyan diinginkan prescaler
Program utama dengan T yang diingingkan sebesar 1 detik dan prescaler 1024 dan FCPU sebesar 727280 maka didapatkan OCR dalam heksadesimal 0x1C20 dan TCNT didapat didapatkan dengan rumus
TCNT =1+ FFFF – OCR
End Gambar 4-6c : flow-chart dan penggalan program tugas 2C2
Untuk delay sebesar 0.1 detik digunakan delay eksternal sebesar 100 ms. Sedangkan untuk delay interrupt sebesar 1 detik didapatkan dengan menggunakan rumus
Gambar 4-7b : jika IS1 ditekan LED akan running lalu kembali lagi ke keadaan awal
start
g ∗FCPU OCR=Tyan diinginkan prescaler
Program utama
dengan T yang diingingkan sebesar 1 detik dan prescaler 1024 dan FCPU sebesar 727280 maka didapatkan OCR dalam heksadesimal 0x3840
Interrupt
dan TCNT didapat didapatkan dengan rumus
Program utama
TCNT =1+ FFFF – OCR Sehingga TCNT yang didapatkan0xC7C0. 4.7
Tugas 2D1
End
7
6
5
4
3
2
1
0
7
6
5
4
3
2
1
0
Gambar 4-7a : untuk setiap 0.5 detik maka LED akan flipflop seperti ini
Gambar 4-7c : flow-chart dan penggalan program tugas 2D2 Analisis : 7
6
5
4
3
2
1
0
7
6
5
4
3
2
1
0
Delay LED sebelum ada interrupt adalah 500 ms. Interupt terjadi saat IS1 ditekan dan delanya 250 ms dapt dilihat codenya pada gambar 4-7c.
7
6
5
4
3
2
1
0
4.8
7
6
5
4
3
2
1
0
7
6
5
4
3
2
1
0
7
6
5
4
3
2
1
0
7
6
5
4
3
2
1
0
7
6
5
4
3
2
1
0
Tugas 2D2
7
6
5
4
3
2
1
0
7
6
5
4
3
2
1
0
Gambar 4-8a : untuk setiap 0.5 detik maka LED akan flipflop seperti ini
7
6
5
4
3
2
1
0
7
6
5
4
3
2
1
0
Gambar 4-8b : saat ada interrupt oleh IS1 dengan delay flipflop 0.5 detik 7
6
5
4
3
2
1
0
Gambar 4-8c : saat ada interrupt oleh IS2 selama 1 detik
start Gambar 4-8d : flow-chart dan penggalan program tugas 2D2
Program utama
Pada percobaan ini jika tidak ada interrupt maka LED akan flip-flop seperti gambar 48a, jika ada interrupt dari IS1maka LED akan seperti gambar 4-8b, jika interrupt dari IS2 maka LED akan seperti gambar 48c.
Interrupt 1/ interrupt 2
Program utama 5
End
Kesimpulan Dari praktikum bahwa:
ini
dapat
disimpulkan
Penjelasan deskripsi register Timer/Counter 8 bit, konfigurasi mode operasi, pengaturan perilaku pin OCO, pengaturan sumber clock, dan registerregister untuk keperluan external interrupt, yang dipakai dalam percobaan ini, terdapat dalam datasheet ATMega 8535.
Aplikasi timer/counter dan interrupt dapat dilakukan pada AVR ATMega 8535 dengan mengatur nilai register TCNT dan OCR,.
Aplikasi external interrupt dapat dilakukan pada AVR Atmega 8535
dengan mengatur nilai MCUCR, GICR, dan GIFR.
register
DAFTAR PUSTAKA [1] Mervin T. Hutabarat, Praktikum system mikroprosesor, Laboratorium Dasar Teknik Elektro, ITB, 2015.
Source code ------------------------2A1--------------------#include
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<
//overflow interrupt disable TIMSK|=_BV(TOIE1); } --------------------------2A2-------------------------------#include 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<
TIFR|=_BV(OCF1A); //overflow interrupt disable TIMSK|=_BV(TOIE1); } -----------------------2B1---------------------------#include #include #define F_CPU 7372800UL // 8MHz #include void init_tim(void); int main(void) { init_tim(); DDRA=0xFF; while (1) { //penentuan nilai awal timer TCNT0 = 123; //penentuan nilai compare OCR0 = 124; //menanti compare match while(bit_is_clear(TIFR,OCF0)) { PORTA = 0b10101010; } //meng-nol-kan flag TIFR|=_BV(OCF0); PORTA = 0b01010101; _delay_ms(500); } return 0; } void init_tim(void) { //mode operasi dan sumber clock TCCR0=0b00000110; //overflow interrupt disable TIMSK=(0< #include #define F_CPU 7372800UL // 8MHz #include void init_tim(void);
int main(void) { init_tim(); DDRA=0xFF; while (1) { //penentuan nilai awal timer TCNT0 = 123; //penentuan nilai compare OCR0 = 125; //menanti compare match while(bit_is_clear(TIFR,OCF0)) { PORTA = 0b10101010; } //meng-nol-kan flag TIFR|=_BV(OCF0); PORTA = 0b11111111; Delay(); } return 0; } void init_tim(void) { //mode operasi dan sumber clock TCCR0=0b00000110; //overflow interrupt disable TIMSK=(0<
----------------------------2C1-------------------------------#include #define F_CPU 7372800UL #include #include void init_int(void); ISR(TIMER0_OVF_vect) { unsigned char i; PORTA=0xFF; _delay_ms(200); TIFR=(1< #define F_CPU 7372800UL #include #include void init_int(void); ISR(TIMER0_OVF_vect) { unsigned char i; PORTA=0xFF; _delay_ms(200);
TIFR=(1< #define F_CPU 7372800UL #include #include void Init_Ext_Int(void); ISR(INT0_vect) { unsigned char i=0x01,n; for(n=0;n<8;++n) { PORTA = i; _delay_ms(250); i=(i<<1)|(i>>7); } } int main(void) { Init_Ext_Int(); sei(); 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; } -------------------------2D2------------------------------#include #define F_CPU 7372800UL #include #include void Init_Ext_Int(void); ISR(INT0_vect) { unsigned char i=0x01,n; for(n=0;n<8;++n) { PORTA = i; _delay_ms(250); i=(i<<1)|(i>>7); } } int main(void) { Init_Ext_Int(); sei(); DDRA=0xFF; while (1) { PORTA = 0b11111111; _delay_ms(500); PORTA = 0b00000000; _delay_ms(500); } return 0; } void Init_Ext_Int(void) { MCUCR=0x02; MCUCSR=0x00; GICR=0x40; GIFR=0x40; }