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

Clock in

enable
Clock internal

Register pencacah 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