timer counter

22
Timer / Counter Hendawan Soebhakti November 2009

Upload: ujaz-siregar

Post on 07-Aug-2015

73 views

Category:

Documents


3 download

DESCRIPTION

timer counter

TRANSCRIPT

Page 1: timer counter

Timer / Counter

Hendawan SoebhaktiNovember 2009

Page 2: timer counter

Sistem Mikrokontroler - By : Hendawan Soebhakti 2

Sub Pokok Bahasan

Jenis Timer/Counter Register TIMSK dan TIFR Interrupt Timer

Page 3: timer counter

Sistem Mikrokontroler - By : Hendawan Soebhakti 3

Timer/CounterJenis-jenis TimerPada ATMega8535L terdapat 4 buah fasilitas timer yaitu :Timer 0 : Adalah timer 8 bit dengan timer value 00 s/d FFTimer 1 : Adalah timer 16 bit dengan timer value 0000 s/d FFFFTimer 2 : Adalah timer 8 bit dengan timer value 00 s/d FFWatchdog 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 sepertihalnya timer.

Page 4: timer counter

Sistem Mikrokontroler - By : Hendawan Soebhakti 4

Timer 8 bit

00

Maximum ValueTCNTx=FF

00

Initial ValuePut in TCNTx

0102

03...

7F

FF

ZeroTCNTx=00

Timer OverflowTOV=1

8-bit Up Counter

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

TMAX : Waktu maksimum timerfCLK : Frekuensi clockN : Prescaler

Example :fCLK = 8MHzPrescaler =1024

TMAX = 1/fCLK x (FF+1) x N= 0.125uS x 256 x 1024= 32768uS= 32.768mS

Page 5: timer counter

Sistem Mikrokontroler - By : Hendawan Soebhakti 5

Timer 16 bit

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

TMAX : Waktu maksimum timerfCLK : Frekuensi clockN : Prescaler

Example :fCLK = 8MHzPrescaler =1024

TMAX = 1/fCLK x (FFFF+1) x N= 0.125uS x 65536 x 1024= 8388608 uS= 8.388608 S0000

Maximum ValueTCNTxH=FF, TCNTxL=FF

0000

Initial ValuePut in TCNTxH & TCNTxL

00010002

0003...

007F

FFFF

ZeroTCNTxH=00, TCNTxL=00

Timer OverflowTOV=1

16-bit Up Counter

Page 6: timer counter

Sistem Mikrokontroler - By : Hendawan Soebhakti 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 waktutimer 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 - 10800dTCNT=10000h - 2A30hTCNT=D5D0h

Page 7: timer counter

Sistem Mikrokontroler - By : Hendawan Soebhakti 7

Register TIMSK dan TIFRTimer 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 OCIE2 Timer /Counter2 Output Compare Match Interrupt Enable.

6 TOIE2 Timer /Counter2 Overflow Interrupt Enable.

5 TICIE1 Timer1 Input Capture Interrupt Enable

4 OCIE1A Timer /Counter1A Output Compare Match Interrupt Enable.

3 OCIE1B Timer /Counter1B Output Compare Match Interrupt Enable.

2 TOIE1 Timer /Counter1 Overflow Interrupt Enable.

4 OCIE0 Timer /Counter0 Output Compare Match Interrupt Enable.

0 TOIE0 Timer /Counter0 Overflow Interrupt Enable.

7 6 5 4 3 2 1 0

Page 8: timer counter

Sistem Mikrokontroler - By : Hendawan Soebhakti 8

Register TIMSK dan TIFR

OCF2 TOV2 ICF1 OCF1A OCF1B TOV1 OCF0 TOV0

TIFR / Timer/Counter Interrupt Flag Register

Bit Symbol Fuction

7 OCF2 Output Compare Flag2.

6 TOV2 Timer /Counter2 Overflow Flag.

5 ICF1 Timer1 Input Capture Interrupt Flag

4 OCF1A Output Compare Flag1A.

3 OCF1B Output Compare Flag1B.

2 TOV1 Timer /Counter1 Overflow Flag.

4 OCF0 Output Compare Flag0.

0 TOV0 Timer /Counter0 Overflow Flag.

7 6 5 4 3 2 1 0

Page 9: timer counter

Sistem Mikrokontroler - By : Hendawan Soebhakti 9

Interrupt Timer

Timer/Counter0 Compare MatchTIMER0 COMP0x001320

Timer/Counter0 OverflowTIMER0 OVF0x000910

Timer/Counter1 OverflowTIMER1 OVF0x00089

Timer/Counter1 Compare Match BTIMER1 COMPB0x00078

Timer/Counter1 Compare Match ATIMER1 COMPA0x00067

Timer/Counter1 Capture EventTIMER1 CAPT0x00056

Timer/Counter2 OverflowTIMER2 OVF0x00045

Timer/Counter2 Compare MatchTIMER2 COMP0x00034

Interrupt DefinitionSourceProgram AddressVector No

Interrupt yang dapat dihasilkan dari timer adalah sbb :

Page 10: timer counter

Sistem Mikrokontroler - By : Hendawan Soebhakti 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

Page 11: timer counter

Sistem Mikrokontroler - By : Hendawan Soebhakti 11

Setting Timer 0 Pada CodeWizard

2. Menentukan Prescaler

Sebagai Timer : Clock Value dapat dipilih sbb :Timer 0 Stopped : Clock eksternal11059.200 kHz : No prescaler1382.400 kHz : Prescaler 8172.800 kHz : Prescaler 6443.200 kHz : Prescaler 25610.800 kHz : Prescaler 1024

Sebagai Counter : Tidak ada prescaler

Page 12: timer counter

Sistem Mikrokontroler - By : Hendawan Soebhakti 12

Setting Timer 0 Pada CodeWizard

3. Menentukan Mode Timer

Sebagai Timer atau Counter : Mode timer dapat dipilih sbb :Normal top=FFh : Mode normalPhase correct PWM top=FFh : Mode PWMCTC top=OCR0 : Mode Clear Timer on Compare MatchFast PWM top=FFh : Mode High Frequency PWM

Page 13: timer counter

Sistem Mikrokontroler - By : Hendawan Soebhakti 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 matchClear on compare match : Pulsa low ketika matchSet on compare match : Pulsa high ketika match

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

Page 14: timer counter

Sistem Mikrokontroler - By : Hendawan Soebhakti 14

Setting Timer 0 Pada CodeWizard

5. Mengaktifkan Timer Interrupt dan Compare Match Interrupt

Sebagai Timer atau Counter :

Overflow InterruptJika 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 InterruptJika diaktifkan maka pada saat timer value TCNT0 match dengan nilairegister OCR0 akan terjadi interrupt dan CPU akan menjalankan Timer 0 output compare interrupt service routine (timer0_comp_isr).

Nilai OCR0 dapat diisikan pada Compare : …. h

Page 15: timer counter

Sistem Mikrokontroler - By : Hendawan Soebhakti 15

Setting Timer 1 dan 2 Pada CodeWizardSetting 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.

Page 16: timer counter

Sistem Mikrokontroler - By : Hendawan Soebhakti 16

ExamplePercobaan 1. Interrupt Timer 1Pada 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 OutputTimer 1 :Clock Source : System ClockClock Value : 10.800 kHzMode : Normal top=FFFFhInterrupt on : Timer 1 OverflowValue : 2d10 h

Page 17: timer counter

Sistem Mikrokontroler - By : Hendawan Soebhakti 17

Example#include <mega8535.h>#include <delay.h>// Timer 1 overflow interrupt service routineinterrupt [TIM1_OVF] void timer1_ovf_isr(void){// Reinitialize Timer 1 valueTCNT1H=0x2D;TCNT1L=0x10;// Place your code herePORTA=0x00;delay_ms(500);}// Declare your global variables herevoid main(void){...while (1)

{// Place your code here

PORTA=0xFF;};

}

Timer 1 Overflow ISR

Normal Condition

Page 18: timer counter

Sistem Mikrokontroler - By : Hendawan Soebhakti 18

ExamplePercobaan 2. Counter 0Pada 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 OutputTimer 0 :Clock Source : T0 pin Falling EdgeMode : Normal top=FFhCompare Match InterruptCompare : 0a h

Page 19: timer counter

Sistem Mikrokontroler - By : Hendawan Soebhakti 19

Example#include <mega8535.h>#include <delay.h>// Timer 0 output compare interrupt service routineinterrupt [TIM0_COMP] void timer0_comp_isr(void){// Place your code herePORTA=0x0F;delay_ms(500);PORTA=0xF0;delay_ms(500); PORTA=0x0F;delay_ms(500);PORTA=0xF0;delay_ms(500);}// Declare your global variables herevoid main(void){...while (1)

{// Place your code herePORTA=0xFF;delay_ms(500);PORTA=0x00;delay_ms(500); };

}

Timer 0 Output Compare ISR

Normal Condition

Page 20: timer counter

Sistem Mikrokontroler - By : Hendawan Soebhakti 20

ExamplePercobaan 3. Menghitung Pulsa Per DetikPada percobaan ini, kita akan membuat program untuk menghitung jumlah pulsa yang masuk padapin T0 setiap detiknya. Untuk itu maka Timer 0 difungsikan sebagai counter dan Timer 1 difungsikansebagai timer 1 detik. Hasil perhitungan pulsa akan ditampilkan ke PortA.

Setting CodeWizard

PortA sebagai OutputTimer 0 :Clock Source : T0 pin Falling EdgeMode : Normal top=FFhCompare Match Interrupt

Timer 1 :Clock Source : System ClockClock Value : 10.800 kHzMode : Normal top=FFFFhInterrupt on : Timer 1 OverflowValue : d5d0 h

Page 21: timer counter

Sistem Mikrokontroler - By : Hendawan Soebhakti 21

Example#include <mega8535.h>// Timer 1 overflow interrupt service routineinterrupt [TIM1_OVF] void timer1_ovf_isr(void){// Reinitialize Timer 1 valueTCNT1H=0xD5;TCNT1L=0xD0;// Place your code herePORTA=TCNT0;TCNT0=0;}// Declare your global variables herevoid main(void){...while (1)

{// Place your code here};

}

Timer 1 Overflow ISR

Normal Condition

Page 22: timer counter

Sistem Mikrokontroler - By : Hendawan Soebhakti 22

Latihan1. 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.