Anda di halaman 1dari 19

Timer/Counter

Apa itu timer/counter?


• Merupakan suatu pencacah(counter) yang
bisa menghitung naik/turun
• Pencacah berupa register 8 bit/16 bit
• Nilai cacahan yg tersimpan di register
tersebut akan naik/turun pada transisi naik
(positive edge) clock masukan
Gambaran timer

enable
Clock in

Register pencacah Clock


internal

mux

Clock
eksternal

select
Timer dan counter
• Timer : clock untuk timer berasal dari clock
yang dipakai oleh sistem (internal).Jika
kita menggunakan kristal, clock untuk
timer bersumber dari kristal. Timer
biasanya digunakan untuk pewaktuan
• Counter: clock berasal dari pin Tn(T0,T1
atau TOSC1-TOSC2). Digunakan untuk
mencacah event dari luar(mencacah pulsa
dsb)
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, untuk 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
2. Mode clear timer on compare match(CTC)
• TCNT0 akan count up dari suatu nilai
sampai mencapai nilai maks (< 0xFF)
• Nilai maks ini didefinisikan di register
OCR0
• Setelah mencapai nilai maks, TCNT0
akan reset kembali ke 0x00 dan bit OCF0
(output compare flag) akan set
• Interupsi akan terjadi jika di-enable
Mode Operasi Timer 0
3. Fast PWM mode
4. Phase correct PWM

3 dan 4 akan dibicarakan pada pertemuan


berikutnya
Register TCNT0
Register TCCR0,bit WGM

• Bit WGM digunakan untuk memilih mode


operasi
Reg 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 dalam program
• Memakai timer 0 dalam mode
overflow,menggunakan interupsi
– Setting vektor interupsi, memberikan perintah RJMP
pada alamat vektor interupsi timer 0 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 (CS02 .. CS01)
– Meng-enable bit TOIE0 pada register TIMSK
– Meng-enable global interrupt (perintah SEI)
Timer 0 compare match
• Memakai timer 0 dalam mode compare
match,menggunakan interupsi
– Setting vektor interupsi, memberikan perintah RJMP
pada alamat vektor 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 (CS02 .. CS01)
– Meng-enable bit TOIE0 pada register TIMSK
– Meng-enable global interrupt (perintah SEI)
Contoh soal
• Buatlah sebuah tampilan pencacah naik
yang ditampilkan di LED pada PORTC.
Pencacah naik setiap 1 detik. Kristal yang
digunakan 4 MHz. Sistem juga
menampilkan variasi nyala LED pada
PORTB, yang timing-nya diatur dengan
delay register
Setting timer
• Misalnya diinginkan menggunakan timer 0 dalam mode normal
(overflow)
• timer dirancang overflow 0.01 detik sekali (100 Hz-biar frekuensi
tidak terlalu kecil)
• Karena frekuensi overflow cukup rendah, gunakan prescaler 1024,
jadi frekuensi xtal 4 MHz akan dibagi 1024 baru masuk ke pencacah
• F_pencacah=4 M/1024 = 3906.25 Hz
• Untuk mencapai 100 Hz harus dibagi 39
• Sehingga TCNT0 harus diisi dahulu dengan nilai sebesar 0xFF – 39
= 216, nilai ini juga harus diisikan ulang pada saat interupsi timer
• Timer 0 sudah bisa overflow tiap 0.01 detik, supaya bisa
menghasilkan 1 detik, pada rutin interupsi timer dilakukan operasi
increment register bantu

Anda mungkin juga menyukai