• Tidak ada hasil yang ditemukan

Interrupt Timer dan Counters

N/A
N/A
Protected

Academic year: 2018

Membagikan "Interrupt Timer dan Counters"

Copied!
48
0
0

Teks penuh

(1)

Sistem Tertanam

(2)

Bagian 1: Pendahuluan

• Interrupt = Interupsi (penyelaan / pemotongan) • Apa kaitannya dengan program?

• Apa keuntungannya menggunakan interrupt? • Seberapa pentingkah menggunakan interrupt?

(3)

Bagian 1: Pendahuluan

• Fungsi dalam arduino yang menggunakan interrupt • millis() dan micros()

• analogRead() dan analogWrite()

• Built-in library yang menggunakan interrupt • Tone library

(4)

Bagian 1: Pendahuluan

• Terdapat dua buah macam Interrupt: • Hardware Interrupt

• Timer Interrupt

• Apa perbedaan keduanya?

(5)

Bagian 2: Interrupt Timer

• Cara mainstream membuat program dengan periode tertentu? • Apa saja kerugian menggunakan cara tersebut?

(6)

Bagian 2: Interrupt Timer

• Timer bekerja dengan menghitung (0,1,2,3,...).

• Menambah 1 nilai per satu clock yang ada dalam variable counter. • Overflow terjadi saat nilai tersebut mencapai nilai maksimum dari

variable counter, dan nilai kembali menjadi 0

• Saat variable overflow kita dapat mendefinisikan Interrupt Service Routine (IST)

(7)

Bagian 2: Timer Interrupt

Nama

timer bits channel Atmega Pin Arduino Pin

(8)

Bagian 2: Timer Interrupt

• Timer interrupt sudah dipakai oleh fungsi dalam arduino • timer1 dan timer2 dipakai untuk analogWrite()

timer0 dipakai untuk millis() dan micros()

(9)

Bagian 3: Register Penting Timer Interrupt

Timer / Counter Control Register A : TCCRnA

Timer / Counter Control Register A : TCCRnB

Timer CouNT : TCNTn

Output Compare Register A : OCRnA

Output Compare Register B : OCRnB

(10)

Bagian 3: Register Penting Timer Interrupt

• Apa saja yang kegunaan register-register tersebut?

• Set-up mode untuk timer/counter

• Set-up parameter-parameter yang dibutuhkan

• Memilih bentuk gelombang (waveform) output kita

(11)
(12)
(13)

Bagian 3: Register Penting Timer Interrupt

• Apa saja yang kegunaan register-register tersebut?

• Set-up mode untuk timer/counter

• Set-up parameter-parameter yang dibutuhkan

• Memilih bentuk gelombang (waveform) output kita

(14)

Bagian 4: Detail Register TCCRnA

Bits

Built-in konstanta yang siap kita pakai untuk mengisi nilai register Register

Built-in variable yang langsung bisa kita pakai tanpa deklarasi

• COMnA1

• Bit COMnx, mengontrol behavior dari Output Compare Pins (OCnA, OCnB)

(15)
(16)

Bagian 4a: Mode Waveform

• Mode 1: Normal

• Mode 2: CTC (Clear Timer on Compare) • Mode 3: Fast PWM

(17)

Bagian 4a: Mode Waveform

(18)
(19)
(20)

Bagian 4: Detail Register TCCRnB

Presca

(21)

Bagian 4b: Prescaller

• Masih ingat prinsip kerja interrupt timer?

• Menghitung nilai (0,1,2,3,....) sampai TCNTn overflow.

• Saat overflow, ISR (Interrupt Service Routine) kita ditrigger dan dijalankan • Contoh sederhana!

• kita gunakan timer1 (besar TCNTn 16 bit)

(22)

Bagian 4b: Prescaller

• Anggap kita memiliki rutin untuk menyalakan LED di dalam ISR kita

• Coba tebak, seberapa cepat LED kita berkedip?

• Jawaban:

• Atmega memiliki 16MHz clock (16,000,000 cycle dalam 1 detik) • Timer1 memiliki nilai maksimum 65535 (16 bit)

• Atmega hanya membutuhkan 1/16,000,000 * 65536 = 0.0041 detik untuk berhitung dari 0 sampai 65525 dan membuat TCNT1 overflow

(23)

Bagian 4b: Prescaller

• Prescaller dapat mengurangi kecepatan hitung timer1 kita!

• Penambahan nilai TCNTn bisa diatur untuk tidak secepat kecepatan clock kita, tetapi setiap 1/n * kecepatan clock kita

• dimana n adalah prescaller yang kita inginkan

(24)

Bagian 4b: Prescaller

• Sekarang kita gunakan CS12:0 menjadi 101 (1024 prescalling) • Diketahui:

• Atmega memiliki 16MHz clock (16,000,000 cycle dalam 1 detik) • Timer1 memiliki nilai maksimum 65535 (16 bit)

• Atmega akan membutuhkan

1/(16,000,000 / 1024) * 65536 = 4.194 detik.

(25)

Bagian 4b: Prescaller

• Sekarang kita gunakan CS12:0 menjadi 100 (256 prescalling) • Diketahui:

• Atmega memiliki 16MHz clock (16,000,000 cycle dalam 1 detik) • Timer1 memiliki nilai maksimum 65535 (16 bit)

• Atmega akan membutuhkan

1/(16,000,000 / 256) * 65536 = 1.048 detik.

• Lumayan..

(26)

Bagian 4b: Prescaller

??????

(27)

Bagian 4b: Prescaller

• Kita membutuhkan Output Compare Register (OCRnA)

(28)

Bagian 4b: Prescaller

• Setiap penambahan nilai TCNTn, Atmega akan selalu

membandingkannya dengan OCRnA.

• Jika TCNTn sama dengan OCRnA maka komparator akan memberikan sinyal "match"

• Kemudian ISR kita dapat ditrigger!

(29)

Bagian 4b: Prescaller

(30)

Bagian 4b: Prescaller

(

target waktu

) = (resolusi waktu) * (

jumlah counter

+ 1)

• Diketahui:

• Atmega memiliki 16MHz clock (16,000,000 cycle dalam 1 detik) • Timer1 memiliki nilai maksimum 65535 (16 bit)

• Bit CS12:0 diset menjadi 101 (1024 prescalling)

• Tujuan:

• Timer setiap 1s

• Jawaban:

• 1s = 1/(16,000,000 / 1024) * (jumlah counter+1) • (jumlah counter+1) = 1s / 0.000064

• (jumlah counter+1) = 15625

(31)

Bagian 4b: Prescaller

• Dengan demikian nilai OCR1A yang harus ditetapkan adalah 15624

• Maka, LED kita akan berkedip tepat 1 detik sekali

(32)

Bagian 5: Contoh 1

• Mari buat program untuk menyalakan LED setiap 1 detik dengan menggunakan interrupt timer (gunakan timer1)

• Dari analisa kita sebelumnya, mari gunakan interrupt timer 1 dengan prescaller 1024.

(33)
(34)

Bagian 5: Contoh 1

• COM1A1:0 = 00

(35)

Bagian 5: Contoh 1

• COM1A1:0 = 00

• COM1B1:0 = 00

(36)

Bagian 5: Contoh 1

• COM1A1:0 = 00

• COM1B1:0 = 00

• WGM13:0 = 0100

(37)
(38)

Bagian 5: Contoh 1

void setup() {

pinMode(LEDPIN, OUTPUT);

(39)

Bagian 5: Contoh 1

void setup() {

pinMode(LEDPIN, OUTPUT);

cli(); //disable global interrupt TCCR1A = 0;

(40)

Bagian 5: Contoh 2

• Buat 500 ppr quadrature encoder simulator yang memberikan output sinyal quadrature keluar dari pin arduino dengan

menggunakan timer 0

(41)

Bagian 5: Contoh 2

• 500ppr quadrature dengan gerakan 10 rev/sec

• berarti 500ppr * 10 rev/sec = 5000pps (5 KHz)

(42)
(43)
(44)

Bagian 5: Contoh 2

• COM1A1:0 = 01

(45)

Bagian 5: Contoh 2

• COM1A1:0 = 01

• COM1B1:0 = 01

(46)

Bagian 5: Contoh 2

• COM1A1:0 = 01

• COM1B1:0 = 01

• WGM12:0 = 010

(47)
(48)

Bagian 5: Contoh 2

cli(); //disable global interrupt

Referensi

Dokumen terkait

data divisi data departemen setting nilai bobot bobot nilai data_profil_jabatan data_profil_karyawan hasil analisis profil_karyawan profil_jabatan karyawan jabatan

Untuk membandingkan dua bilangan, kita dapat melakukannya dengan cara membandingkan angka, urut dari nilai tempat yang terbesar.. Marilah kita

Dengan perintah "PUSH", kita menyimpan nilai register DX pada stack, kemudian pada perintah "POP" kita mangambil keluar nilai yang disimpan tersebut dari stack..

Jika kita membandingkan 1 Korintus 11 dengan 1 Korintus 14:24, kita menermukan bahwa konteks pembicaraan kedua bagian tersebut kemungkinan adalah sama yakni mengenai

Kuartil → Nilai yang membagi gugus data yang telah tersortir (ascending) menjadi 4 bagian yang sama besar.. Contoh 5: Tentukan

Tujuan penelitian ini antara lain: (1) meneliti nilai opsi Indonesia secara teoritis; (2) menentukan harga opsi Indonesia dengan tipe Eropa menggunakan Model

Amati dan catat hasil pengukuran pada table pengujian setelah mencapai nilai setting dengan membandingkan pengukuran yang terbaca pada Parameter Value (PV) dan output

Dari nilai-nilai Certainty Grid yang telah kita tentukan tersebut, maka kita anggap halangan akan memberikan sebuah gaya tolak yang menuju ke arah robot (