• Tidak ada hasil yang ditemukan

EL3214_2_13214036

N/A
N/A
Protected

Academic year: 2021

Membagikan "EL3214_2_13214036"

Copied!
16
0
0

Teks penuh

(1)

Laporan Praktikum - Laboratorium Dasar Teknik Elektro – STEI ITB 1

MODUL 02 Timer, Counter, Interrupt

Tsaqif Alfatan Nugraha (13214036) Asisten: Violla Gunnova

Tanggal Percobaan: 20/02/2017 EL3214-Praktikum Sistem Mikroprosessor

Laboratorium Dasar Teknik Elektro - Sekolah Teknik Elektro dan Informatika ITB

Abstrak

Praktikum modul dua sistem mikroprosesor akan

menjelaskan mengenani fungsi dari board arudion yakni

timer/counter dan interrupt. Timer/counter merupakan

sebuah fungsi di dalam arduino untuk menghitung waktu

yang telah ditempuh dari suatu proses. Sementara, interrupt

adalah inputan eksternal yang dapat merubah jalannya

program. Sama dengan seperti praktikum sebelumnya,

praktikan akan menggunakan software WINAVR dengan

menggunakan bahasa C.

Kata kunci: timer, counter, interrupt

1. P

ENDAHULUAN

Terdapat empat percobaan yang akan dilakukan oleh praktikan. Pertama, praktikan akan melakukan percobaan terkait delay dengan mengiakan timer/counter. Percobaan ini tidak akan menggunakan fungsi delay yang terdapat dalam AVR-gcc sehingga praktikan harus membuat prosedur dari fungsi delay terlebih dahulu. Kedua, praktikan akan melakukan percobaan terkait external clock sebagai counter. Dalam hal ini, program akan menggunakan interrupt dan interrupt yang masuk pada program akan dihitung dengan counter. Ketiga, praktikan akan mendesai program aplikasi interrupt dengan timer/counter. Jadi, program akan mengalami 2 fasa. Fasa pertama akan berubah ke fasa kedua setelah ada interrupt. Program tidak akan menggunakan interrupt eksternal, tapi interrupt akan terjadi setelah counter menghitung waktu yang diinginkan. Terakhir, praktikan akan mendesain program external interrupt. Terdapat dua interrupt yang dimiliki oleh program ini yang dapat mengubah jalannya program.

2. S

TUDI

P

USTAKA

2.1 K

ONFIGURASI

T

IMER

/C

OUNTER DAN

I

NTERRUPT

Deskripsi register Timer/Counter 8 Bit ( Timer/Counter 0 ) [1]

Bit 7 – FOC0 : Force Output Compare Bit 6, 3 – WGM01/0 : Waveform Generation Mode

Bit 5,4 – COM01/0 : Compare Match Output Mode

Bit 2,0 – CS02/0 : Clock Select Konfigurasi Mode Operasi [1]

Pengaturan perilaku pin OCO (misalnya untuk mode non – PWM [1]

Pengaturan sumber clock [1]

(2)

Laporan Praktikum - Laboratorium Dasar Teknik Elektro – STEI ITB 2

Bit 1 – OCIE0 : Timer/Counter 0 Output Compare Match Interrupt Enable

Bit 0 – TOIE0 : Timer/Counter 0 Overflow Interrupt Enable

Bit 1 – OCF0 : Output Compare Flag 0

Bit 0 – TOV0 : Timer/Counter0 Overflow Flag

2.2 K

ONFIGURASI

E

KSTERNAL

I

NTERRUPT

Bit 7 – INT1: External Interrupt Request 1 Enable Bit 6 – INT0: External Interrupt Request 0 Enable Bit 5 – INT2: External Interrupt Request 2 Enable

Bit 7 – INTF1: External Interrupt Flag 1 Bit 6 – INTF1: External Interrupt Flag 0 Bit 5 – INTF1: External Interrupt Flag 2

3. M

ETODOLOGI

ALAT DAN KOMPONEN

- Alat-alat yang digunakan selama prak-tikum ini:

- PC Desktop (1 unit) dengan software WinAVR - Kit (ATmega8535, Trainer Board)

- Kabel DB9 (1 buah) - Kabel serial (2 buah) 3.2. LANGKAH KERJA

Langkah awal adalah merangkai alat dan mengeset fuse

Lalu untuk semua percobaan konsep langkah kerjanya sama seperti diagram dibawah ini :

Rangkai kit sesuai dengan petunjuk yang ada di modul

Hubungkan kit dengan downloader lalu dengan PC

Membaca pengaturan fuse dengan Avrdude

Mengubah pengaturan fuse dengan Avrdude

Source code diketik pada WinAVR

Membuat makefile dengan menggunakan program MFile

Download program ke mikrokontroler

Run program, lalu amati hasilnya pada trainer board

(3)

Laporan Praktikum - Laboratorium Dasar Teknik Elektro – STEI ITB 3

4. H

ASIL DAN

A

NALISIS

II.A Delay dengan Timer/Counter II.A.1

Pada percobaan ini, praktikan akan membuat program yang menggunakan Timber/counter untuk fungsi delay. Berikut ini hasil percobaan dan Low chart dari program.

7 8 6 5 4 3 2 1 0

Berganti seletelah 1 detik kemudian

7 8 6 5 4 3 2 1 0

Pertama-tama register DDRA akan di set bernilai 0xFF sehingga port A akan bertindak sebagai output. Selanjutnya, program akan menggunakan prescalar 256 sehingga TCCR1B di set untuk memiliki bit 0b00001100. Nilai TCCR1 juga diset initial condition bernilai nol sehingga TCCR1A benrnilai nol. Program akan bergantian menyalakan LED dengan bit 0b00001111 dan bit 0b11110000 dengan delay satu detik. Praktikan akan menggunakan prosedur delay buatan sendiri dengan memanfaatkan fitur timer/counter. Pada algoritma prosedur delay, register TCNT 1 di set bernilai nol. TCNT merupakan register yang berfungsi untuk mencacah counter dari nilai nol hingga maksimum. Kemudian waktu yang diinginkan dalam delay adalah satu detik, maka nilai register OCR1A harus di set dengan banyaknya getaran yang dilakukan dalam satu detik di mana program menggunakan frekuensi 7372800Hz dan prescaler 256

𝑓𝑡𝑖𝑚𝑒𝑟 =

7372800

256 = 28800

Dengan kata lain, counter akan menghitung sebanyak 28800 kali tiap detik. Maka nilai OCR1A diset bernilai

2880010 = 708016

Setelah diset nilai compare match-nya (OCR1A) maka prosedur akan looping hingga menemui nilai OCR1A setelah itu program akan mematikan interrupt (disable).

Satu hal yang perlu diperhatikan pada program ialah penggunaan prosedur delay dan bukan menggunakan fungsi delay bawaan. Jika kita perhatikan, terdapat perbedaan antara prosedur delay yang dibuat pada program dan fungsi bawaan gcc. Perbedaannya tersebut ialah penggunaan clock. Jika menggunakan fungsi delay bawaan maka frekuensi clock yang digunakan ialah frekuensi CPU sementara untuk delay frekuensi yang digunakan bisa berbeda-beda. Selain itu, fungsi delay pada gcc bisa menghitung delay pada waktu yang diberikan hanya dengan merubah variabel fungsi sementara untuk prosedur delay pengubahan waktu delay yang diinginkan tidak bisa di dalam main program karena itulah ia merupakan prosedur. II.A.2

Pada percobaan A yang kedua, praktikan akan membuat program yang akan menyalakan LED dari 0x0F ke 0xF0 setelah x detik di mana untuk kelompok kami x bernilai 3 detik. Berikut ini hasil percobaan dan low chart program

7 8 6 5 4 3 2 1 0

Berganti seletelah 3 detik kemudian

7 8 6 5 4 3 2 1 0 END START DDRA = 0xFF PORTA 0X00 TCCR1A = 0 TCCR1B =0b00001100 1 PORTA=0x0F; Delay(); PORTA = 0XF0; Delay(); END START DDRA = 0xFF PORTA 0X00 TCCR1A = 0 TCCR1B =0b00001100 1 PORTA=0x0F; Delay(); PORTA = 0XF0; Delay();

(4)

Laporan Praktikum - Laboratorium Dasar Teknik Elektro – STEI ITB 4

Yang menjadi perbedaan dari program ini dengan program pada percobaan sebelumnya ialah nilai pengesetan OCR1A. OCR1A akan diset sebagai berikut.

𝑂𝐶𝑅1𝐴 =7372800𝑥3

256 = 86400

Karena nilai OCR1A memiliki nilai hexadecimal yang lebih dari 4 digit maka nilai prescaler harus diubah menjadi 1024, sehingga nilai OCR1A yang sebenarnya ialah

𝑜𝐶𝑅1𝐴 = 7372800𝑥3

1024 = 2160010 = 546016 dan nilai TCCR1B = 0b00001101 untuk mengeset prescaler yang bernilai 1024

Terlihat dari penjelasan di atas bahwa penggunaan prescaler dalam suatu program sangatlah penting. Nilai prescaler yang berbeda dapat menyebabkan nilai compare match yang berbeda. Prescaler sendiri memiliki fungsi membagi clock. Nilai hasil pembagian ini yang kemudian akan menjadi frekuensi dari timer. Dengan demikian, frekuensi timer tidak akan secepat frekuensi clock, namun lebih kecil dari frekuensi clock.

II.B External Clock Sebagai Counter II.B.1

Pada percobaan kali ini, program akan dibuat dengan memanfaatkan clock sebagai timer. Tombol interrupt push button akan dijadikan acuan. Counter akan menghitung sebanyak beberapa kali tombol ini ditekan dan setelah penekanan tersebut program utama akan berubah. Berikut ini hasil percobaan dan flow chart program

7 8 6 5 4 3 2 1 0

↑ Program Default

Berganti seletelah 2 kali penekanan tombol INT ↓ Program saat OCR>TNT, berlangsung

selama 0,5 detik

7 8 6 5 4 3 2 1 0

Pertama-tama program ini akan mengeset agar clock yang digunakan ialah clock external. Bit TCCR0 di set bernilai 0b00000110. Hal ini menunjukkan bahwa sumber external clock diambil pada pin T0(yang dihubungkan dengan IS1). Clock berada pada keadaan falling edge. Hal ini berarti jika tombol interrupt selesai ditekan, program baru menganggap itu sebagai clock. Dengan kata lain, jika tombol ditekan tanpa dilepas, program tidak menganggap itu sebagai clock. Program ini akan membandingkan nilai TCNT0 dan 0CR0. Selama kondisi clear maka nilai port A akan selalu bernilai 0b10101010. Kondisi clear sendiri berarti bahwa nilai TCNT0 tidak melebihi dari nilai 0CR0. Ketika nilai TCNT0 membesar hingga melebihi 0CR0 yakni pada saat bernilai 125 maka kondisi tidak clear lagi sehingga PORTA akan diset untuk bernilai 0b01010101 dan nilai TNCT0 akan di reset.

II.B.2

Pada percobaan B yang kedua, program akan dibuat sehingga LED menyala semua selama x detik telah tombol ditekan selama x kali. Kelompok kami akan menggunakan nilai x=3. Berikut ini hasil percobaan dan flow chart program. 7 8 6 5 4 3 2 1 0 ↑ Program Default END START TCCR0 = 0b00000110; TIMSK = (0<<0C1E0); DDRA= 0XFF; 1 TCNT0 = 123; 0CR0 = 124; bit_is_clear PORTA= 0b10101010 TIFR |= _BV(OCF0); PORTA = 0b01010101 _delay_ms(500);

(5)

Laporan Praktikum - Laboratorium Dasar Teknik Elektro – STEI ITB 5

Berganti seletelah 3 kali penekanan tombol INT ↓ Program saat OCR>TNT, berlangsung

selama 3 detik

7 8 6 5 4 3 2 1 0

Yang berbeda dari program B.2 ialah nilai compare 0CR0 yang diperlukan. Praktikan mengeset nilai 0CR0 menjadi 125 sehingga lampu LED akan menyala selama 3 detik. Sementara , program ini juga menggunakan prosedur delay yang telah dibuat pada percobaan A di mana nilai 0CR1A bernilai 5460.

II.C Aplikasi Interrupt dengan Timer/Counter Pada percobaan ini, program akan melakukan interrupt setelah timer/counter telah menghitung waktu tertentu. Mode timer yang digunakan ialah mode normal. Dengan demikian, timer akan memberikan interrupt pada keadaan overflow. II.C.1

Program ini akan memberikan interrupt setelah melampaui satu detik. Hasil percobaan dan flowchart dari program dapat dilihat sebagai berikut.

Flowchart ISR (atas) & Flowchart program utama

7 6 5 4 3 2 1 0

↑ ↓ Berganti-gantian selama 100ms

7 6 5 4 3 2 1 0

↓ Tiap 1 detik mengalami interupsi dan LED nyala semua selama 200ms

7 6 5 4 3 2 1 0 END START TCCR0 = 0b00000110; TIMSK = (0<<0C1E0); DDRA= 0XFF; 1 TCNT0 = 123; 0CR0 = 125; bit_is_clear PORTA= 0b10101010 TIFR |= _BV(OCF0); PORTA = 0b01010101 Delay;

(6)

Laporan Praktikum - Laboratorium Dasar Teknik Elektro – STEI ITB 6

Pada algoritma program yang mengandung interrupt terdapat suatu prosedur ISR. ISR(Interrupt Service Routine) merupakan sebuah prosedur yang akan dijalankan ketika terjadi interrupt. Program utama akan ditinggalkan sementara ISR akan dijalankan.

Algoritma ISR baru dijalankan apabila TIMER1 mengalami overflow. Nilai cacah dari timer1 akan disimpan dalam TCNT1. Program diinginkan untuk interrupt terjadi selama 1 detik. Maka kita harus mengeset nilai awal dari TCNT sehingga timer akan mengalami interrupt setelah 1 detik. TCNT1(16bit) akan mengalami overflow setelah nilainya mencapai 0xFFFF (6533510). Dengan nilai ini, kita dapat mengetahui berapa nilai timer awal yang harus di set sehingga terjadi overflow pada saat 1 detik.

𝑇𝐶𝑁𝑇𝑎𝑤𝑎𝑙= 𝐹𝐹𝐹𝐹16 + 1 −

1𝑑𝑒𝑡𝑖𝑘 ∙ 7372800𝐻𝑧 1024 (𝑝𝑟𝑒𝑠𝑐𝑎𝑙𝑒𝑟) 𝑇𝐶𝑁𝑇𝑎𝑤𝑎𝑙 = 6553610 − 7200 = 58336 = 𝐸3𝐸016 Oleh karena itu, TCNT1H bernilai 0xE3 DAN TCNT1L bernilai 0xE0. Hal yang perlu diperhatikan kembali ialah TCNT1H dan TCNT1L tidak hanya diset di awal saja namun di akhir ISR juga sehingga ketika prosedur ISR selesai , TCNT1 sudah bernilai 0xE3E0 kembali.

Pada percobaan ini menggunakan mode timer normal. Jika kita perhatikan terdapat perbedaan antara mode timer dan mode CTC. Pada mode CTC, dilakukan perbandingan antara nilai timer saat tertentu dengan suatu nilai pembanding. Interupsi terjadi ketika nilai timer (TCNT) sudah melebihi nilai pembanding itu (OCR). Sementara pada mode normal, interupsi terjadi ketika timer sudah mengalami overflow. Pada register TCNT, overflow terjadi saat nilainya sudah melebihi 0xFF. II.C.2

Pada percobaan II.C.2, program akan diminta untuk melakukan interrupt setelah x detik, di mana untuk kelompok kami x bernilai 3. Berikut ini hasil pengamatan dan flowchart dari program

7 6 5 4 3 2 1 0

↑ ↓ Berganti-gantian selama 100ms

7 6 5 4 3 2 1 0

↓ Tiap 5 detik mengalami interupsi dan LED nyala semua selama 200ms

7 6 5 4 3 2 1 0

Yang menjadi perbedaan antara program ini dengan program II.C.1 ialah nilai counter yang diperlukan untuk mengalami interrupt yakni bernilai 5 detik. Sehingga nilai TCNT1 awal harus diset kembali sebagai berikut.

𝑇𝐶𝑁𝑇𝑎𝑤𝑎𝑙 = 𝐹𝐹𝐹𝐹16 + 1 −

3𝑑𝑒𝑡𝑖𝑘 ∙ 7372800𝐻𝑧 1024 (𝑝𝑟𝑒𝑠𝑐𝑎𝑙𝑒𝑟) 𝑇𝐶𝑁𝑇𝑎𝑤𝑎𝑙= 4393610= 𝐴𝐵𝐴016

Sehingga TCNT1H bernilai 0xAB dan TCNT1L bernilai 0xA0.

II.D External Interrup

Pada program ini, kita akan menggunakan external interrupt untuk mengalihkan program utama. External interrupt yang akan digunakan ialah INT0 dan INT1. Beberapa register yang

(7)

Laporan Praktikum - Laboratorium Dasar Teknik Elektro – STEI ITB 7

dibutuhkan antara lain seperti MCUCR, GICR, GIFCR.

II.D.1

Program pada percobaan II.D.1 diharapkan dapat bergantian-gantian selama 250ms untuk menyalakan lampu LED 0b10101010 dan 0b01010101 pada program utama. Kemudian jika interrupt diberikan, lampu LED menyala berurutan satupersatu dari kanan ke kiri. Berikut ini hasil percobaan dan flowchart program.

Flowchart program utama

Flowchart program Interrupt

7 6 5 4 3 2 1 0

↑ ↓ Berganti-gantian selama 500ms

7 6 5 4 3 2 1 0

↓ Ketika INT0 aktif

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 7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0

Sumber interupsi yang digunakan ialah INT0 sehingga pada kurung kurawal ISR terisi (INT0_vect). Selain itu, ada beberapa register lain yang juga perlu diatur nilainya agar kita bisa menggunakan external interrupt. Nilai register yang perlu diatur nilainya adalah sebagai berikut.

 GICR harus bernilai 0x40 atau 0b01000000. Dengan nilai ini, maka INT0 (bit 6) diaktifkan sebagai external interrupt.

 MCUCR harus bernilai 0x02 atau 0b00000010. Dengan nilai ini, maka ISC01 (bit 1) bernilai 1 dan ISC00 (bit 0) bernilai 0. Pengaturan seperti ini menyebabkan interupsi dari INT0 akan aktif ketika INT0 mengalami falling edge.

 GIFR harus bernilai 0x40 atau 0b01000000. Dengan nilai ini, maka interrupt flag dari INT0 (bit 6) akan aktif.

Dengan pengaturan register demikian, maka setiap kali tombol IS1 ditekan (falling edge) akan terjadi interupsi dan algoritma pada ISR akan dijalankan.

Selanjutnya jika analisis lebih dalam, apakah yang terjadi jika external interrupt dan timer interrupt aktif dalam keadaan yang sama ? Bila timer interrupt dan external interrupt terjadi secara bersamaan, maka mikrokontroler akan mendahulukan external interrupt. Hal ini dapat dilihat dari urutan prioritas yang ada pada END START sei(); DDRA = 0xFF 1 PORTA=0b10101010; _delay_ms(500); PORTA = 0b01010101; _delay_ms(500); MCUCR=0x02; MCUSCR = 0x00; GICR = 0x40 GIFR = 0X40; END START PORTA = i; _delay_ms(250); i=(i<<1)|(i>>7); n++; n<8 i=0x01; n=0;

(8)

Laporan Praktikum - Laboratorium Dasar Teknik Elektro – STEI ITB 8

ATMega. Pada tabel prioritas ATMega, external interrupt memiliki prioritas yang lebih tinggi dibandingkan timer interrupt sehingga external interrupt-lah yang akan dieksekusi ketika timer interrupt dan external interrupt terjadi secara bersamaan.

II.D.2

Pada percobaan ini, external interrupt yang digunakan adalah dua buah, yakni dari INT0 dan INT1. INT0 dihubungkan dengan IS1 dan INT1 dihubungkan dengan IS3. Pada program utama, LED diharapkan berkedip (mati -menyala) secara bersamaan setiap 500 ms. Ketika ada interupsi dari INT0, maka nyala LED akan berkedip membentuk 0x99 dan 0x66 secara bergantian setiap 500 ms. Ketika ada interupsi dari INT1, maka nyala LED akan berkedip membentuk biner dari 2 digit terakhir NIM praktikan pertama dan biner dari 2 digit terakhir NIM praktikan kedua secara bergantian setiap 500 ms. 2 digit terakhir NIM praktikan pertama adalah 18, maka nyala LED membentuk 0b00010010. NIM praktikan kedua adalah 19, maka nyala LED membentuk 0b00010011. Flowchart algoritma dan hasil percobaan ini adalah sebagai berikut.

Flowchart Program Utama

Flowchart Program Interrupt INT0

Flowchart Program Interrupt INT1

7 6 5 4 3 2 1 0

↑ ↓ Berganti-gantian selama 500ms

7 6 5 4 3 2 1 0

↓ Ketika INT0 aktif

7 6 5 4 3 2 1 0

↑ ↓ Berganti-gantian selama 500ms

7 6 5 4 3 2 1 0

↓ Ketika INT1 aktif

7 6 5 4 3 2 1 0

↑ ↓ Berganti-gantian selama 500ms

7 6 5 4 3 2 1 0

Pada tugas ini, modifikasi yang dilakukan terletak pada algoritma program utama, algoritma ISR untuk interupsi INT0, dan penambahan algoritma ISR untuk interupsi INT1. Pada program utama, nilai PORTA diisi 0xFF dan 0x00 yang diberi delay 500 ms di antaranya. Pada ISR INT0, PORTA diisi END START sei(); DDRA = 0xFF 1 PORTA=0b11111111; _delay_ms(500); PORTA = 0b00000000; _delay_ms(500); MCUCR=0x0A; MCUSCR = 0x00; GICR = 0xC0 GIFR = 0XC0; END START PORTA = 0x99; _delay_ms(500); PORTA=0x66; _delay_ms(500); END START PORTA = 0x24; _delay_ms(500); PORTA=0x25; _delay_ms(500);

(9)

Laporan Praktikum - Laboratorium Dasar Teknik Elektro – STEI ITB 9

dengan 0x99 dan 0x66 yang diberi delay 500 ms di antaranya. Pada ISR INT1, PORTA diisi dengan 0x12 dan 0x13 yang diberi delay 500 ms di antaranya.

Selain itu, modifikasi juga dilakukan pada nilai register GICR, MCUCR, dan GIFR. Perubahan yang dilakukan adalah sebagai berikut.

 GICR diubah menjadi 0xC0 atau 0b11000000. Dengan nilai ini, maka INT1 (bit 7) ikut diaktifkan (sebelumnya belum aktif).

 MCUCR diubah menjadi 0x0A atau 0b00001010. Dengan nilai ini, maka ISC10 (bit 2) bernilai 0 dan ISC 11 (bit 3) bernilai 1. Menurut datasheet, dengan pengaturan seperti ini, maka interupsi dari INT1 akan terjadi ketika INT1 falling edge.

 GIFR harus diubah menjadi 0xC0. Dengan nilai ini, maka flag dari INT1 (bit 7) juga ikut diaktifkan.

Dengan modifikasi seperti di atas, maka nyala LED akan sesuai dengan yang diharapkan.

5. K

ESIMPULAN

Berdasarkan percobaan yang telah dilakukan praktikan, dapat disimpulkan beberapa poin penting sebagai berikut.

 Mikrokontroller ATMega8535 mempunyai fasilitas timer/counter dan interrupt.

 Terdapat beberapa register penting dalam penggunaan timer/counter yakni antara lain seperti TCCR, TCNT, OCR,TIMSK, dan TIFR

 TCCR merupakan register timer yang sedang digunakan, apakah itu timer 0, timer 1, timer2.

 TCNT merupakan register pencacah dari fungsi timer/counter

 OCR merupakan register pembanding terhadap TCNT jika ingin dilakukan interrupt.

 Terdapat dua mode timer yakni mode CTC dan mode normal.

 Selain itu, terdapat juga beberapa register penting dalam penggunaan interrupt yakni MCUCR, MCUSCR, GICR, GIFCR.

D

AFTAR

P

USTAKA

[1]

Jackstar H. S., Panduan Penulisan Laporan, Jacks

Publishing, Bandung, 2008.

[2]

Laboratorium Dasar Teknik Elektro, Petunjuk

Praktikum Sistem Mikroprosessor, ITB,Bandung,

2017.

(10)

Laporan Praktikum - Laboratorium Dasar Teknik Elektro – STEI ITB 1 0

Lampiran

TugasA1.c:

#include <avr/io.h>

void init_tim(void);

void Delay(void);

int main() { DDRA = 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);

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

}

Tugas A2.c

#include <avr/io.h>

void init_tim(void);

void Delay(void);

int main() {

DDRA = 0x00; init_tim(); while (1) {

(11)

Laporan Praktikum - Laboratorium Dasar Teknik Elektro – STEI ITB 11 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);

// penentuan nilai awal timer TCNT1H = 0;

TCNT1L = 0;

// penentuan nilai compare untuk delay 3 detik OCR1AH = 0x54;

OCR1AL = 0x60;

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

}

Tugas B1.c

#include <avr/io.h> #include <util/delay.h> #define F_CPU 7372800UL

void init_tim(void);

int main() { DDRA = 0xFF; init_tim(); 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;

(12)

Laporan Praktikum - Laboratorium Dasar Teknik Elektro – STEI ITB 12 _delay_ms(500); //_delay_ms(6000); } return 0; }

void init_tim(void) {

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

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

}

TugasB2.c

#include <avr/io.h> #include <util/delay.h> #define F_CPU 7372800UL

void init_tim(void);

int main() { DDRA = 0xFF; init_tim(); while (1) {

// penentuan nilai awal timer TCNT0 = 123;

// penentuan nilai compare hingga 3 kali pemencetan interrupt OCR0 = 125;

// menanti compare match

while (bit_is_clear(TIFR, OCF0)) { PORTA = 0b10101010; } // meng-nol-kan flag TIFR |= _BV(OCF0); PORTA = 0b01010101; _delay_ms(500); //_delay_ms(6000); } return 0; }

void init_tim(void) {

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

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

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

TCCR1B = 0b00001101;

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

(13)

Laporan Praktikum - Laboratorium Dasar Teknik Elektro – STEI ITB 13

}

void Delay(void) {

// overflow interrupt enable TIMSK |= _BV(TOIE1);

// penentuan nilai awal timer TCNT1H = 0;

TCNT1L = 0;

// penentuan nilai compare untuk delay 3 detik OCR1AH = 0x54;

OCR1AL = 0x60;

// 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); } TugasC1.c #include <avr/io.h> #include <util/delay.h> #include <avr/interrupt.h> #define F_CPU 7372800UL // 8MHz

void init_int(void); ISR(TIMER1_OVF_vect) { PORTA = 0xFF; _delay_ms(200); TIFR = (1<<TOV1); TCNT1H = 0xE3; TCNT1L = 0xE0; } int main() { 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; TCNT1H = 0xE3; TCNT1L = 0xE0; sei();

(14)

Laporan Praktikum - Laboratorium Dasar Teknik Elektro – STEI ITB 14 } TugasC2.c #include <avr/io.h> #include <util/delay.h> #include <avr/interrupt.h> #define F_CPU 7372800UL // 8MHz

void init_int(void); ISR(TIMER1_OVF_vect) { PORTA = 0xFF; _delay_ms(200); TIFR = (1<<TOV1); TCNT1H = 0xAB; TCNT1L = 0xA0; } int main() { 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; TCNT1H = 0xAB; TCNT1L = 0xA0; sei(); } TugasD1.c #include <avr/io.h> #include <util/delay.h> #include <avr/interrupt.h> #define F_CPU 7372800UL // 8MHz

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

(15)

Laporan Praktikum - Laboratorium Dasar Teknik Elektro – STEI ITB 15 } } int main() { init_Ext_Int(); sei(); DDRA = 0xFF; while (1) { PORTA = 0b10101010; _delay_ms(100); PORTA = 0b01010101; _delay_ms(100); } return 0; }

void init_Ext_Int(void) { MCUCR = 0x02; MCUCSR = 0x00; GICR = 0x40; GIFR = 0x40; } TugasD2.c #include <avr/io.h> #include <util/delay.h> #include <avr/interrupt.h> #define F_CPU 7372800UL // 8MHz

void init_Ext_Int(void); ISR(INT0_vect) { PORTA = 0x99; _delay_ms(500); PORTA = 0x66; _delay_ms(500); } ISR(INT1_vect) { PORTA = 0x24; _delay_ms(500); PORTA = 0x27; _delay_ms(500); } int main() { init_Ext_Int(); sei(); DDRA = 0xFF; while (1) { PORTA = 0xFF; _delay_ms(500); PORTA = 0x00; _delay_ms(500); } return 0; }

(16)

Laporan Praktikum - Laboratorium Dasar Teknik Elektro – STEI ITB 16 void init_Ext_Int(void)

{ MCUCR = 0x0A; MCUCSR = 0x00; GICR = 0xC0; GIFR = 0xC0; }

Referensi

Dokumen terkait

Produksi biji jarak pagar tidak dipengaruhi oleh irigasi mulai tahun II sehingga tanaman jarak pagar tidak memerlukan tambahan pengairan selama musim kemarau dan dapat

Saluran ini merupakan faktor luar yang berpengaruh dalam proses komunikasi seperti intonasi suara, sikap tubuh dan sebagainya semuanya akan dapat memberikan

Struktur novel dengan judul Perempuan Berkalung Sorban hasil karya Abidah El- Khalieqy adalah tema dalam novel PBS secara umum pengarang ingin mengungkapkan bahwa perlunya

• kembali ke menu system plugins (atau dengan mengklik menu system plugins di bagian atas navigasi)klik menu block plugin, cari kata statistik pengunjung (Custom Block Plugin)

(salinan); 7) Kuitansi yang sudah dilegalisir berikut rinciannya sehubungan dengan Rawat Inap; 8) Dokumen lainnya yang dianggap perlu oleh Penanggung. Untuk

Eksosfer : Lapisan udara ddengan ketinggian lebih dari 1000 km dari permukaan bumi, pada lapisa ini molekul-molekul yang ada dapat meninggalkan bumi masuk ke

&#34;anin nin terko terkondens ndensasi asi 4cond 4condensed ensed tannin tannins6 s6 biasany biasanya a tidak tidak dapat dapat dihid dihidrolisi rolisis, s, tetapi