Anda di halaman 1dari 37

TIMER DAN COUNTER

SISTEM TERTANAM
(TEK 304)
Timer & Counter

➢Timer & Counter → fitur tertanam pada


mikrokontroler AVR yang memiliki fungsi terhadap
waktu.
➢Fungsi Timer → penentuan kapan program tersebut
dijalankan,
➢Juga untuk mengatur PWM, ADC, dan Oscillator.
➢Prinsip kerja timer → membagi frekuensi (prescaler)
pada clock yang terdapat pada mikrokontroler
sehingga timer dapat berjalan sesuai dengan
frekuensi yang di kehendaki.
Timer
Fungsi waktu yang sumber clocknya berasal dari clock
internal (kristal)
➢ Jam digital → sumber clocknya bisa menggunakan
crystal oscillator

Counter
Fungsi perhitungan yang sumber clocknya berasal dari
external (pin Tn (T0, T1 atau TOSC1 – TOSC2))
➢ Penghitung barang pada konveyor → sumber clocknya
berasal dari sensor yang mendeteksi barang tersebut
Tujuan Penggunaan Timer & Counter

➢ Melaksanaan tugas secara ber-ulang


➢ Mengendalikan kecepatan motor DC
(PWM)
➢ Melakukan perhitungan (Counter)
➢ Membuat penundaan waktu (delay)
Timer & Counter
ATMEGA 16 memiliki 3 buah timer yaitu:
- timer 0 (8bit),
- timer1 (16bit),
- dan timer 2 (8bit).

Register lengkapnya bisa dibaca pada datasheet.


Yang akan dibahas adalah timer 0(8bit) dan
timer1 (16 bit).
Timer Register

Untuk dapat melakukan manipulasi timer, terlebih dahulu harus


mengetahui fungsi dari masing-masing register.

➢ TCCRx (Timer/Conter Control Register),


➢ TCNTx (Timer/Counter Register)
➢ OCRx (Output Compare Register)
➢ ICRx (Input Capture Register)
➢ TIMSKx (Timer/Counter Interrupt Mask Register)
➢ TIFRx (Timer/Counter Interrupt Flag Register)
Sumber Clock untuk Timer

• Langsung terhubung ke clock sistem


(f_clk)
• Lewat prescaler (pembagi)
- f_clk/8
- f_clk/64
- f_clk/256
- f_clk/1024
Timer 0
➢ Timer 8 bit
➢ Register yang digunakan:
✓ TCNT0 → register pencacah, menampung nilai yang
dicacah
✓ TCCR0 → register kontrol, memilih mode operasi,
memilih prescaler
✓ OCR0 → register untuk menentukan nilai maks
pada mode operasi compare
✓ TIMSK → register untuk meng-enable / disable dan
memilih interupsi timer (digunakan juga di timer1 dan
2)
✓ TIFR → register flag yang menandai terjadinya suatu
interupsi timer (digunakan juga di timer1 dan 2)
Mode Operasi Timer 0

Mode Normal

- Register TCNT0 count up dari suatu nilai


sampai mencapai nilai 0xFF kemudian restart
ke nilai 0x00
- Peristiwa restart itu disebut overflow
- Pada saat overflow, bit TOV0 akan logika 1 dan
mengakibatkan interupsi (jika interupsi di-
enable)
Mode Operasi Timer 0

Mode clear timer compare match (CTC)

- TCNT0 akan count up dari suatu nilai sampai


mencapai nilai maks (<= 0xFF)
- Nilai maks didefinisikan di register OCR0
- Setelah mencapai nilai maks, TCNT0 akan reset
kembali ke 0x00 dan bit OCF0 akan set
- Interupsi akan terjadi jika di-enable
Register Timer
Register TCNT0
Register TCCR0, bit WGM

Bit WGM digunakan untuk memilih mode operasi


Register TCCR0 bit COM

Digunakan untuk konfigurasi mode CTC


(compare match)
TCCR0 bit CS
Untuk memilih sumber clock dan prescaler
Output Compare Register (OCR0)
Digunakan untuk menyimpan nilai ‘compare’ yang
akan selalu dibandingkan dengan nilai TCNT0 pada
mode compare match
Timer interrupt mask register
Digunakan untuk aktivasi interupsi timer, yang
digunakan untuk timer 0 hanya bit 0 dan 1
Memakai Timer 0 pada Program

Memakai timer 0 dalam mode overflow, menggunakan


interupsi
- Setting interupsi, memberikan perintah pada alamat
interupsi – overflow, yaitu alamat 0x009
- Inisialisasi: mengisi nilai awal TCNT0
- Setting TCCR0 untuk setting mode operasi overflow
(WGM00=0, WGM01=0) dan memilih sumber clock
dan prescaler (SC02 .. CS01)
- Meng-enable bit TOIE0 pada register TIMSK
- Meng-enable global interrupt (perintah SEI)
Timer 0 compare math

Memakai timer 0 dalam mode compare match,


menggunakan interuppsi
- Setting interupsi, memberikan perintah pada alamat
interupsi timer 0 overflow, yaitu alamat 0x013
- Inisialisasi: mengisi nilai awal TCNT0 dan mengisi nilai
OCR0
- Setting TCCR0 untuk setting mode operasi overflow
(WGM00=0, WGM01=1) dan memilih sumber clock
dan prescaler (SC02 .. CS01)
- Meng-enable bit TOIE0 pada register TIMSK
- Meng-enable global interrupt (perintah SEI)
Contoh penggunaan prescaler :
• Suatu mikrokontroler menggunakan crystal dengan
frekuensi 8 MHz dan timer yang digunakan adalah Timer 1
(16 Bit) maka maksimum waktu Timer yang bisa dihasilkan
adalah :
TMAX = 1/fCLK x (FFFFh + 1)
= 0.125 µs x 65536
= 0.008192 s

• Untuk menghasilkan waktu Timer yang lebih lama dapat


menggunakan prescaler 1024, maka waktu Timer yang bisa
dihasilkan adalah :

TMAX = 1/fCLK x (FFFFh+1) x N


= 0.125 µs x 655536 x 1024
= 8.388608 s
Perhitungan timer 0 (8 bit)
Ttimer0 = Tosc*(256-TCNT0)*N → (8 Bit = 256 ≈ 2^8)

Dengan cara membuat timer selama 0.01 detik lalu dilakukan perulangan
sebanyak 100 kali sehingga akan menghasilkan waktu 1 detik (0.01 detik x 100
kali = 1 detik).

Contoh penggunaan untuk timer 0 dengan crystal 12 MHz


dan menggunakan skala clock 1024 maka menghasilkan :
Tosc = 1/Fosc = 1/12 = 0,083
0.01 = 0.083*(256-TCNT0)*1024
TCNT = 128= 8A (Hexadesimal)
Berdasarkan perhitungan tersebut di
dapatkan 8A, maka nilai tersebut
harus di inputkan ke register TCNT0
agar timer0 bernilai 1 detik. Berikut
ini contoh penggunaan nya pada
Codevision AVR :
Perhitungan timer 1 (16 bit)
Ttimer 1 = Tosc*(65536-TCNT1)*N →(16 Bit = 65536 ≈ 2^16)

Contoh penggunaan untuk timer 1 detik (Timer1 = 1 detik) dengan


crystal 12 MHz dan menggunakan skala clock 1024 maka akan
menghasilkan :

Tosc = 1/Fosc = 1/12 = 0,083


1 = 0.083*(65536-TCNT1)*1024
TCNT = 53818 = D23A (Hexadesimal)
Berdasarkan perhitungan tersebut di
dapatkan D23A, maka nilai tersebut
harus di inputkan ke register TCNT1 agar
timer 1 bernilai 1 detik. Berikut ini
contoh penggunaan nya pada Codevision
AVR :
Counter 0 & 1

➢Untuk konfigurasi counter 0 & 1 pada Codevision


AVR sama seperti konfigurasi Timer 0 dan 1.
➢Pada Counter 0, input berasal dari T0 atau PORT B
0 yang mampu mencacah input hingga 256 (8 Bit).
➢Pada Counter 1, input berasal dari T1 atau PORT B
1 yang mampu mencacah hingga 65536 (16 Bit).
Mode Operasi Timer

Ada tiga mode operasi timer pada microcontroller,


yakni sebagai berikut.
➢ Normal, hanya untuk mencacah, melakukan delay,
menghitung selang waktu
➢ PWM, phase correct, membentuk gelombang PWM
resolusi tinggi, berdasarkan operasi dual slope
➢ CTC (Clear Timer Compare Match), mengembalikan
nilai TCNT ke 0, saat nilainya telah sama dengan
nilai set point OCR
Timer Arduino

➢ Timer0, 8 bit, digunakan untuk function seperti delay(),


millis(), dan micros(), dengan mengubah konfigurasi Timer0
akan mempengaruhi function lainnya
➢ Timer1, 16 bit, biasa digunakan untuk aplikasi terkait
sensor (motor servo)
➢ Timer2, 8 bit, function tone() menggunakan Timer2

Terdapat juga Timer3, Timer4, dan Timer5, semuanya


16 bit, untuk board Arduino Mega.
Function dalam Arduino yang menggunakan timer
semisal
➢ delay()
➢ delayMicroseconds()
➢ millis()
➢ dan micros()
PWM dan Timer

➢ Dalam data sheet atau pin out microcontroller


(Arduino) terdapat PWM pin dengan nama seperti
OCRxA, OCRxB, atau OCRxC, dimana x adalah nomor
timer
➢ Untuk board Arduino Uno memiliki 3 timer dan 6 pin
output PWM. Kaitan antara timer dengan output
PWM sebagai berikut.
• Arduino pin 5 dan 6, dikendalikan oleh Timer0
• Arduino pin 9 dan 10, dikendalikan oleh Timer1
• Arduino pin 3 dan 11, dikendalikan oleh Timer2
Arduino Mega terdapat 6 timer dengan output 15
PWM, dengan konfigurasi sebagai berikut.

• Arduino pin 4 dan 13, dikendalikan oleh Timer0


• Arduino pin 11 dan 12, dikendalikan oleh Timer1
• Arduino pin 9 dan 10, dikendalikan oleh Timer2
• Arduino pin 2, 3, dan 5, dikendalikan oleh Timer3
• Arduino pin 6, 7, dan 8, dikendalikan oleh Timer4
• Arduino pin 46, 45, dan 44, dikendalikan oleh Timer5
Penggunaan Timer Overflow Untuk
LED Blinking
• Program led berkedip per 500 milliseconds.
• LED akan toggle (berubah kondisinya) setiap
terjadi interupsi timer overflow
• Nilai register timer di-set sedemikian rupa
sehingga menghasilkan waktu overflow per
500 milliseconds
➢ Timer 1 akan overflow setiap berapa
milliseconds ?
➢ Jelaskan perbedaan penggunaan
delay dan timer overflow !
Jam Digital Menggunakan Timer
▪ Program jam digital dengan memanfaatkan
fitur timer mikrokontroler.
▪ Timer akan dikonfigurasi sehingga terjadi
overflow setiap 1 detik.
▪ Tiap timer terjadi overflow, variabel detik, menit
dan jam akan di-update nilainya.
Counter Mode Falling Edge
Berfungsi untuk menghitung jumlah
penekanan switch pada input counter
Counter Mode Rising Edge
Berfungsi untuk menghitung jumlah
penekanan switch pada input counter

Kapankah nilai counter akan berubah ? Saat


switch ditekan atau dilepas ? Jelaskan
SELESAI

TERIMA KASIH

Anda mungkin juga menyukai