• Tidak ada hasil yang ditemukan

Timer / Counter. Hendawan Soebhakti. November 2009

N/A
N/A
Protected

Academic year: 2021

Membagikan "Timer / Counter. Hendawan Soebhakti. November 2009"

Copied!
22
0
0

Teks penuh

(1)

Timer / Counter

Hendawan Soebhakti

(2)

Sub Pokok Bahasan

Jenis Timer/Counter

Register TIMSK dan TIFR

(3)

Timer/Counter

Jenis-jenis Timer

Pada ATMega8535L terdapat 4 buah fasilitas timer yaitu :

Timer 0 : Adalah timer 8 bit dengan timer value 00 s/d FF

Timer 1 : Adalah timer 16 bit dengan timer value 0000 s/d FFFF

Timer 2 : Adalah timer 8 bit dengan timer value 00 s/d FF

Watchdog timer : Adalah timer untuk mereset sendiri

Timer pada dasarnya hanya menghitung pulsa clock.

Frekuensi pulsa clock yang dihitung tersebut bisa sama dengan frekuensi crystal yang

dipasang atau dapat diperlambat menggunakan prescaler dengan faktor 8, 64, 256

atau 1024.

Sedangkan Counter menghitung pulsa pada pin Tn dan tidak bisa diperlambat seperti

halnya timer.

(4)

Timer 8 bit

00 Maximum Value TCNTx=FF 00 Initial Value Put in TCNTx 01 02 03 ... 7F FF Zero TCNTx=00 Timer Overflow TOV=1 8-bit Up Counter TMAX = 1/fCLK x (FF+1)xN

TMAX : Waktu maksimum timer fCLK : Frekuensi clock N : Prescaler Example : fCLK = 8MHz Prescaler =1024 TMAX = 1/fCLK x (FF+1) x N = 0.125uS x 256 x 1024 = 32768uS = 32.768mS

(5)

Timer 16 bit

TMAX = 1/fCLK x (FFFF+1)xN

TMAX : Waktu maksimum timer fCLK : Frekuensi clock N : Prescaler Example : fCLK = 8MHz Prescaler =1024 TMAX = 1/fCLK x (FFFF+1) x N = 0.125uS x 65536 x 1024 = 8388608 uS = 8.388608 S 0000 Maximum Value TCNTxH=FF, TCNTxL=FF 0000 Initial Value Put in TCNTxH & TCNTxL 0001 0002 0003 ... 007F FFFF Zero TCNTxH=00, TCNTxL=00 Timer Overflow TOV=1 16-bit Up Counter

(6)

Timer Value (TCNT)

Dengan demikian nilai TCNTH = D5h dan TCNTL = D0h

TCNT=(FF+1)-((Ttimer x fCLK)/N)

Untuk menentukan berapa timer value yang harus diisikan ke TCNT agar menghasilkan waktu timer tang kita inginkan dapat dihitung dengan persamaan sbb :

Timer 8 bit :

TCNT=(FFFF+1)-((Ttimer x fCLK)/N)

Timer 16 bit :

Contoh :

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

TCNT=(FFFF+1) - ((Ttimer x fCLK)/N) TCNT=(FFFF+1) - ((1 x 11059200)/1024) TCNT=10000h - 10800d

TCNT=10000h - 2A30h TCNT=D5D0h

(7)

Register TIMSK dan TIFR

Timer Interrupt Mask Register (TIMSK) dan Timer Interrupt Flag (TIFR) Register digunakan untuk mengendalikan interrupt mana yang diaktifkan dengan cara melakukan setting pada TIMSK dan untuk mengetahui interrupt mana yang sedang terjadi.

OCIE2 TOIE 2 TICIE 1 OCIE 1A OCIE1B TOIE1 OCIE0 TOIE 0

TIMSK / Timer/Counter Interrupt Mask Register

Bit Symbol Fuction

7 OCIE 2 Timer /Counter2 Output Compare Match Interrupt Enable. 6 TOIE2 Timer /Counter2 Overflow Interrupt Enable.

5 TICIE1 Timer 1 Input Capture Interrupt Enable

4 OCIE 1A Timer /Counter1A Output Compare Match Interrupt Enable. 3 OCIE 1B Timer /Counter1B Output Compare Match Interrupt Enable. 2 TOIE1 Timer /Counter1 Overflow Interrupt Enable.

4 OCIE 0 Timer /Counter0 Output Compare Match Interrupt Enable. 0 TOIE0 Timer /Counter0 Overflow Interrupt Enable.

(8)

Register TIMSK dan TIFR

OCF2 TOV2 ICF 1 OCF1A OCF1B TOV1 OCF0 TOV0

TIFR / Timer/Counter Interrupt Flag Register

Bit Symbol Fuction

7 OCF2 Output Compare Flag2. 6 TOV 2 Timer /Counter2 Overflow Flag. 5 ICF1 Timer 1 Input Capture Interrupt Flag 4 OCF1A Output Compare Flag1A.

3 OCF1B Output Compare Flag1B. 2 TOV 1 Timer /Counter1 Overflow Flag. 4 OCF0 Output Compare Flag0. 0 TOV 0 Timer /Counter0 Overflow Flag.

(9)

Interrupt Timer

Timer/Counter0 Compare Match TIMER0 COMP 0x0013 20 Timer/Counter0 Overflow TIMER0 OVF 0x0009 10 Timer/Counter1 Overflow TIMER1 OVF 0x0008 9

Timer/Counter1 Compare Match B TIMER1 COMPB

0x0007 8

Timer/Counter1 Compare Match A TIMER1 COMPA

0x0006 7

Timer/Counter1 Capture Event TIMER1 CAPT 0x0005 6 Timer/Counter2 Overflow TIMER2 OVF 0x0004 5

Timer/Counter2 Compare Match TIMER2 COMP 0x0003 4 Interrupt Definition Source Program Address Vector No

(10)

Setting Timer 0 Pada CodeWizard

1. Menentukan fungsi Timer atau Counter

Sebagai Timer :

Clock Source = System Clock

Sebagai Counter :

Clock Source = T0 pin Falling Edge atau T0 pin Rising Edge

(11)

Setting Timer 0 Pada CodeWizard

2. Menentukan Prescaler

Sebagai Timer :

Clock Value dapat dipilih sbb :

Timer 0 Stopped : Clock eksternal 11059.200 kHz : No prescaler 1382.400 kHz : Prescaler 8 172.800 kHz : Prescaler 64 43.200 kHz : Prescaler 256 10.800 kHz : Prescaler 1024 Sebagai Counter :

(12)

Setting Timer 0 Pada CodeWizard

3. Menentukan Mode Timer

Sebagai Timer atau Counter :

Mode timer dapat dipilih sbb :

Normal top=FFh : Mode normal Phase correct PWM top=FFh : Mode PWM

CTC top=OCR0 : Mode Clear Timer on Compare Match Fast PWM top=FFh : Mode High Frequency PWM

(13)

Setting Timer 0 Pada CodeWizard

4. Menentukan Mode Pulsa pada pin OC0 (Output Compare Timer 0)

Sebagai Timer atau Counter :

Mode Pulsa pada pin OC0 dapat dipilih sbb :

Toggle on compare match : Pulsa berubah ketika terjadi match Clear on compare match : Pulsa low ketika match

Set on compare match : Pulsa high ketika match

Fungsi ini berguna saat pin OC0 berfungsi sebagai waveform generator (Pembangkit pulsa)

(14)

Setting Timer 0 Pada CodeWizard

5. Mengaktifkan Timer Interrupt dan Compare Match Interrupt

Sebagai Timer atau Counter :

Overflow Interrupt

Jika diaktifkan maka pada saat timer overflow akan terjadi interrupt dan CPU akan menjalankan Timer 0 overflow interrupt service routine

(timer0_ovf_isr).

Nilai TCNT dapat diisikan pada Timer Value : …. h

Compare Match Interrupt

Jika diaktifkan maka pada saat timer value TCNT0 match dengan nilai register OCR0 akan terjadi interrupt dan CPU akan menjalankan Timer

0 output compare interrupt service routine (timer0_comp_isr).

(15)

Setting Timer 1 dan 2 Pada CodeWizard

Setting Timer 1 dan Timer 2 hampir sama dengan setting Timer 0, hanya saja untuk Timer 1 lebih banyak fasilitas yang disediakan dan timer ini adalah timer 16 bit.

(16)

Example

Percobaan 1. Interrupt Timer 1

Pada percobaan ini, kita akan membuat program interrupt yang dihasilkan oleh Timer 1.

Pada kondisi normal PortA akan bernilai 0xFF, namun pada saat ada interrupt kondisinya berubah menjadi 0x00 selama 500mS. Interrupt timer terjadi setiap 5S (Timer Value = 2D10h).

Setting CodeWizard

PortA sebagai Output Timer 1 :

Clock Source : System Clock Clock Value : 10.800 kHz

Mode : Normal top=FFFFh

Interrupt on : Timer 1 Overflow

(17)

Example

#include <mega8535.h> #include <delay.h>

// Timer 1 overflow interrupt service routine interrupt [TIM1_OVF] void timer1_ovf_isr(void) {

// Reinitialize Timer 1 value TCNT1H=0x2D;

TCNT1L=0x10;

// Place your code here PORTA=0x00;

delay_ms(500); }

// Declare your global variables here void main(void) { . . . while (1) {

// Place your code here PORTA=0xFF;

Timer 1 Overflow ISR

(18)

Example

Percobaan 2. Counter 0

Pada percobaan ini, kita akan membuat program counter dengan mode compare match interrupt. Mikrokontroler akan menghitung jumlah pulsa yang masuk pada T0 (PINB.0). Jika jumlah pulsanya sama dengan 10 pulsa (0x0A) maka mikrokontroler akan melaksanakan void timer0_comp_isr.

Setting CodeWizard

PortA sebagai Output Timer 0 :

Clock Source : T0 pin Falling Edge

Mode : Normal top=FFh

Compare Match Interrupt

(19)

Example

#include <mega8535.h> #include <delay.h>

// Timer 0 output compare interrupt service routine interrupt [TIM0_COMP] void timer0_comp_isr(void) {

// Place your code here PORTA=0x0F; delay_ms(500); PORTA=0xF0; delay_ms(500); PORTA=0x0F; delay_ms(500); PORTA=0xF0; delay_ms(500); }

// Declare your global variables here void main(void) { . . . while (1) {

// Place your code here PORTA=0xFF;

delay_ms(500); PORTA=0x00;

delay_ms(500);

Timer 0 Output Compare ISR

(20)

Example

Percobaan 3. Menghitung Pulsa Per Detik

Pada percobaan ini, kita akan membuat program untuk menghitung jumlah pulsa yang masuk pada pin T0 setiap detiknya. Untuk itu maka Timer 0 difungsikan sebagai counter dan Timer 1 difungsikan sebagai timer 1 detik. Hasil perhitungan pulsa akan ditampilkan ke PortA.

Setting CodeWizard

PortA sebagai Output Timer 0 :

Clock Source : T0 pin Falling Edge

Mode : Normal top=FFh

Compare Match Interrupt

Timer 1 :

Clock Source : System Clock Clock Value : 10.800 kHz

Mode : Normal top=FFFFh

Interrupt on : Timer 1 Overflow

(21)

Example

#include <mega8535.h>

// Timer 1 overflow interrupt service routine interrupt [TIM1_OVF] void timer1_ovf_isr(void) {

// Reinitialize Timer 1 value TCNT1H=0xD5;

TCNT1L=0xD0;

// Place your code here PORTA=TCNT0;

TCNT0=0; }

// Declare your global variables here void main(void) { . . . while (1) {

// Place your code here };

}

Timer 1 Overflow ISR

(22)

Latihan

1. Buatlah program untuk menaikkan (increment) data pada PortA dari 0x00 sampai ke 0xFF setiap interval 3 detik. Gunakan fasilitas timer 2.

2. Buatlah program untuk menghitung jumlah pulsa pada pin T0 setiap 5 detik. Tampilkan hasilnya pada PortA.

Referensi

Dokumen terkait

Selain berkomunikasi dengan antar pengguna jalan lain menggunakan isyarat lampu dan isyarat suara para awak bus seperti asisten pengemudi (kernet),dan kondektur pun

1.2.3 Bagaimana hasil penelitian tentang pengaruh penambahan jus tomat pada media Vacin &amp; Went (VW) terhadap pertumbuhan planlet anggrek Dendrobium

Kondisi ini dapat terlihat dalam perwilayahan komoditas, aktivitas pertanian kurang mendapat sorotan yang lebih mendetail mengenai jenis pertanian pada tataran Rencana Tata Ruang

Sindrom Guillain-Barre (SGB) adalah suatu polineuropati yang dapat bersifat ascending dan akut yang sering terjadi setelah 1 sampai 3 minggu setelah infeksi akut pada

sehingga dibutuhkan suatu media informasi tentang bagaimana belajar tentang teknik dasar dari bermain futsal yang dapat diajadikan sebagai suatu metode pembelajaran untuk

Sistem kendali open loop adalah suatu sistem yang output-nya tidak akan memiliki pengaruh terhadap input-nya kembali sehingga hasil pada output tidak dapat

Saat seorang partner audit dari E&amp;W, Larry Gray datang berkunjung ke perusahaan ZZZZ Best untuk melakukan pemeriksaan secara mendadak, Minkow menyuruh bawahannya untuk

melakukan manipulasi, membantu melakukan manipulasi, dan/atau memalsukan data yang berkaitan dengan jasa yang diberikan sebagaimana dimaksud dalam Pasal 30 ayat (1) huruf