Sistem Mikrokontroler - dinus.ac.iddinus.ac.id/repository/docs/ajar/u-5.pdfTimer pada dasarnya hanya...

21
Sistem Mikrokontroler FE UDINUS 8 Maret 2013 Minggu ke 5

Transcript of Sistem Mikrokontroler - dinus.ac.iddinus.ac.id/repository/docs/ajar/u-5.pdfTimer pada dasarnya hanya...

Page 1: Sistem Mikrokontroler - dinus.ac.iddinus.ac.id/repository/docs/ajar/u-5.pdfTimer pada dasarnya hanya menghitung pulsa clock. Frekuensi pulsa clock yang dihitung tersebut bisa sama

Sistem Mikrokontroler FE UDINUS

8 Maret 2013

Minggu ke 5

Page 2: Sistem Mikrokontroler - dinus.ac.iddinus.ac.id/repository/docs/ajar/u-5.pdfTimer pada dasarnya hanya menghitung pulsa clock. Frekuensi pulsa clock yang dihitung tersebut bisa sama

2

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

Page 3: Sistem Mikrokontroler - dinus.ac.iddinus.ac.id/repository/docs/ajar/u-5.pdfTimer pada dasarnya hanya menghitung pulsa clock. Frekuensi pulsa clock yang dihitung tersebut bisa sama

3

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

Timer 8 bit

Page 4: Sistem Mikrokontroler - dinus.ac.iddinus.ac.id/repository/docs/ajar/u-5.pdfTimer pada dasarnya hanya menghitung pulsa clock. Frekuensi pulsa clock yang dihitung tersebut bisa sama

4

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

Timer 16 bit

Page 5: Sistem Mikrokontroler - dinus.ac.iddinus.ac.id/repository/docs/ajar/u-5.pdfTimer pada dasarnya hanya menghitung pulsa clock. Frekuensi pulsa clock yang dihitung tersebut bisa sama

5

Timer Value (TCNT)

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=(FFF+1)-((Ttimer x fCLK)/N) Timer 16 bit : TCNT=(FFFF+1)-((Ttimer x fCLK)/N) 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 Dengan demikian nilai TCNTH = D5h dan TCNTL = D0h

Page 6: Sistem Mikrokontroler - dinus.ac.iddinus.ac.id/repository/docs/ajar/u-5.pdfTimer pada dasarnya hanya menghitung pulsa clock. Frekuensi pulsa clock yang dihitung tersebut bisa sama

6

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

Bit Symbol Fuction 7 OCIE2 Timer /Counter2 Output Compare Match Interrupt Enable. 6 TOIE2 Timer /Counter2 Overflow Interrupt Enable. 5 TICIE 1 Timer 1 Input Capture Interrupt Enable 4 OCIE1A Timer /Counter1 A Output Compare Match Interrupt Enable. 3 OCIE1B Timer /Counter1 B 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.

Page 7: Sistem Mikrokontroler - dinus.ac.iddinus.ac.id/repository/docs/ajar/u-5.pdfTimer pada dasarnya hanya menghitung pulsa clock. Frekuensi pulsa clock yang dihitung tersebut bisa sama

7

Register TIMSK dan TIFR

Bit Symbol Fuction 7 OCF2 Output Compare Flag2 . 6 TOV2 Timer /Counter2 Overflow Flag. 5 ICF 1 Timer 1 Input Capture Interrupt Flag 4 OCF1 A Output Compare Flag1 A. 3 OCF1 B Output Compare Flag1 B. 2 TOV 1 Timer /Counter1 Overflow Flag. 4 OCF0 Output Compare Flag0 . 0 TOV0 Timer /Counter0 Overflow Flag.

Page 8: Sistem Mikrokontroler - dinus.ac.iddinus.ac.id/repository/docs/ajar/u-5.pdfTimer pada dasarnya hanya menghitung pulsa clock. Frekuensi pulsa clock yang dihitung tersebut bisa sama

8

Interrupt Timer Interrupt yang dapat dihasilkan dari timer adalah sbb :

Page 9: Sistem Mikrokontroler - dinus.ac.iddinus.ac.id/repository/docs/ajar/u-5.pdfTimer pada dasarnya hanya menghitung pulsa clock. Frekuensi pulsa clock yang dihitung tersebut bisa sama

9

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 10: Sistem Mikrokontroler - dinus.ac.iddinus.ac.id/repository/docs/ajar/u-5.pdfTimer pada dasarnya hanya menghitung pulsa clock. Frekuensi pulsa clock yang dihitung tersebut bisa sama

10

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 : Tidak ada prescale

Page 11: Sistem Mikrokontroler - dinus.ac.iddinus.ac.id/repository/docs/ajar/u-5.pdfTimer pada dasarnya hanya menghitung pulsa clock. Frekuensi pulsa clock yang dihitung tersebut bisa sama

11

3. Menentukan Mode Time 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

Page 12: Sistem Mikrokontroler - dinus.ac.iddinus.ac.id/repository/docs/ajar/u-5.pdfTimer pada dasarnya hanya menghitung pulsa clock. Frekuensi pulsa clock yang dihitung tersebut bisa sama

12

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)

Page 13: Sistem Mikrokontroler - dinus.ac.iddinus.ac.id/repository/docs/ajar/u-5.pdfTimer pada dasarnya hanya menghitung pulsa clock. Frekuensi pulsa clock yang dihitung tersebut bisa sama

13

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). Nilai OCR0 dapat diisikan pada Compare : …. h

Page 14: Sistem Mikrokontroler - dinus.ac.iddinus.ac.id/repository/docs/ajar/u-5.pdfTimer pada dasarnya hanya menghitung pulsa clock. Frekuensi pulsa clock yang dihitung tersebut bisa sama

14

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.

Page 15: Sistem Mikrokontroler - dinus.ac.iddinus.ac.id/repository/docs/ajar/u-5.pdfTimer pada dasarnya hanya menghitung pulsa clock. Frekuensi pulsa clock yang dihitung tersebut bisa sama

Contoh 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 Value : 2d10 h

Page 16: Sistem Mikrokontroler - dinus.ac.iddinus.ac.id/repository/docs/ajar/u-5.pdfTimer pada dasarnya hanya menghitung pulsa clock. Frekuensi pulsa clock yang dihitung tersebut bisa sama

#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

Page 17: Sistem Mikrokontroler - dinus.ac.iddinus.ac.id/repository/docs/ajar/u-5.pdfTimer pada dasarnya hanya menghitung pulsa clock. Frekuensi pulsa clock yang dihitung tersebut bisa sama

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 Compare : 0a h

Page 18: Sistem Mikrokontroler - dinus.ac.iddinus.ac.id/repository/docs/ajar/u-5.pdfTimer pada dasarnya hanya menghitung pulsa clock. Frekuensi pulsa clock yang dihitung tersebut bisa sama

18

#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

Normal Condition

Page 19: Sistem Mikrokontroler - dinus.ac.iddinus.ac.id/repository/docs/ajar/u-5.pdfTimer pada dasarnya hanya menghitung pulsa clock. Frekuensi pulsa clock yang dihitung tersebut bisa sama

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 Value : d5d0 h

Page 20: Sistem Mikrokontroler - dinus.ac.iddinus.ac.id/repository/docs/ajar/u-5.pdfTimer pada dasarnya hanya menghitung pulsa clock. Frekuensi pulsa clock yang dihitung tersebut bisa sama

#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

Normal Condition

Page 21: Sistem Mikrokontroler - dinus.ac.iddinus.ac.id/repository/docs/ajar/u-5.pdfTimer pada dasarnya hanya menghitung pulsa clock. Frekuensi pulsa clock yang dihitung tersebut bisa sama

TERIMA KASIH

21