• Tidak ada hasil yang ditemukan

EL3214_02_13211059

N/A
N/A
Protected

Academic year: 2021

Membagikan "EL3214_02_13211059"

Copied!
18
0
0

Teks penuh

(1)

Laporan Praktikum - Laboratorium Dasar Teknik Elektro – STEI ITB 1

MODUL 02 TIMER, COUNTER, DAN INTERRUPT

Aji Suryo Wibowo (13211059) Asisten: Febryanto/13210043 Tanggal Percobaan: 06 Maret 2014 EL3214 – Praktikum Sistem Mikroprosesor

Laboratorium Dasar Teknik Elektro - Sekolah Teknik Elektro dan Informatika ITB

Abstrak

Pada modul ini, dilakukan percobaan untuk menggunakan

fitur dari mikroprosesor ATMega8535, yaitu timer, counter,

dan interrupt. Percobaan pertama adalah membuat delay

dengan

memanfaatkan

fitur

timer/counter

pada

ATMega8535. Percobaan selanjutnya adalah mengeset clock

dengan menggunakan sumber clock eksternal. Kemudian,

percobaan dilanjutkan dengan membuat aplikasi yang

memanfaatkan fitur interrupt dengan timer/counter.

Percobaan terakhir adalah menggunakan external interrupt.

Kata kunci: Timer/Counter, Clock, Interrupt.

1.

P

ENDAHULUAN

ATMega merupakan sistem minimum yang sering digunakan sebagai prosesor sebuah sistem sederhana. Dalam hal ini, sistem minimum ATMega, khususnya ATMega 8535 digunakan sebagai kit praktikum, sehingga diharapkan setelah melakukan percobaan, mahasiswa dapat: a. memahami datasheet ATMega 8535

b. membuat aplikasi timer/counter dan interrupt pada AVR dengan menggunakan bahasa pemrograman C pada WinAVR c. membuat aplikasi external interrupt pada

AVR dengan menggunakan bahasa pemrograman C pada WinAVR

2.

S

TUDI

P

USTAKA

2.1

ATM

EGA

8535,

[3]

Gambar 2.1 ATMega 8535, [4]

ATMega8535 merupakan salah satu mikro kontroler 8 bit buatan Atmel untuk keluarga AVR yang diproduksi secara massal pada tahun 2006. Karena merupakan keluarga AVR, maka ATMega8535 juga menggunakan arsitektur RISC. Secara singkat, ATMega8535 memiliki beberapa kemampuan:

a. Sistem mikrokontroler 8 bit berbasis RISC dengan kecepatan maksimal 16 MHz.

b. Memiliki memori flash 8 KB, SRAM sebesar 512 byte dan EEPROM (Electrically Erasable Programmable Read Only Memory) sebesar 512 byte.

c. Memiliki ADC (pengubah analog-ke-digital) internal dengan ketelitian 10 bit sebanyak 8 saluran.

d. Memiliki PWM (Pulse Width Modulation) internal sebanyak 4 saluran.

e. Portal komunikasi serial (USART) dengan kecepatan maksimal 2.5 Mbps.

f. Enam pilihan mode sleep, untuk menghemat penggunaan daya listrik.

Mikrokontroler ATMega8535 memiliki 40 pin untuk model PDIP, dan 44 pin untuk model TQFP dan PLCC. Nama-nama pin pada mikrokontroler ini adalah:

a. VCC untuk tegangan pencatu daya positif. b. GND untuk tegangan pencatu daya negatif. c. PortA (PA0 – PA7) sebagai port

Input/Output dan memiliki kemampuan lain yaitu sebagai input untuk ADC.

d. PortB (PB0 – PB7) sebagai port Input/Output dan juga memiliki kemampuan yang lain. e. PortC (PC0 – PC7) sebagai port Input/Output

untuk ATMega8535.

f. PortD (PD0 – PD7) sebagai port Input/Output dan juga memiliki kemampuan yang lain.

(2)

Laporan Praktikum - Laboratorium Dasar Teknik Elektro – STEI ITB 2 g. RESET untuk melakukan reset program

dalam mikro kontroler.

h. XTAL1 dan XTAL2 untuk input pembangkit sinyal clock.

i. AVCC untuk pin masukan tegangan pencatu daya untuk ADC.

j. AREF untuk pin tegangan referensi ADC. Untuk melakukan pemrograman dalam mikro kontroler AVR, Atmel telah menyediakan software khusus yang dapat diunduh dari website resmi Atmel. Software tersebut adalah AVRStudio. Software ini menggunakan bahasa assembly sebagai bahasa perantaranya. Selain AVRStudio, ada beberapa software pihak ketiga yang dapat digunakan untuk membuat program pada AVR. Software dari pihak ketiga ini menggunakan bahasa pemrograman tingkat tinggi seperti bahasa C, Java, atau Basic. Untuk melakukan pemindahan dari komputer ke dalam chip, dapat digunakan beberapa cara seperti menggunakan kabel JTAG atau menggunakan STNK buatan Atmel.

2.2

T

IMER SEBAGAI

D

ELAY

Timer atau counter merupakan salah satu fitur yang disediakan oleh ATMega8535 yang memiliki fungsi sebagai pewaktu atau pencacah berdasarkan clock yang dijadikan sebagai acuan (internal atau eksternal).

Prinsip kerja timer/counter adalah melakukan pembagian frekuensi (prescaler) pada clock yang dijadikan acuan sehingga timer/counter dapat berjalan sesuai dengan yang dikehendaki.

Ketika digunakan sebagai pemberi delay (waktu tunda), timer akan melakukan pencacahan sampai ke nilai tertentu yang telah ditentukan sebelumnya oleh pengguna. Program akan di-stall (dihentikan sementara) saat pencacahan oleh timer dilakukan. Setelah timer mencapai nilai yang ditentukan tadi, maka program akan dilanjutkan kembali.

2.3

C

LOCK SEBAGAI

C

OUNTER

Clock merupakan komponen yang sangat penting dari suatu prosesor, karena di situlah semua proses yang dilakukan oleh prosesor berdasar. Kecepatan (frekuensi) clock yang dimiliki suatu prosesor merupakan salah satu indikator kecepatan prosesor tersebut dalam mengolah data. Pada ATMega8535, terdapat dua jenis clock berdasarkan sumber yang digunakan, yaitu clock internal dan clock eksternal. Clock internal adalah clock yang memanfaatkan sumber yang berasal dari sistem (osilator RC internal), sementara clock

eksternal merupakan clock yang memanfaatkan sumber clock dari luar sistem, contohnya kristal. Untuk mengeset sumber clock baik internal maupun eksternal sebagai counter, digunakan register CS02..CS00. Ketika register tersebut diset dengan nilai selain 110 dan 111, maka sumber clock yang digunakan sebagai counter adalah sumber internal, sementara jika diset dengan nilai yang tercantum sebelumnya, sumber clock yang digunakan adalah sumber eksternal (110 untuk clock pada falling edge, 111 untuk clock pada rising edge).

2.4

I

NTERRUPT

Interrupt merupakan keadaan di mana ada suatu sinyal yang memberitahukan prosesor bahwa terdapat peristiwa yang memiliki prioritas yang lebih tinggi dibandingkan dengan program utama. Prinsip kerja interrupt atau interupsi adalah sebagai berikut, setelah prosesor mendapatkan interrupt baik dari hardware maupun software, maka prosesor akan men-stall program utama yang sedang berjalan, kemudian prosesor akan menjalankan ISR atau Interrupt Service Routine, kemudian setelah ISR selesai dijalankan, prosesor akan kembali menjalankan program utama.

3.

M

ETODOLOGI

3.1

A

LAT DAN

K

OMPONEN YANG

D

IGUNAKAN a. Sistem Minimum ATMega 8535 (1 buah) b. DT-51 Trainer Board (1 buah) c. Power Supply (1 buah) d. Komputer Terinstal WinAVR (1 buah)

3.2

L

ANGKAH

-L

ANGKAH

P

ERCOBAAN

a. Diagram 2.1 Delay dengan Timer/Counter

(3)

Laporan Praktikum - Laboratorium Dasar Teknik Elektro – STEI ITB 3 b. Diagram 2.2 External Clock sebagai

Counter c. Diagram 2.3 Aplikasi Interrupt dengan Timer/Counter

1

•Power supply diset pada 9 V kemudian dihubungkan pada kit praktikum.

•Kabel downloader dihubungkan dari PC ke sismin ATMega.

2

•Dari PORTA pada sismin, dihubungkan kabel output ke port output pada DT-51. •Kodingan ditulis,

kemudian didownload ke dalam sismin. •Clock yang digunakan

adalah kristal 8 MHz.

1

•Power supply diset pada 9 V kemudian dihubungkan pada kit praktikum.

•Kabel downloader dihubungkan dari PC ke sismin ATMega.

2

•Dari PORTA pada sismin, dihubungkan kabel output ke port output pada DT-51. •ATMega8535 dihubungkan dengan PORTCONTROL pada DT-51 sehingga pin T1 ATMega8535 terhubung dengan sebuah Interrupt Input.

•Kodingan ditulis, kemudian didownload ke dalam sismin.

(4)

Laporan Praktikum - Laboratorium Dasar Teknik Elektro – STEI ITB 4 d. Diagram 2.4 External Interrupt

4.

H

ASIL DAN

A

NALISIS

4.1 Delay dengan Timer/Counter

Gambar 2.2 Hasil Percobaan II.A.1

Gambar 2.3 Hasil Percobaan II.A.2

1

•Power supply diset pada 9 V kemudian dihubungkan pada kit praktikum.

•Kabel downloader dihubungkan dari PC ke sismin ATMega.

2

•Dari PORTA pada sismin, dihubungkan kabel output ke port output pada DT-51. •ATMega8535 dihubungkan dengan PORTCONTROL pada DT-51 sehingga pin T1 ATMega8535 terhubung dengan sebuah Interrupt Input.

•Kodingan ditulis, kemudian didownload ke dalam sismin.

1

•Power supply diset pada 9 V kemudian dihubungkan pada kit praktikum.

•Kabel downloader dihubungkan dari PC ke sismin ATMega.

2

•Dari PORTA pada sismin, dihubungkan kabel output ke port output pada DT-51. •ATMega8535 dihubungkan dengan PORTCONTROL pada DT-51 sehingga pin T1 ATMega8535 terhubung dengan sebuah Interrupt Input. •Kodingan ditulis, kemudian didownload ke dalam sismin. 1 s 6 s

(5)

Laporan Praktikum - Laboratorium Dasar Teknik Elektro – STEI ITB 5

Gambar 2.4 Flowchart Percobaan II.A.1 Gambar 2.5 Flowchart Percobaan II.A.2

Analisis:

Terlihat dari hasil yang didapat bahwa lampu akan berkedip tiap satu detik untuk Percobaan II.A.1, dikarenakan pada prosedur Delay() yang digunakan, telah diset nilai awar timer counter adalah 0 (dari baris instruksi TCNT1H, dan TCNT1L), kemudian, diset pula nilai output compare sebesar 0x7A12 yang diset pada register OCR1AH dan OCR1AL. Nilai 0x7A12 diperoleh dari delay yang ingin digunakan yang dikalikan dengan nilai clock yang dipakai yang dibagi dengan nilai prescaler. Pada percobaan ini, digunakan mode operasi CTC dan nilai prescaler 256 yang dapat diketahui melalui pengesetan nilai bit CS12:CS10 pada register TCCR1B pada 100, sedangkan bit WGM13:WGM10 diset pada 0100 yang dapat dilihat pada register TCCR1A dan TCCR1B sehingga, START PORTA is set as OUTPUT init_tim() PORTA = 0x0F Delay() is set at 1 s PORTA = 0xF0 Delay() is set at 1 s START PORTA is set as OUTPUT init_tim() PORTA = 0x0F Delay() is set at 6 s PORTA = 0xF0 Delay() is set at 6 s

(6)

Laporan Praktikum - Laboratorium Dasar Teknik Elektro – STEI ITB 6

Pada subprogram Delay() terlihat bahwa digunakan perintah untuk melakukan loop otomatis yang akan berhenti ketika nilai TCNT1 sama dengan OCR1A, maka loop akan berhenti yang artinya waktu 1 detik terlewati.

Dapt dilihat dari baris program, bahwa perilaku LED nantinya akan menyala seperti pada Gambar 2.2 dengan jeda waktu transisi (delay) tiap 1 detik. Sementara itu, untuk Percobaan II.A.2, dilakukan modifikasi pada nilai TCCR1B, karena spesifikasi yang diminta adalah,

( ) maka nilai OCR akan,

terlihat bahwa nilai OCR yang dihasilkan melebihi kapasitas register OCR yang digunakan yaitu 16 bit, sehingga nilai prescaler yang digunakan diubah menjadi 1024 dengan cara mengeset nilai bit CS12:CS10 pada TCCR1B menjadi 101, sehingga nilai OCR akan menjadi,

Pengesetan nilai OCR ini, akan membuat perilaku LED seperti yang ditunjukkan oleh Gambar 2.3. 4.2 External Clock sebagai Counter

IS1 is pressed 3 times

5

0

0

m

s

Gambar 2.6 Hasil Percobaan II.B.1

IS1 is pressed 6 times

6

s

Gambar 2.7 Hasil Percobaan II.B.2

Gambar 2.8 Flowchart Percobaan II.B.1

START PORTA is set as OUTPUT init_tim() PORTA = 0xAA Is 3 times? YES PORTA = 0x55 500 ms delays NO

(7)

Laporan Praktikum - Laboratorium Dasar Teknik Elektro – STEI ITB 7

Gambar 2.9 Flowchart Percobaan II.B.2

Analisis:

Terlihat bahwa untuk Percobaan II.B.1 hasil yang diperoleh sudah sesuai. Pada program yang digunakan, terlihat nilai TCNT0 diset pada nilai 123 sementara OCR0 diset pada 125.

Kemudian, dalam loop utama, terlihat bahwa terdapat loop yang mana akan keluar jika terjadi compare match antara TCNT0 dan OCR0. Dari hal tersebut, dapat diketahui bahwa selama belum terjadi penekanan IS1 sebanyak 3 kali yang merupakan clock eksternal yang aktif pada falling edge (yang dapat diketahui pula dari penggunaan bit CS02:CS00 pada register TCCR0 yang diset pada 110), maka LED akan menyala pada 0xAA. Kemudian, terlihat bahwa saat terjadi penekanan IS1 sebanyak 3 kali, maka flag OCF0 akan terset, sehingga akan keluar dari loop yang disebutkan sebelumnya untuk menuju ke perintah peresetan flag dan penggantian nyala LED menjadi 0x55.

Penjelasan yang sama digunakan untuk Percobaan II.B.2. Pada percobaan ini, digunakan prosedur Delay() yang mana telah diset pada 6 detik yang penjelasannya dapat dilihat dari Percobaan II.A. Pada Percobaan II.B.2 ini, digunakan 3 register Timer/Counter, yaitu TCCR1A, TCCR1B, dan TCCR0, atau dengan kata lain, program menggunakan 2 clock, yaitu clock internal untuk menghitung delay dan clock eksternal (input IS1) untuk menghitung counter input agar LED berubah nyalanya.

4.3 Aplikasi Interrupt dengan Timer/Counter

Gambar 2.10 Hasil Percobaan II.C

Gambar 2.11 Flowchart Percobaan II.C

Analisis: START PORTA is set as OUTPUT init_tim() PORTA = 0xAA Is 6 times? YES PORTA = 0x55 Delay() is set at 6 s NO START PORTA is set as OUTPUT init_int() PORTA = 0xFF 500 ms delays PORTA = 0xAA 500 ms delays PORTA = 0x0F 500 ms delays PORTA = 0xF0 500 ms delays ISR0 Is twice? YES RETI0 NO

(8)

Laporan Praktikum - Laboratorium Dasar Teknik Elektro – STEI ITB 8 Pada percobaan ini, pada dasarnya Percobaan

II.C.1 dan II.C.2 sama jika dilihat dari flowchartnya, sehingga dapat digambarkan dalam satu flowchart saja.

Pada Percobaan II.C.1, digunakan interrupt timer overflow sehingga saat terjadi overflow timer, maka sistem akan memasuki interrupt. Percobaan II.C.1 menggunakan clock 8 MHz dan prescaler 1024 yang terlihat dari pengesetan bit CS02:CS00 pada register TCCR0 di nilai 101. Selain itu, nilai timer awal pada register TCNT0 diset nilai 0x00 sehingga sistem akan memasuki interrupt saat TCNT0 mencapai nilai lebih dari 0xFF dan nilai bit TOIE0 pada register TIMSK bernilai 1. Jika nilai ini dikonversikan dalam detik, diperoleh,

( )

Dari hal tersebut, maka perilaku program akan menjadi:

Timer akan melakukan pensamplingan tiap 32.768 ms untuk mendeteksi adanya interrupt yang aktif (bit TOIE0 pada register TIMSK bernilai 1) jika interrupt tersebut tidak terdeteksi, maka LED akan menyala 0xFF, kemudian selang waktu 500 ms nyala LED akan menjadi 0xAA, kemudian selang waktu 500 ms, sistem akan mulai mengaktifkan interrupt (mengeset bit TOIE0 pada register TIMSK dengan nilai 1) sehingga pada saat ini, jika terjadi overflow TCNT0 (nilainya lebih dari 0xFF) maka sistem akan menjalankan ISR. Pada ISR yang dilakukan, LED akan menyala 0x0F kemudian selang 500 ms akan menjadi 0xF0 dan selang 500 ms akan kembali lagi ke 0x0F. Hal tersebut dilakukan sebanyak 2 kali pengulangan. Setelah 2 kali pengulangan, ISR akan mereset ulang flag interrupt kemudian sistem akan keluar dari ISR untuk kembali ke program utama.

Kemudian, pada Percobaan II.C.2, juga digunakan timer overflow interrupt. Karena spesifikasi yang diinginkan adalah sistem harus masuk ke ISR tiap 6 detik, maka sampling interrupt yang dilakukan adalah tiap 6 detik. Pengesetan nilai ini dilakukan dengan cara mengeset nilai awal timer pada register TCNT1 dengan nilai 0x48E5. Pada percobaan ini, digunakan prescaler 1024 yang ditunjukkan dengan pengesetan TCCR1B pada 0x05. Dari nilai 0x48E5 dan prescaler 1024, maka diperoleh,

( )

Sistem akan berjalan sebagai berikut:

Timer/counter mulai menghitung dari nilai 0x48E5 sampai 0xFFFF pada frekuensi clock 8 MHz dan prescaler 1024 yang artinya 6 detik.

Waktu 6 detik tersebut adalah waktu sampling untuk mengetahui ada tidaknya interrupt yang aktif. Kemudian, sementara pen-samplingan berjalan, LED akan mulai menyala dari 0xFF kemudian selang 500 ms menjadi 0xAA dan selang 500 ms sistem akan mengaktifkan interrupt. Pada saat ini, jika penyamplingan mendeteksi adanya interrupt ini (yang berarti sekitar 5 detik kemudian setelah 1 detik pertama) maka prosedur ISR akan dijalankan. Jalannya ISR sama seperti pada Percobaan II.C.1, bedanya, setelah melewati loop yang terdapat pada ISR, sistem akan mereset ulang flag TOV1 (timer overflow) dan menreset ulang timer/counter (TCNT1) pada nilai awal 0x48E5. 4.4 External Interrupt INTERRUPT 5 0 0 m s 5 0 0 m s B a ck t o m a in p ro g ra m 2 5 0 m s 2 5 0 m s 2 5 0 m s 2 5 0 m s 2 5 0 m s 2 5 0 m s 2 5 0 m s 2 5 0 m s

Gambar 2.12 Hasil Percobaan II.D.1

INTERRUPT 0 5 0 0 m s 5 0 0 m s B a c k t o m a in p ro g ra m 5 0 0 m s 5 0 0 m s INTERRUPT 1 5 0 0 m s B a c k t o m a in p ro g ra m 5 0 0 m s

(9)

Laporan Praktikum - Laboratorium Dasar Teknik Elektro – STEI ITB 9

Gambar 2.14 Flowchart Percobaan II.D.1

Gambar 2.15 Flowchart Percobaan II.D.2

Analisis:

Pada Percobaan II.D.1, pada prosedur Init_Ext_Int(), register MCUCR diset pada nilai 0x02 yang artinya, INT0 akan menghasilkan interrupt pada falling edge. Kemudian, register

GICR diset pada nilai 0x40 begitupun dengan register GIFR. Hal ini berarti bahwa interrupt di-enable-kan pada pin INT0 dan flagnya pada INTF0.

Program pada Percobaan II.D.1 akan berjalan sebagai berikut:

LED akan menyala 0xAA, kemudian selang waktu 500 ms nyalanya akan berubah menjadi 0x55 dan selang 500 ms kemudian nyalanya kembali menjadi 0xFF begitu seterusnya. Meskipun demikian, ketika interrupt eksternal diberikan, dalam hal ini tombol IS1 dipencet, maka prosedur ISR0 akan aktif dan sistem akan keluar dari program utama untuk menjalankan prosedur ISR0 yang mana LED akan menyala dari ujung kanan (bit 0) ke ujung kiri (bit 7) dengan selang waktu tiap transisi bitnya 250 ms yang dapat dilihat dari Gambar 2.12. Kemudian setelah ISR selesai dijalankan, sistem akan kembali ke program utama.

Pada Percobaan II.D.2, pada prosedur Init_Ext_Int(), register MCUCR diset pada nilai 0b00001010 yang artinya, INT1 dan INT0 akan menghasilkan interrupt pada falling edge. Kemudian, register GICR diset pada nilai 0b11000000 begitupun dengan register GIFR. Hal ini berarti bahwa interrupt di-enable-kan pada pin INT1 dan INT0 dan flagnya pada INTF1 dan INTF0.

Program pada Percobaan II.D.2 akan berjalan sebagai berikut:

LED akan menyala 0xFF, kemudian selang waktu 500 ms nyalanya akan berubah menjadi 0x55 dan selang 500 ms kemudian nyalanya kembali menjadi 0x00 begitu seterusnya. Meskipun demikian, ketika interrupt eksternal (INT0) diberikan, dalam hal ini tombol IS1 dipencet, maka prosedur ISR0 akan aktif dan sistem akan keluar dari program utama untuk menjalankan prosedur ISR0 yang mana LED akan menyala 0x99 kemudian selang waktu 500 ms akan berganti menjadi 0x66 dan pada selang waktu 500 ms, sistem akan kembali masuk ke program utama. Selain itu, jika interrupt eksternal lainnya diberikan (INT1) dalam hal ini IS2 dipencet, maka sistem akan memasuki ISR1 yang mana LED akan menyala 0x0A selang 500 ms kemudian akan berganti menjadi 0x55 dan 500 ms sistem keluar dari prosedur ISR1 untuk kembali ke program utama. Untuk lebih jelasnya dapat dilihat pada Gambar 2.13.

5.

K

ESIMPULAN

Dari percobaan dapat disimpulkan bahwa: START PORTA is set as OUTPUT Init_Ext_Int() PORTA = 0xAA 500 ms delays PORTA = 0x55 500 ms delays PORTA = i 250 ms delays i = (i<<1)|(i>>7) ISR0 Is 8 times? YES RETI0 NO i = 0x01 START PORTA is set as OUTPUT Init_Ext_Int() PORTA = 0xFF 500 ms delays PORTA = 0x00 500 ms delays ISR0 PORTA = 0x99 500 ms delays PORTA = 0x66 500 ms delays RETI0 ISR1 PORTA = 0x0A 500 ms delays PORTA = 0x55 500 ms delays RETI1

(10)

Laporan Praktikum - Laboratorium Dasar Teknik Elektro – STEI ITB 1 0 a. Untuk mengetahui apa saja yang terdapat

dan disediakan oleh ATMega 8535, digunakan datasheet dari ATMega 8535, termasuk di dalamnya tentang PORT, PIN, clock, interrupt, timer/counter, dan register yang digunakan untuk mengeset hal-hal tersebut.

b. Untuk melakukan konfigurasi Timer/Counter dan Interrupt, digunakan register TCCRx, TCNTx, OCRx, TIMSK, dan TIFR.

Register TCCRx digunakan untuk melakukan setting clock yang digunakan, baik clock eksternal maupun clock internal, demikian pula dengan prescaler yang digunakan. Selain itu, pada register TCCRx juga dapat dilakukan pengesetan mode operasi.

Register TCNTx merupakan register 8 bit (16 bit untuk TCNT1) yang digunakan sebagai tempat menyimpan nilai timer/counter, sementara register OCRx merupakan register 8 bit (16 bit untuk OCR1) tempat menyimpan nilai output compare match.

Register TIMSK merupakan register yang mengatur tipe interrupt yang terjadi (aktif). Bit 0 pada register TIMSK merupakan bit TOIE0 yang mana jika diset akan mengaktifkan interrupt berdasarkan Timer/Counter0 (TCNT0) Overflow. Sementara bit 1 pada TIMSK merupakan bit OCIE0 yang mana jka diset akan mengaktifkan interrupt berdasarkan compare match antara nilai TCNT0 dengan nilai OCR0. Demikian pula dengan bit lainnya, yg dicantumkan di bawah ini,

Gambar 2.16 Register TIMSK

Dapat dilihat dari gambar di atas, bahwa penjelasan untuk bit-bit lainnya sama seperti penjelasan pada bit 0 dan bit 1 pada penjelasan sebelumnya. Namun dapat dilihat pada bit 5, bahwa terdapat bit TICIE1 yang mana ketika diset maka interrupt Timer/Counter1 Input Capture akan aktif. Register TIFR merupakan register yang berisi bit flag interrupt. Bit 0 merupakan bit flag Timer/Counter0 Overflow interrupt. Sementara bit 1 merupakan bit flag Output Compare0 match interrupt. Untuk bit-bit lainnya, penjelasannya sesuai dengan penjelasan sebelumnya kecuali untuk bit 5 yaitu bit flag untuk Input Capture1 interrupt.

Gambar 2.17 Register TIFR

c. Untuk melakukan kofigurasi External Interrupt, maka dilakukan pengesetan pada register MCUCR, MCUCSR, GICR, dan GIFR. Register MCUCR digunakan jika ingin mengeset pin INT0 (bit 1 dan bit 0) maupun pin INT1 (bit 3 dan bit 2) sebagai pin interrupt eksternal.

Register MCUCSR digunakan jika ingin mengeset pin INT2 (bit 6) sebagai pin interrupt eksternal.

Register GICR digunakan untuk mengaktifkan interrupt eksternal dengan pin yang berkorelasi.

Gambar 2.18 Register GICR

Register GIFR digunakan sebagai flag interrupt eksternal yang berkorelasi.

Gambar 2.19 Register GIFR

6.

D

AFTAR

P

USTAKA

[1]

Hutabarat, Mervin T., Waskita Adijarto, dan

Harry Septanto,

Praktikum Sistem Mikroprosesor

,

Sekolah Teknik Elektro dan Informatika

Institut Teknologi Bandung, Bandung, 2013

[2]

ATMega8535 Datasheet from www.atmel.com

[3]

http://id.wikipedia.org/wiki/ATMega8535

(11)

Laporan Praktikum - Laboratorium Dasar Teknik Elektro – STEI ITB 11

7.

L

AMPIRAN //========================================================================================================= //Tugas 2A1 //========================================================================================================= #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=0x7A;

OCR1AL=0x12;

//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)

Laporan Praktikum - Laboratorium Dasar Teknik Elektro – STEI ITB 12 //========================================================================================================= //Tugas 2A2 //========================================================================================================= #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 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;

//penentuan nilai compare untuk delay 6 = 23 mod 9 + 1 detik OCR1AH=0xB7; //0xB71B = 6 * 8 000 000 / 1024 in HEX

OCR1AL=0x1B;

//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)

Laporan Praktikum - Laboratorium Dasar Teknik Elektro – STEI ITB 13

//========================================================================================================= //Tugas 2B1

//========================================================================================================= #include<avr/io.h>

#define F_CPU 8000000UL //8 MHz #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 = 125;

//menanti compare match while(bit_is_clear(TIFR,OCF0)) { PORTA=0b10101010; } //mengenolkan 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<<OCIE0);

(14)

Laporan Praktikum - Laboratorium Dasar Teknik Elektro – STEI ITB 14

//========================================================================================================= //Tugas 2B2

//========================================================================================================= #include<avr/io.h>

#define F_CPU 8000000UL //8 MHz #include<util/delay.h> void init_tim(void); void Delay(void); int main(void) { init_tim(); DDRA=0xFF; while(1) {

//penentuan nilai awal timer TCNT0 = 1;

//penentuan nilai compare OCR0 = 6;

//menanti compare match while(bit_is_clear(TIFR,OCF0)) { PORTA=0b10101010; } //mengenolkan flag TIFR|=_BV(OCF0); PORTA=0b01010101; Delay(); } return 0; } void init_tim(void) {

//mode operasi CTC, sumber clock prescaller 1024 TCCR1A=0;

TCCR1B=0b00001101;

//overflow interrupt disable TIMSK|=(0<<TOIE1);

//mode operasi dan sumber clock TCCR0=0b00000110;

//overflow interrupt disable TIMSK=(0<<OCIE0);

}

void Delay(void) {

//overflow interrupt enable TIMSK|=_BV(TOIE1); //(1<<TOIE1); //penentuan nilai awal timer TCNT1H=0;

TCNT1L=0;

//penentuan nilai compare untuk delay 6 = 23 mod 9 + 1 detik OCR1AH=0xB7; //0xB71B = 6 * 8 000 000 / 1024 in HEX

OCR1AL=0x1B;

//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);

}

(15)

Laporan Praktikum - Laboratorium Dasar Teknik Elektro – STEI ITB 15

//========================================================================================================= //Tugas 2C1

//========================================================================================================= #include <avr/io.h>

#define F_CPU 8000000UL #include <util/delay.h> #include <avr/interrupt.h> void init_int(void); ISR(TIMER0_OVF_vect) { unsigned char i; for (i=0;i<2;++i) { PORTA=0x0F; _delay_ms(500); PORTA=0xF0; _delay_ms(500); } TIFR=(1<<TOV0); TIMSK=0b000000; } int main(void) { init_int(); DDRA=0xFF; while (1) { PORTA = 0xFF; _delay_ms(500); PORTA = 0b10101010; _delay_ms(500); TIMSK=0b000001; } return 0; } void init_int(void) { TIMSK=0b000000; TCCR0=0b00000101; TCNT0=0x00; sei(); } //=========================================================================================================

(16)

Laporan Praktikum - Laboratorium Dasar Teknik Elektro – STEI ITB 16

//========================================================================================================= //Tugas 2C2

//========================================================================================================= #include <avr/io.h>

#define F_CPU 8000000UL #include <util/delay.h> #include <avr/interrupt.h> void init_int(void); ISR(TIMER1_OVF_vect) { unsigned char i; for (i=0;i<2;++i) { PORTA=0x0F; _delay_ms(500); PORTA=0xF0; _delay_ms(500); } TIFR=(1<<TOV1); TIMSK=0b000000; TCNT1H=0x48; // (0xFFFF + 0x0001 - 0x48E5) = OCR1A TCNT1L=0xE5; } int main(void) { init_int(); DDRA=0xFF; while (1) { PORTA = 0xFF; _delay_ms(500); PORTA = 0b10101010; _delay_ms(500); TIMSK=0b000100; } return 0; } void init_int(void) { TIMSK=0b000000; TCCR1A=0; TCCR1B=0b00000101; TCNT1H=0x48; TCNT1L=0xE5; sei(); } //=========================================================================================================

(17)

Laporan Praktikum - Laboratorium Dasar Teknik Elektro – STEI ITB 17

//========================================================================================================= //Tugas 2D1

//========================================================================================================= #include <avr/io.h>

#define F_CPU 8000000UL #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(); 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; } //=========================================================================================================

(18)

Laporan Praktikum - Laboratorium Dasar Teknik Elektro – STEI ITB 18

//========================================================================================================= //Tugas 2D2

//========================================================================================================= #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 = 0x0A; _delay_ms(500); PORTA = 0x55; _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; } //=========================================================================================================

Gambar

Gambar 2.2 Hasil Percobaan II.A.1
Gambar 2.6 Hasil Percobaan II.B.1
Gambar 2.11 Flowchart Percobaan II.C  Analisis: STARTPORTA is set as OUTPUTinit_tim()PORTA = 0xAAIs 6 times?YESPORTA = 0x55Delay() is set at 6 sNO START PORTA is set as OUTPUTinit_int()PORTA = 0xFF500 ms delaysPORTA = 0xAA500 ms delays PORTA = 0x0F500 ms d
Gambar 2.12 Hasil Percobaan II.D.1
+3

Referensi

Dokumen terkait

Analisis ragam persentase nlortalitas telur iltan Inas terkoreltsi pada althir percobaan penentuan nilai ECo-5 detilt papain kasar .... Prosedur penghitungan ECo-5 detik

Data pada percobaan osilasi cairan dan ayunan matematis dapat dibandingkan bahwa data yang didapat dari percobaan secara manual dan dengan alat praktikum secara digital

Dari hasil percobaan ke 3 didapat bahwa waktu pengadukan paling optimum adalah 35 detik dengan berat endapan mencapai 3,19% dan kadar air yang hilang 0,72%.Dari hasil

Kondisi padat 2 : siklus optimum atau cycle time yang diperoleh pada phase I dan II sebesar 39 detik dan besar nilai nyala lampu hijaunya yaitu 9 detik untuk phase I dan 20

Kondisi padat 1 : siklus optimum atau cycle time yang diperoleh pada phase I dan II sebesar 37 detik dan besar nilai nyala lampu hijaunya yaitu 13 detik untuk phase I dan 14

delay dilihat berdasarkan waktu melalui serial monitor, lalu untuk jarak diukur antara handphone dengan alat ESP32 yang didapat saat menyalakan atau mematikan lampu

Untuk penentuan time delay pada unit III dan VI sama dengan penentuan time delay pada unit I dan II yaitu 10 detik, waktu tunda ini digunakan untuk mencegah operasi relay selama

Untuk variabel delay dan jitter yang diuji, terlihat bahwa total delay dan jitter yang didapat dari penelitian dengan menggunakan algoritma Static Round-Robin