• Tidak ada hasil yang ditemukan

TIMER/COUNTER

Dalam dokumen Trainer Book ATMega16 (Halaman 51-64)

Timer/counter adalah fasilitas dari ATMega16 yang digunakan untuk perhitungan pewaktuan. AVR Atmega16 memiliki 3 buah timer diantaranya : timer 0 (8 bit), timer 1 (16 bit), timer 2 (8 bit).

1. Timer/Counter 8 bit

Timer/counter 0 dan timer/counter 2 adalah timer counter 8 bit yang mempunyai multi fungsi. Fitur fiturnya yaitu :

Counter satu kanal

Timer di nol kan saat match compare (autoreload) Glitch free, phase correct pulse width modulation Frekuensi generator

I/O bit clock prescaler

Interupsi timer yang disebabkan timer overflow (TOVn) dan compare match (OCFn)

Timer/counter 8 bit dapat menghitung maksiml sampai 255 (00 FF h) hitungan, dimana periode setiap hitungan tergantung dari setting prescaler-nya. Untuk mengatur jenis mode operasi dari timer/counter dan mengatur prescaler digunakan register timer/counter control register TCCRn (n =0,2). TCCR adalah register 8 bit, sebagai berikut:

7 6 5 4 3 2 1 0

TCCRn

FOCn WGMn COMn COMn WGMn CSn CSn Csn

- 0 1 0 1 2 1 0

Keterangan :

Bit 7 : FOCn (force output compare

Bit 6 dan Bit 3 : WGMn0 dan WGMn1 (waveform Generator Unit), bit mengontrol kenaikan dari counter, sumber nilai maksimum dan mode operasi timer/counter, yaitu mode normal, clear timer, compare match, dan dua tipe PWM.

a. Mode operasi Timer Mode Normal

Timer digunakan untuk menghitung saja, membuat delay, menghitung selang waktu

Memberikan bentuk gelombang phase correct PWM resolusi tinggi. Mode phase correct PWM berdasarkan operasi dual slope. Counter menghitung berulang-ulang dari bottom ke max dan dari max ke bottom.

CTC (Clear Timer on Compare Match)

Pada mode CTC, nilai timer yang ada pada TCNTn akan di nol kan lagi jika TCTn sudah sama dengan nilai yang ada pada register OCRn, sebelumnya OCR diset dulu, karena timer 0 dan 2 maksimumnya 255, maka range OCR 0 255.

Fast PWM

Memberikan pulsa PWM frekuensi tinggi. Fast PWM berbeda dengan mode PWM lain, fast PWM berdasarkan operasi single sloop. Counter menghitung dari bottom hingga top kemudian kembali lagi menghitung dari bottom.

b. Seting Bit pada Timer 8 bit

Cara seting timer 8 bit adalah dengan cara mengatur register WGM01 dan WGM00, berikut adalah tabel cara mengatur WGM01 dan WGM0.

Mode WGM01 (CTC0) WGM00 (PWM0) Timer/counter mode of operation TOP Update of OCR0 TOV 0 flag set-on

0 0 0 Normal 0xFF Immediate MAX

1 0 1 PWM, phase

correct 0xFF TOP BOTTOM

2 1 0 CTC OCR0 Immediete MAX

3 1 1 Fast PWM 0xFF TOP MAX

Keterangan :

BOTTOM = 0x00, MAX = 0xFF, TOP = 0xFF atau nilai yang berada pada register OCRn tergantung pada mode operasi.

Bit 5 dan bit 4: COMn1 dan COMn0 (Compare Match Output Mode)

untuk mengontrol pin Ocn (ouput compare pin), tergantung mode apa yang digunakan (nilai WGMn0 dan WGMn1). COMn1 dan COMn0 digunakan untuk pengaturan lebih spesifik suatu mode timer. Berikut tabel seting pada bit tersebut untuk timer/counter 0 :

- Compare output mode, non PWM mode

COM01 COM00 Description

0 0 Normal port operation, OC0 disconected

0 1 Toogle OC0 on compare Match

1 0 Clear OC0 on compare match

1 1 Set OC0 on compare match

- Compare output mode, Fast PWM mode

COM01 COM00 Description

0 0 Normal port operation, OC0 disconected

0 1 Rserved

1 0 Clear OC0 on compare match

1 1 Set OC0 on compare match

- Compare output mode, phase correct PWM mode

COM01 COM00 Description

0 0 Normal port operation, OC0 disconected

0 1 Reserved

1 0

Clear OC0 on compare match when up-counting. Set OC0 on compare match when down-counting

1 1 Set OC0 on compare match. Clear OC0 on

compare match when down-counting

Bit 2, bit 1 dan bit 0 : CSn2, Csn1, CSn0 (clock select)

Sumber clock timer/counter dapat berasal dari internal maupun eksternal. Bit CSn2, CSn1, CSn0 digunakan untuk memilih sumber clock yang akan digunakan oleh timer/counter dan untuk prescaller, misalnya configurasi bit CSn2, CSn1, CSn0 sebagai berikut:

0 0 0 : timer dihentikan jika diset nilai ini

0 0 1 : sekali detaknya sama dengan detak oscilator yang digunakan

0 1 0 : sekali detaknya sama dengan detak oscilator/8, sehingga timer akan berdetak setelah oscilator berdetak 8 kali.

Berikut tabel seting bit tersebut untuk timer counter 0: CS02 CS01 CS00 Description

0 0 0 No clock source (timer/counter stopped)

0 0 1 ClkI/O/no prescaling

0 1 0 ClkI/O/8 (from prescaler) 0 1 1 ClkI/O/64 (from prescaler) 1 0 0 ClkI/O/256 (from prescaler) 1 0 1 ClkI/O/1024 (from prescaler)

1 1 0 Eksternal clock source on T0 pin. Clock on falling edge 1 1 1 Eksternal clock source on T0 pin. Clock on rising edge

2. Timer/Counter 16 bit

Pada mode normal, TCNT1 akan meghitung naik dan membangkitkan interupt timer/counter 1 ketika nilainya berubah dari 0xFFFF ke 0x0000. Untuk menggunakan timer yang menghitung mundur, cukup dengan memasukan nilai yang diinginkan ke TCNT1 dan menunggu sampai erjadi interupt, tetapi untuk timer yang menghitung maju, maka nilai yang dimasukan ke dalam TCNT1 nilainya harus 65536 (timer value).

a. Register timer 16 bit TCNT1

Timer/counter register digunakan untuk menyimpan nilai timer yang diinginkan. TCNT1 dibagi menjadi 2 register 8 bit yaitu TCNT1H dan TCNT1L.

TIMSK & TIFR

Timer interupt mask regiter dan timer interupt flag register digunakan untuk mengendalikan interupt mana yang diaktifkan dengan cara melakukan seting pada TIMSK dan untuk mengetahui interupt mana yang sedang terjadi. Berikut adalah bit pada register TIMSK (timer/counter interupt mask register).

Bit 7 6 5 4 3 2 1 0

OCIE2 TOIE2 TICIE1 OCIE1A OCIE1B TOIE1 OCIE0 TOIE0 TIMSK

Read/write R/W R/W R/W R/W R/W R/W R/W R/W

Initial Value 0 0 0 0 0 0 0 0

Keterangan:

Bit7 : OCIE2, timer/counter 2 output compare match interupt enable Bit6 : TOIE2, timer/counter2 overflow interupt enable

Bit4 : OCIE1A, timer/counter 1A output compare match interupt enable Bit3 : OCIE1B, timer/counter1B output compare match interupt enable Bit2 : TOEI1, timer/counter1 overflow interupt enable

Bit1 : OCIE0, timer/counter0 output compare match interupt enable Bit0 : TOEI0 timer/counter0 overflow interupt enable

Berikut adalah bit pada register TIFR (timer/counter interupt flag register:

Bit 7 6 5 4 3 2 1 0

OCF2 TOV2 ICF1 OCF1A OCF1B TOV1 OCF0 TOV0 TIFR

Read/write R/W R/W R/W R/W R/W R/W R/W R/W

Initial Value 0 0 0 0 0 0 0 0

Keterangan:

Bit7 : OCF2, output compare flag

Bit6 : TOV2, timer/counter2 overflow flag Bit5 : ICF1, timer1 input capture interupt flag Bit4 : OCF1A, output compare flag 1A Bit3 : OCF1B, output compare flag 1B Bit2 : TOV1, timer counter1 overflow flag Bit1 : OCF0, output compare flag0

Bit0 : TOV0, timer/counter0 overflow flag TCCR1B

Timer/counter1control register B digunakan untuk mengatur mode timer, prescaler dan pilihan lainya.

Bit 7 6 5 4 3 2 1 0

ICNC1 ICES1 - WGM13 WGM12 CS12 CS11 CS10 TCCR1B

Read/write R/W R/W R R/W R/W R/W R/W R/W

Initial Value 0 0 0 0 0 0 0 0

CS12, CS11, CS10 sebagai Clock select bits, pemilih prescaler timer/counter 1 dan hubunganya dengan clock eksternal pada pin T1.

CS12 CS11 CS10 Description

1 0 1 ClkI/O/1024 (from prescaler)

1 1 0 Eksternal clock source on T0 pin. Clock on falling edge 1 1 1 Eksternal clock source on T0 pin. Clock on rising edge

b. Interupt timer

Ada dua sumber interupi timer yaitu:

Overflow interupt, interupt terjadi jika TCNTn mencapai 255 untuk timer 0 dan 65555 untuk timer 2 .

Compare match interupt, interupt terjadi jika nilai OCR sama dengan TCNTn.

3. Prescaler

Pada dasarnya timer hanya menghitung pulsa clock. Frekuensi pulsa clock yang dihitung tersebut bisa sama dengan frekuensi crystal yang digunakan atau dapat diperlambat dengan prescaler dengan faktor 8, 64, 256 atau 1024. Berikut penjelasan sebuah AVR menggunakan kristal dengan frekuensi 8 MHz dan timer yang digunakan adalah timer 16 bit. Maka maksimum waktu timer yang bisa dihasilkan adalah:

TMAX = 1/FCLK x (FFFFh+1) = 1/8MHz x (65535+1)

= 0.008192 s

Untuk menghasilkan waktu timer yang lebih lama dapat digunakan prescaler, misalnya 1024, maka maksimal waktu timer yang bisa dihasilkan adalah:

TMAX = 1/FCLK x (FFFF h+1) x N = 1/8 MHz x (65535+1) x N = 0

= 8.388608 s

4. Perhitungan waktu timer

TCNT = (1+FFFFh) TTimer x FCLK/N Keterangan :

TCNT = nilai timer (hex)

FCLK = frekuensi clock kristal yang digunakan (Hz)

TTimer = waktu timer yang diinginkan (s)

N = prescaler (1, 8, 64, 256, 1024)

1+FFFFh = nilai maksimum timer adalah FFFFh dan oveflow saat FFFFh ke 0000h Contoh :

Diinginkan sebuah timer 16 bit bekerja selama 1 detik, dengan frekuensi clock sebesar 11,0592 MHz dan prescaller 1024, maka diperoleh nilai TCNT sebesar:

= 10000h 10800d = 10000h 2A30h = D5D0 h

Dengan demikian, nilai TCNT1H = D5 dan TCNT1L = D0h

Timer 16 bit Atmega16 dapat menghasilkan waktu tunda maksimum sebesar 6,06805555 detik pada frekuensi 11,0592 MHz. Dengan nilai maksimum FFFFh maka akan dihasilkan waktu timer selama:

FFFFh = Ttimer x 11059200/1024 65535 = Ttimer x 10800

Ttimer = 6,068055555s

Praktik 1:

Program menyalakan dan memadamkan led selama delay waktu 1s menggunakan timer 16 bit. Port B sebagai output, kristal yang digunakan 12 MHz dan prescaler 1024, maka nilai TCNT didapat dari :

Praktik 2:

Membuat jam digital menggunakan timer 2 (timer 8 bit). Jam terdiri dari menit dan detik yang akan ditmpilkan pada seven segmen. Gunakan compare match interupt, kristal 12Mhz, prescaler 8 dan timer 2.

Maka clock value = 12Mhz/8 = 1500 KHz. Untuk mendapatkan periode 0.1 ms, maka nilai register OCR

OCR = 10-4s x 1500 KHz = 150d = 96h maka nilai register OCR = 0x96

Periodenya adalah 0,1ms, agar menjadi 1s harus dikalikan 10000.

BAB IX

PWM (PULSE WITH MODULATION)

Pulse width modulation menggunakan gelombang kotak dengan lebar duty cycle tertentu menghasilkan nilai rata-rata dari suatu bentuk gelombang. Jika kita menganggap bentuk gelombang kotak f(t) dengan nilai batas bawah ymin batas atas ymax dan duty cycle D, sperti dilihat dalam gambar.

Nilai rata rata daribentuk gelombang diatas adalah:

Jika f(t) adalah gelombang kotak, maka nilai ymax adalah ari 0 < t < DT dan nilai ymin dari D.T < t < T. duty cycle menyatakan presentase keadaan logika high dalam suatu periode sinyal. Satu siklus diawali oleh transisi low to high dari sinyal dan berakhir pada transisi berikutnya. Selama satu siklus, jika waktu sinyal pada keadaan high sama dengan low maka dapat dikatakan sinyal mempunyai duty cycle 50%. Besar duty cycle dapat diatur pada register OCR. Semakin besar nilai data pada register OCR, maka semakin tingi juga nilai rata-rata tegangan DC. ymax ymin 0 D.T T T+D.T 2T 0 255 OCR = 128 0 255 OCR = 200

Dalam dokumen Trainer Book ATMega16 (Halaman 51-64)

Dokumen terkait