Mode Operasi timer0 pada ATmega 16/32/8535

Timer/Counter 0(nol) pada ATmega8/32/16/8535 berfungsi sebagai pencacah sumber  pulsa/clock baik dari dalam chip (timer) ataupun dari luar chip (counter) dengan kapasitas 8-bit atau 256 cacahan. Biasanya dapat digunakan sebagai timer/counter biasa, clear timer on Compare Match dan generator frekuensi kecuali pada ATmega8, serta counter pulsa eksternal.

blok diagram timer/counter0

Timer/counter 0(nol) ini memiliki clock prescaler hingga 10 bit. Pulsa yang masuk ke dalam TCNT0 diseleksi oleh aturan clock select register TCCR0.

Khusus pada ATmega8 bit yang tersedia hanya bit0, bit1 dan bit2 sehingga tidak memiliki PWM dan mode compare match. Pemilihan mode untuk timer(nol) ditentukan oleh bit WGM01 dan bit WGM00 pada register TCCR0.

mode pada timer0

1. Mode Normal

Mode normal terbagi dua yaitu normal overflow dan normal compare match.

1.1 Normal Overflow

Dalam mode normal ini timer0 mencacah hitungan ke atas (counting up) hingga mencapai 0xFF lalu akan terjadi overflow ketika hitungan kembali ke 0x00. Hal ini menyebabkan flag TOV0 secara otomatis menjadi set. Interupsi akan terjadi jika interupsi timer0 overflow diaktifkan. Nilai TCNT0 dapat ditentukan oleh programmer.

1.2 Normal Compare Match

Prinsip dasar normal overflow dan normal compare match memiliki kemiripan. Flag OCF0 akan menjadi set yang mana akan menandakan interupsi jika timer0 compare match diaktifkan ketika nilai TCNT0 sama dengan nilai pada register OCR0 (nilai pada OCR0 dapat di-set oleh  programmer). TCNT0 akan terus menghitung hingga overflow dan kemudian akan kembali menghitung dari nilai nol lagi.

2. Clear Time on Compare Match (CTC)

Pada mode CTC nilai pada register TCNT0 akan terus mencacah naik. Pada nilai TCNT0 sama dengan OCR0 maka nilai TCNTo akan kembali ke nol dan flag OCF0 pun menjadi set. Interupsi akan berjalan jika timer0 compare match diaktifkan. Begitu seterusnya CTC bekerja. Frekuensi untuk CTC dapat dihitung dengan persamaan dibawah ini :

f OCn = frekuensi clock chip yang digunakan / (2 x prescaler x (1+OCRn))

3. Fast Pulse Width Modulation (PWM)

Dalam mode ini dapat dihasilkan sinyal PWM dengan bentuk digital/pulsa. Adapun nilai duty cycle yaitu perbandingan antara lama pada saat pulsa high dibandingkan dengan periode satu gelombang pulsa.

Gambar sinyal PWM dengan berbagai nilai duty cycle

Timer/counter0 dalam mode ini digunakan untuk mengatur lama waktu pulsa high (on) dan lama waktu pulsa low (off) melalui register pembanding OCR0. Output PWM pada timer/counter0 adalah pin OC0 (PB3).

Pada mode Fast PWM maka nilai TCNT akan terus dicacah mulai dari 0x00 hingga oxFF kemudin kembali lagi ke oxoo dan mulai mencacah lagi hingga 0xFF. Begitu seterusnya proses yang terjadi.

Pada mode non inverting PWM maka nilai pada pin output PWM yaitu OCo akan low jika TCNT0 sama dengan nilai OCRo. Pin OC0 akan menjadi set (high) kembali jika TCNT0 kembali lagi ke nilai ox00 (TCNT0==oxoo). Sedangkan mode inverting PWM merupakan kebalikan dari mode non-inverting PWM. Pin OC0 akan high jika TCNT0==OCR0 dan akan low jika TCNT0==oxoo.

Adapun frekuensi pin OCo untuk fast PWM dapat dihitung sesuai persamaan :

f  OCnPWM =  frekuensi clock chip yang digunakan/(prescaler x 256)

Programmer dapat melakukan update pada nilai OCR0 walaupun timer0 sedang beroperasi.

4. Phase Correct PWM

Secara prinsip dasarnya mode ini sama dengan mode fast PWM. Yang berbeda adalah operasi pencacahan pada mode phase correct PWM adalah dual slope. TCNT0 akan mencacah dari nilai 0x00 hingga mencapai oxFF. Kemudian TCNT0 akan melakukan pencacahan kebawah (pengurangan) dari nilai oxFF  menjadi nilai oxoo lagi. Begitu seterusnya sehingga grafik yang terbentuk adalah dual slope.

Pada mode invering PWM output pada pin OC0 akan memiliki nilai high jika TCNTo sama dengan OCR0 pada waktu proses counting up. OC0 akan bernilai low jika TCNT0 sama dengan OCR0 pada waktu counting down. Sedangkan pada mode non-inverting PWM sebaliknya.  Pin OC0 akan memiliki nilai high jika TCNTo sama dengan OCR0 pada waktu proses counting down. OC0 akan bernilai low jika TCNT0 sama dengan OCR0 pada waktu counting up.

Adapun nilai frekuensi pada mode Phase Correct PWM dapat dihitung sesuai persamaan :

f OCn Phase Correct PWM = frekuensi clock chip yang digunakan/(prescaler x 510)

referensi : datasheet ATmega 8535, Mikrokontroler AVR (ATmega8/32/16/8535 dan pemrogramannya pada bahasa C pada winAVR oleh Ardi Winoto ).

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s