Laporan Praktikum - Laboratorium Dasar Teknik Elektro – STEI ITB 1
MODUL II TIMER, COUNTER, INTERRUPT
Raden Arifudin Nur Fauzan (13213080) Asisten: Zuhditazmi (13212149)
Tanggal Percobaan: 29/03/2016 EL3214-Praktikum Sistem Mikroprosesor
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.
Kata kunci: ATMega 8535, clock, counter, delay,
interrupt, timer.
1. PENDAHULUAN
Timer/counter dapat digunakan dan diatur dengan cara mengatur timer register. Timer berfungsi sebagai pencacah untuk fungsi clock internal maupun eksternal. Mikrokontroler dapat menerima interrupt dan akan segera melakukan instruksi lain ketika sedang menjalankan suatu tugas atau instruksi utama.
Tujuan dari praktikum ini adalah:
a. memahami datasheet ATMega 8535; b. mampu membuat aplikasi Timer/Counter
dan Interrupt pada AVR dengan menggunakan bahasa pemrograman C pada WinAVR; serta
c. mampu membuat aplikasi External Interrupt pada AVR dengan menggunakan bahasa pemrograman C pada WinAVR.
2. 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
I/O ATMEGA 8535
a. Port A (PA0-PA7) merupakan pin I/O dua arah dan pin masukan ADC.
b. Port B (PB0-PB7) merupakan pin I/O dua arah dan pin fungsi khusus, yaitu timer/counter, komparator analog, dan SPI. c. Port C (PC0-PC7) merupakan pin I/O dua arah dan pin fungsi khusus, yaitu TWI, komparator analog, dan timer oscillator. d. Port D (PD0-PD7) merupakan pin I/O dua
arah dan pin fungsi khusus, yaitu komparator analog, interupsi eksternal, dan komunikasi serial.
2.2.2
KONFIGURASI PIN
M
IKROKONTROLERAVR
ATM
EGA8535
Mikrokontroler ATMega 8535 memiliki 40 pin untuk model PDIP dan 44 pin untuk model TQFP dan PLCC.
a. VCC untuk tegangan pencatu daya positif. b. GND untuk tegangan pencatu daya negatif. c. Port A (PA0-PA7) sebagai pin I/O dua arah
dan sebagai input ADC.
d. Port B (PB0-PB7) sebagai pin I/O dua arah dan pin fungsi khusus, yaitu timer/counter, komparator analog, dan SPI.
e. Port C (PC0-PC7) sebagai pin I/O dua arah dan pin fungsi khusus, yaitu TWI, komparator analog, dan timer oscillator. f. Port D (PD0-PD7) sebagai pin I/O dua arah
dan pin fungsi khusus, yaitu komparator analog, interupsi eksternal, dan komunikasi serial.
g. RESET untuk melakukan reset program dalam mikrokontroler.
h. XTAL1 dan XTAL2 sebagai input pembangkit sinyal clock.
i. AVCC sebagai pin masukan tegangan pencatu daya untuk ADC.
j. AREF untuk pin tegangan referensi ADC.
2.2
REGISTER
T
IMER/C
OUNTERDalam penggunaan timer/counter dapat dilakukan pengaturan terhadap register timer. Dalam datasheet ATMega8535 terdapat beberapa register, seperti
Laporan Praktikum - Laboratorium Dasar Teknik Elektro – STEI ITB 2 TCCR (register timer/counter 8 bit (Timer/Counter 0)),
TCNT, OCR, TIMSK, dan TIFR.
Gambar 2-1 Register TCCR, TCNT, OCR, TIMSK, dan TIFR
2.3
REGISTER
E
XTERNALI
NTERRUPT Dalam datasheet ATMega8535 tercantum pula register-register yang dapat digunakan untuk keperluan external interrupt, seperti MCUCSR, GICR, dan GIFR.Gambar 2-2 Register MCUCSR, GICR, dan GIFR
3. METODOLOGI
Peralatan yang digunakan selama praktikum: a. 1 unit computer b. Software WinAVR c. Sismin ATMega 8535 d. Trainer Board e. Power supply f. Kabel/konektor
Adapun percobaan yang dilakukan adalah sebagai berikut.
3.1
DELAY DENGAN
T
IMER/C
OUNTERGambar 3-1 Diagram percobaan 1
3.2
E
XTERNALC
LOCK SEBAGAIC
OUNTERGambar 3-2 Diagram percobaan 2
Modifikasi program yang dibuat sesuai dengan ketentuan pada Tugas II.A.2. Ulangi langkah sebelumnya. Eksekusi program yang telah dibuat (II.A.1) dengan menggunakan perintah MakeAll dan MakeProgram (pastikan kabel/konektor terhubung dengan benar).
Perhatikan dan amati nyala LED.
Set alat dan komponen yang diperlukan (sesuai pada modul). Buka software WinAVR kemudian atur sesuai
dengan ketentuan.
Modifikasi program yang dibuat sesuai dengan ketentuan pada Tugas II.B.2. Ulangi langkah sebelumnya.
Eksekusi program yang telah dibuat (II.B.1) dengan menggunakan perintah MakeAll dan MakeProgram (pastikan kabel/konektor
terhubung dengan benar). Perhatikan dan amati nyala LED. Set alat dan komponen yang diperlukan (sesuai pada modul). Buka software WinAVR kemudian atur sesuai
Laporan Praktikum - Laboratorium Dasar Teknik Elektro – STEI ITB 3
3.3
A
PLIKASII
NTERRUPT DENGANT
IMER/C
OUNTERGambar 3-3 Diagram percobaan 3
3.4
E
XTERNALI
NTERRUPTGambar 3-4 Diagram percobaan 4
4. HASIL DAN ANALISIS
Hasil dari beberapa percobaan tersebut disajikan dalam bentuk tabel/citra gambar seperti berikut.
4.1
DELAY DENGAN
T
IMER/C
OUNTERA. Tugas II.A.1
Berikut ini merupakan flowchart program dengan kode program terlampir.
Gambar 4-1 Flowchart Tugas II.A.1
Gambar 4-2 Flowchart delay
Berdasarkan realisasi program yang telah dibuat akan menghasilkan keluaran pada PORT A yang terhubung pada LED dengan konfigurasi seperti berikut.
LED
Bit 7 6 5 4 3 2 1 0
Gambar 4-3 Konfigurasi LED Tugas II.A.1 Modifikasi program yang dibuat sesuai dengan ketentuan
pada Tugas II.C.2. Ulangi langkah sebelumnya. Eksekusi program yang telah dibuat (II.C.1) dengan menggunakan perintah MakeAll dan MakeProgram (pastikan kabel/konektor terhubung dengan benar).
Perhatikan dan amati nyala LED.
Set alat dan komponen yang diperlukan (sesuai pada modul). Buka software WinAVR kemudian atur sesuai
dengan ketentuan.
Modifikasi program yang dibuat sesuai dengan ketentuan pada Tugas II.D.2. Ulangi langkah sebelumnya. Eksekusi program yang telah dibuat (II.D.1) dengan menggunakan perintah MakeAll dan MakeProgram (pastikan kabel/konektor terhubung dengan benar).
Perhatikan dan amati nyala LED.
Set alat dan komponen yang diperlukan (sesuai pada modul). Buka software WinAVR kemudian atur sesuai
Laporan Praktikum - Laboratorium Dasar Teknik Elektro – STEI ITB 4 Pada kode program tertulis DDRA =0xFF;
yang menunjukkan bahwa PORT A digunakan sebagai inisialisasi output. Berdasarkan kode program menunjukkan bahwa LED akan menyala secara bergantian antara 4 bit LSB kemudian berganti dengan 4 bit MSB dengan delay 1 detik.
Delay yang digunakan pada program ini diatur oleh fungsi void init_tim(void) dan void Delay(void).
Pada mode operasi CTC, sumber clock prescaller bernilai 256 dengan pengaturan menggunakan register TTCR TTCR1A = 0; TCCR1B = 0b00001100; dan fungsi interrupt disable TIMSK|=(0<<TOIE1);. Implementasi fungsi delay dilakukan dengan mengatur register OCR1AH dan OCR1AL menggunakan nilai yang diperoleh melalui persamaan berikut.
𝑂𝐶𝑅1𝐴 =𝑑𝑒𝑙𝑎𝑦 × 𝑓𝑐𝑙𝑜𝑐𝑘 𝑝𝑟𝑒𝑠𝑐𝑎𝑙𝑙𝑒𝑟 =
1 𝑥7372800 256 = 28800 Nilai register OCR1A adalah 28800 dalam desimal atau 7080h dalam heksadesimal yang dapat dipecah menjadi OCR1AH= 0x70 dan OCR1AL= 0x80 serta delay yang terjadi adalah 1 detik.
Program ini berada pada loop dengan durasi 1 detik setiap siklus sesuai perintah loop_until_bit_is_set(TIFR,OCF1 A); yang akan menunggu nilai TCNT1 match dengan nilai OCR1A. Setelah selesai, program akan keluar dari void Delay dan kembali pada program utama. Ketika terjadi match, flag (OCF1A) akan menjadi nol dan overflow interrupt menjadi disable untuk kembali pada program utama. B. Tugas II.A.2
Berikut ini merupakan flowchart program dengan kode program terlampir.
Gambar 4-4 Flowchart Tugas II.A.2 Berdasarkan realisasi program yang telah dibuat akan menghasilkan keluaran pada PORT A yang terhubung pada LED dengan konfigurasi seperti berikut.
LED
Bit 7 6 5 4 3 2 1 0
Gambar 4-5 Konfigurasi LED Tugas II.A.2
Pada kode program tertulis DDRA =0xFF; yang menunjukkan bahwa PORT A digunakan sebagai inisialisasi output. Berdasarkan kode program menunjukkan bahwa LED akan menyala secara bergantian antara 4 bit LSB kemudian berganti dengan 4 bit MSB dengan delay 6 detik sesuai dengan ketentuan pada modul dan kelompok praktikan adalah kelompok 9 (𝑥 = (9𝑚𝑜𝑑5) + 2).
Pada Tugas II.A.2 tetap menggunakan prinsip program yang sama dengan Tugas II.A.1 tetapi dengan menggunakan delay sebesar 6 detik sesuai dengan ketentuan perhitungan pada modul. Implementasi fungsi delay dilakukan dengan mengatur register OCR1AH dan OCR1AL menggunakan nilai yang diperoleh melalui persamaan berikut.
𝑂𝐶𝑅1𝐴 =𝑑𝑒𝑙𝑎𝑦 × 𝑓𝑐𝑙𝑜𝑐𝑘 𝑝𝑟𝑒𝑠𝑐𝑎𝑙𝑙𝑒𝑟 =
6 𝑥7372800 1024 = 43200
Laporan Praktikum - Laboratorium Dasar Teknik Elektro – STEI ITB 5 Nilai register OCR1A adalah 43200 dalam
desimal atau A8C0h dalam heksadesimal yang dapat dipecah menjadi OCR1AH= 0xA8 dan OCR1AL= 0xC0 serta delay yang terjadi adalah 6 detik. Prescaller yang digunakan adalah 1024 sehingga nilai register TCCR1B=0B00001101.
Prescaler merupakan rangkaian pencacah elektrik yang akan mereduksi frekuensi sinyal elektrik pada frekuensi tinggi manjadi frekuensi yang lebih rendah dengan pembagian menggunakan bilangan integer. Prescaler dapat membuat timer bekerja pada clock tertentu sesuai dengan keinginan pengguna.
4.2
E
XTERNALC
LOCK SEBAGAIC
OUNTERA. Tugas II.B.1
Berikut ini merupakan flowchart program dengan kode program terlampir.
Gambar 4-6 Flowchart Tugas II.B.1
Berdasarkan realisasi program yang telah dibuat akan menghasilkan keluaran pada PORT A yang terhubung pada LED dengan konfigurasi seperti berikut.
State 1 LED Bit 7 6 5 4 3 2 1 0 State 2 LED Bit 7 6 5 4 3 2 1 0
Gambar 4-7 Konfigurasi LED Tugas I.B.1
Kondisi awal LED tertampil seperti pada state 1 dan pada saat menerima 2 kali penekanan tombol (button IS3-PB0) akan berubah konfigurasi menjadi state 2 dengan delay selama 500 ms kemudian berpindah kembali pada state 1.
Perintah TCCR0=0b00000110; pada mode operasi dan sumber clock me-nunjukkan bahwa external clock source terletak pada pin T0 dan clock pada falling-edge. Kemudian dilakukan pula pengaturan overflow interrupt disable dengan perintah TIMSK=(0<<OCIE0);. Pada program utama, dilakukan perbandingan nilai TCNT0 yang sebelumnya bernilai 123 diatur menjadi nilai awal dengan OCF0. Hal ini berlangsung ketika register tersebut memiliki kesamaan nilai dan akan menunjukkan nilai 1 sehingga program tidak masuk kedalam kondisi perulangan while. Ketika TCNT0=OCR0 flag OCF0 bernilai 0 maka program masuk ke dalam kondisi perulangan while.
B. Tugas II.B.2
Berikut ini merupakan flowchart program dengan kode program terlampir.
Laporan Praktikum - Laboratorium Dasar Teknik Elektro – STEI ITB 6 Gambar 4-8 Flowchart Tugas II.B.2
Berdasarkan realisasi program yang telah dibuat akan menghasilkan keluaran pada PORT A yang terhubung pada LED dengan konfigurasi seperti berikut.
State 1 LED Bit 7 6 5 4 3 2 1 0 State 2 LED Bit 7 6 5 4 3 2 1 0
Gambar 4-9 Konfigurasi LED Tugas II.B.2 Pada tugas ini menggunakan prinsip yang mirip dengan Tugas II.B.2 dengan beberapa perubahan seperti jumlah interupsi penekanan tombol menjadi 7 kali sesuai dengan ketentuan pada modul yaitu 𝑥 = (9𝑚𝑜𝑑5) + 3. Ketika program men-capai state 2, LED akan menyala semua sesuai dengan konfigurasi PORTA=0xFF dengan lama delay 7 detik. Nilai awal timer pada program utama diatur menjadi 1 dan nilai compare diatur menjadi 7.
4.3
A
PLIKASII
NTERRUPT DENGANT
IMER/C
OUNTERA. Tugas II.C.1
Berikut ini merupakan flowchart program dengan kode program terlampir.
Gambar 4-10 Flowchart Tugas II.C.1
Berdasarkan realisasi program yang telah dibuat akan menghasilkan keluaran pada PORT A yang terhubung pada LED dengan konfigurasi seperti berikut.
State 1 LED Bit 7 6 5 4 3 2 1 0 State 2 LED Bit 7 6 5 4 3 2 1 0
Gambar 4-11 Konfigurasi LED Tugas II.C.1
Pada kondisi state 1 LED menyala bergantian dengan delay 100 ms dan akan menuju pada state 2 ketika mencapai waktu
Laporan Praktikum - Laboratorium Dasar Teknik Elektro – STEI ITB 7 200 ms terakhir dalam rentang waktu 1
detik serta LED menyala secara keseluruhan.
Pada tugas ini digunakan interrupt dengan timer/counter sehingga ketika program mencapai interrupt kemudian akan menjalankan ISR dan dilanjukan dengan program default yang sedang berjalan. Pada prosedur void init_int (void), perintah TIMSK=0b000000; akan membuat interrupt menjadi disable. Kemudian akan digunakan Timer0 yang ditunjukkan dengan pengaturan TCCR0= 0b00000101; dan menggunakan prescaller 1024. TCNT0 diset 0x00 sehingga counter diatur menjadi 0. Fungsi sei() pada prosedur void init_int (void) digunakan untuk membuat kode assembler dari fungsi menjadi satu baris saja agar tidak melakukan overwrite terhadap pemanggilan fungsi lain.
Program utama menjalankan prosedur void init_int (void) lalu melakukan assign PORTA sebagai output dengan perintah DDRA=0xFF. Kemudian program diberi delay selama 0.1 detik untuk memberikan output 0b10101010. Setelah itu, TIMSK diatur menjadi 0b000100 sehingga interrupt menjadi enable dan masuk ke dalam ISR yang kemudian akan kembali pada program utama. Interrupt terpanggil setiap 1 detik.
B. Tugas II.C.2
Berikut ini merupakan flowchart program dengan kode program terlampir.
Gambar 4-12 Flowchart Tugas II.C.2 Tugas ini merupakan gubahan dari Tugas II.C.1. Pada kode program dilakukan perubahan pada waktu terjadinya interupsi, yaitu menjadi setiap 6 detik sesuai dengan ketentuan pada modul, yaitu 𝑥 = (9𝑚𝑜𝑑5) + 2.
Berdasarkan realisasi program yang telah dibuat akan menghasilkan keluaran pada PORT A yang terhubung pada LED dengan konfigurasi seperti berikut.
State 1 LED Bit 7 6 5 4 3 2 1 0 State 2 LED Bit 7 6 5 4 3 2 1 0
Gambar 4-13 Konfigurasi LED Tugas II.C.1
Pada kondisi state 1 LED menyala bergantian dengan delay 100 ms dan akan menuju pada state 2 ketika mencapai waktu 200 ms terakhir dalam rentang waktu 6
Laporan Praktikum - Laboratorium Dasar Teknik Elektro – STEI ITB 8 detik serta LED menyala secara
keseluruhan.
Pada tugas ini digunakan interrupt dengan timer/counter sehingga ketika program mencapai interrupt kemudian akan menjalankan ISR dan dilanjukan dengan program default yang sedang berjalan. Pada prosedur void init_int (void), perintah TIMSK=0b000000; akan membuat interrupt menjadi disable. Kemudian akan digunakan Timer0 yang ditunjukkan dengan pengaturan TCCR0 0b00000101; dan menggunakan prescaller 1024. TCNT0 diset 0x00 sehingga counter diatur menjadi 0. Fungsi sei() pada prosedur void init_int (void) digunakan untuk membuat kode assembler dari fungsi menjadi satu baris saja agar tidak melakukan overwrite terhadap pemanggilan fungsi lain. Nilai TCNT berubah menjadi 0x5740 mengikuti ketentuan pada modul.
Program utama menjalankan prosedur void init_int (void) lalu meng-assign PORTA sebagai output dengan perintah DDRA=0xFF. Kemudian program diberi delay selama 0.1 detik untuk memberikan output 0b10101010. Setelah itu, TIMSK diatur menjadi 0b000100 sehingga interrupt menjadi enable dan masuk ke dalam ISR yang kemudian akan kembali pada program utama. Interrupt terpanggil setiap 6 detik.
4.4
EXTERNALI
NTERRUPT A. Tugas II.D.1Berikut ini merupakan flowchart program dengan kode program terlampir.
Gambar 4-14 Flowchart Tugas II.D.1
Gambar 4-15 Flowchart ISR
Program utama akan terus berjalan secara default. Interrupt eksternal akan menyebabkan fungsi ISR bekerja dan meninggalkan program utama serta akan segera menampilkan output LED yang
Laporan Praktikum - Laboratorium Dasar Teknik Elektro – STEI ITB 9 menyala dari LSB hingga MSB secara
berurutan dengan delay 0.25 detik.
Pada program utama, terdapat pemanggilan prosedur Init_Ext_Int (void); yang berfungsi sebagai inisialisasi external interrupt. MCUCR berfungsi untuk mengatur external interrupt. Apabila terdapat perintah MCUCR=0x02 maka akan menunjukkan bahwa pin INT0 pada ATMega8535 adalah tempat interrupt bekerja ketika input memberikan sinyal falling edge (terhubung dengan interrupt input IS2). MCUCSR berfungsi pada penggunaan INT2 (asynchronous external interrupt). Apabila MCUCSR diatur pada nilai 0x00 akan menunjukkan bahwa MCUCSR tidak digunakan. GICR merupakan register yang berfungsi untuk menentukan INT yang enable dalam melakukan interrupt request. GIFR berfungsi untuk memberikan external flag pada INT yang digunakan. GIFR di atur pada nilai 0x40 karena bit ke-7 digunakan untuk mengaktifkan pin INT1 (terhubung dengan interrupt input IS3). Program utama akan menjalankan inisialisasi prosedur void Init_Ext_Int (void) kemudian dilanjutkan dengan melakukan assign PORTA sebagai output dengan perintah DDRA=0xFF. Selanjutnya dilakukan kondisi perulangan pada PORTA dengan nilai 0b10101010 dan 0b01010101 secara bergantian dengan delay 0.5 detik. Ketika diberikan interrupt eksternal, maka program akan menjalankan ISR dan mengeluarkan perintah untuk menghasilkan output seperti pada running LED dari bit LSB ke bit MSB secara bergantian dengan delay 0.25 detik.. Berdasarkan realisasi program yang telah dibuat akan menghasilkan keluaran pada PORTA yang terhubung pada LED dengan konfigurasi seperti berikut.
State 1 LED Bit 7 6 5 4 3 2 1 0 State 2 LED Bit 7 6 5 4 3 2 1 0
Gambar 4-16 Konfigurasi LED Tugas II.D.1 B. Tugas II.D.2
Berikut ini merupakan flowchart program dengan kode program terlampir.
Laporan Praktikum - Laboratorium Dasar Teknik Elektro – STEI ITB 1 0 Gambar 4-17 Flowchart ISR
Tugas II.D.2 merupakan gubahan Tugas II.D.1 dengan melakukan penambahan ISR untuk INT1 kemudian mengatur MCUCR menjadi 0b00001010, GICR=0b1100 0000, GIFR=0b11000000. Pada program utama nilai PORTA diganti menjadi 0xFF dan 0x00 secara bergantian dengan delay 0.5 detik.
Penggantian nilai MCUCR=0b00001010 digunakan untuk mengatur bit ISC 00, 01, 10, dan 11 agar pin INT1 dan INT2 berada pada saat respon falling edge. GIFR dan GICR diatur agar dapat mengaktifkan interrupt dan flag untuk pin INT1 serta INT0.
Berikut adalah tampilan LED untuk Tugas II.D.2. LED akan bergantian konfigurasi nyalanya selama 0.5 detik
State 1
LED
Bit 7 6 5 4 3 2 1 0
State 2 = INT0 (terhubung dengan IS2)
LED
Bit 7 6 5 4 3 2 1 0
State 2 = INT1 (terhubung dengan IS3)
LED
Bit 7 6 5 4 3 2 1 0
Gambar 4-18 Konfigurasi LED Tugas II.D.2
5. KESIMPULAN
Pengaturan timer/counter dan interrupt dapat dilakukan dengan cara mengatur register-register terkait dan sesuai dengan fungsi yang akan dijalankan.
Register yang membuat timer dapat diatur adalah register TCCR (Timer/Counter Control Register).
Timer/Counter dapat memberikan delay pada program dengan mengubahnya menjadi timer dengan clock internal. Prescaler berfungsi untuk memperlambat timer dengan mengatur nilai pada register TCCR1B. Prescaler diatur dengan menggunakan register CS pada TCCR. Ada 3 jenis prescaler yang dapat digunakan, yaitu Timer 0 ( 8 bit ), Timer 1 (16 bit), dan timer 2 (8 bit).
Clock External dapat menjadi counter (perncacah) dengan menggunakan register pencacah seperti TCNT dan digunakan OCR sebagai nilai pembandingnya.
Interrupt akan dijalankan secara langsung ketika interrupt trigger yang berasal dari luar (external) atau dari dalam (internal) diberikan pada sistem dengan memperhatikan urutan antrean-nya/eksekusinya. Ketika flag aktif, program secara langsung akan menjalankan ISR (Interrupt Service Routine) yang akan menangani interrupt yang terjadi dan mengembalikan nilai logika interrupt tersebut. ISR harus bekerja dengan cepat agar tidak menhambat keberjalanan program utama, atau program dengan prioritas terendah. Ketika ISR selesai dijalankan, maka program akan kembali memasuki program utama dan
Laporan Praktikum - Laboratorium Dasar Teknik Elektro – STEI ITB 11 melanjutkan instruksi berikutnya yang
sempat tertunda.
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/en-us/library/ms892408.aspx?f=255&MSPPErr
or=-2147217396, diakses pada 30 Maret 2016
20:27
Laporan Praktikum - Laboratorium Dasar Teknik Elektro – STEI ITB 12
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); }
B. Kode program Tugas II.A.2
#include <avr/io.h> void init_tim(void);
void Delay(void);
int main(void) { DDRA=0xFF; PORTA = 0x00; init_tim(); while (1) { PORTA = 0x0F;
Laporan Praktikum - Laboratorium Dasar Teknik Elektro – STEI ITB 13 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); }
C. Kode program Tugas II.B.1
#include<avr/io.h> #include<avr/io.h>
#define F_CPU 7372800UL // 8MHz
#include <util/delay.h> 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;
Laporan Praktikum - Laboratorium Dasar Teknik Elektro – STEI ITB 14 }
void init_tim(void) {
//mode operasi dan sumber clock
TCCR0=0b00000110;
//overflow interrupt disable
TIMSK=(0<<OCIE0); }
D. Kode program Tugas II.B.2
#include <avr/io.h> #include <avr/io.h> void init_tim(void);
void init_tim1(void);
void Delay(void);
int main(void){ init_tim(); init_tim1(); DDRA=0xFF; while (1){
//penentuan nilai awal timer TCNT0 = 1;
//penentuan nilai compare OCR0 = 7;
//menanti compare match
while(bit_is_clear(TIFR,OCF0)){ PORTA = 0b10101010; } //meng-nol-kan flag TIFR|=_BV(OCF0); PORTA = 0xFF; Delay(); } return 0; }
void init_tim(void){
//mode operasi dan sumber clock TCCR0=0b00000110;
//overflow interrupt disable TIMSK=(0<<OCIE0);
}
void init_tim1(void){
//mode operasi CTC, sumber clock prescaller 1024
TCCR1A=0;
TCCR1B=0b00001101;
//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;
Laporan Praktikum - Laboratorium Dasar Teknik Elektro – STEI ITB 15
//penentuan nilai compare untuk delay 7 detik : = 7x8000000/1024
OCR1AH=0x98; OCR1AL=0x97;
//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); }
E. Kode program Tugas II.C.1
#include <avr/io.h>
#define F_CPU 7372800UL //8MHz
#include <util/delay.h> #include <avr/interrupt.h> void init_int(void);
ISR(TIMER1_OVF_vect) { unsigned char i; PORTA=0xFF; _delay_ms(200); TIFR=(1<<TOV1); TCNT1H=0xE3; TCNT1L=0xE0; }
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=0xE3; TCNT1L=0xE0; sei(); }
F. Kode program Tugas II.C.2
#include <avr/io.h>
#define F_CPU 7372800UL //8MHz
#include <util/delay.h> #include <avr/interrupt.h>
Laporan Praktikum - Laboratorium Dasar Teknik Elektro – STEI ITB 16
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(); }
G. Kode program Tugas II.D.1
#include <avr/io.h>
#define F_CPU 7372800UL //8MHz
#include <util/delay.h> #include <avr/interrupt.h> 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();
Laporan Praktikum - Laboratorium Dasar Teknik Elektro – STEI ITB 17 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; }
H. Kode program Tugas II.D.2
#include <avr/io.h> #define F_CPU 8000000UL #include <util/delay.h> #include <avr/interrupt.h> void Init_Ext_Int(void); ISR(INT0_vect){ PORTA = 0x99; _delay_ms(500); PORTA = 0x66; _delay_ms(500); } ISR(INT1_vect){ PORTA = 0x4F;//nim 079 _delay_ms(500); PORTA = 0x50;//nim 080 _delay_ms(500); }
int main(void){ Init_Ext_Int(); sei(); DDRA=0xFF; while (1){ PORTA = 0xFF; _delay_ms(500); PORTA = 0x00; _delay_ms(500); } return 0; }
void Init_Ext_Int(void){ MCUCR=0b00001010; MCUCSR=0x00; GICR=0b11000000; GIFR=0b11000000; }