modul2-timer counter avr in cvavr.pdf

10
Petunjuk Praktikum Mikrokontroler – Timer dan Counter 1 TIMER - COUNTER TUJUAN 1. Praktikan mampu memahami fungsi timer/counter dalam mikrokontroler AVR 2. Praktikan mampu mengatur fungsi timer/counter 3. Praktikan mampu membuat program untuk mengendalikan timer/counter serta untuk aplikasinya. DASAR TEORI Mikrokontroler ATMega8535 memiliki beberapa pre-dimensi variable (register yang terdapat pada datasheet) dengan fungsi tertentu. Tiga diantaranya adalah Timer0, Timer1 dan Timer2. 1. Timer0 Merupakan timer 8 bit jadi dapat menghitung dari 0 sampai dengan 255 yang multi fungsi, fitur-fitur dari Timer0 adalah: a. Counter 1 kanal b. Timer di-nol-kan saat nilai perbandingan tercapai c. Sebagai pembangkit gelombang PWM d. Sebagai pembangkit frekuensi 2. Timer1 Merupakan timer 16 bit jadi dapat menghitung dari 0 sampai dengan 65535 yang memungkinkan program pewaktu menjadi lebih akurat, fitur yang ada pada Timer1 antara lain a. Dua buah unit pembanding b. Dua buah register pembanding c. Satu buah input capture unit d. Dapat menghasilkan gelombang PWM e. Sebagai pembangkit frekuensi 3. Timer2 Merupakan timer 8 bit jadi dapat menghitung dari 0 sampai dengan 255, dengan fitur hampir sama dengan timer0. Register Timer dan Counter Masing-masing timer/counter pada ATMega8535/16/32 memiliki register tertentu yang digunakan untuk mengatur mode dan cara kerjanya, namun terdapat dua register yang digunakan bersama-sama oleh ketiga timer/counter tersebut yaitu register TIMSK dan register TIFR. Selain itu, masing-masing timer/counter memiliki register tersendiri yang akan dibahas pada subbab berikut. Register TIMSK Register Timer/Counter Interrupt Mask (TIMSK) digunakan oleh ketiga timer ATMega8535 untuk mengaktifkan interupsi. Register ini memiliki susunan bit seperti pada Gambar 7.2. Gambar 1. Register TIMSK 1. Bit7, Timer/Counter2 Output Compare Match Interrupt Enable (OCIE2), merupakan bit untuk mengaktifkan interupsi Output Compare Match (OCM) Timer/Counter2.

Upload: sumantri-hatmoko

Post on 25-Sep-2015

77 views

Category:

Documents


28 download

TRANSCRIPT

  • Petunjuk Praktikum Mikrokontroler Timer dan Counter 1

    TIMER - COUNTER TUJUAN

    1. Praktikan mampu memahami fungsi timer/counter dalam mikrokontroler AVR 2. Praktikan mampu mengatur fungsi timer/counter 3. Praktikan mampu membuat program untuk mengendalikan timer/counter serta untuk

    aplikasinya.

    DASAR TEORI Mikrokontroler ATMega8535 memiliki beberapa pre-dimensi variable (register yang terdapat pada datasheet) dengan fungsi tertentu. Tiga diantaranya adalah Timer0, Timer1 dan Timer2. 1. Timer0 Merupakan timer 8 bit jadi dapat menghitung dari 0 sampai dengan 255 yang multi fungsi, fitur-fitur dari Timer0 adalah:

    a. Counter 1 kanal b. Timer di-nol-kan saat nilai perbandingan tercapai c. Sebagai pembangkit gelombang PWM d. Sebagai pembangkit frekuensi

    2. Timer1 Merupakan timer 16 bit jadi dapat menghitung dari 0 sampai dengan 65535 yang memungkinkan program pewaktu menjadi lebih akurat, fitur yang ada pada Timer1 antara lain

    a. Dua buah unit pembanding b. Dua buah register pembanding c. Satu buah input capture unit d. Dapat menghasilkan gelombang PWM e. Sebagai pembangkit frekuensi

    3. Timer2 Merupakan timer 8 bit jadi dapat menghitung dari 0 sampai dengan 255, dengan fitur hampir sama dengan timer0. Register Timer dan Counter Masing-masing timer/counter pada ATMega8535/16/32 memiliki register tertentu yang digunakan untuk mengatur mode dan cara kerjanya, namun terdapat dua register yang digunakan bersama-sama oleh ketiga timer/counter tersebut yaitu register TIMSK dan register TIFR. Selain itu, masing-masing timer/counter memiliki register tersendiri yang akan dibahas pada subbab berikut.

    Register TIMSK Register Timer/Counter Interrupt Mask (TIMSK) digunakan oleh ketiga timer ATMega8535 untuk mengaktifkan interupsi. Register ini memiliki susunan bit seperti pada Gambar 7.2.

    Gambar 1. Register TIMSK

    1. Bit7, Timer/Counter2 Output Compare Match Interrupt Enable (OCIE2), merupakan bit untuk mengaktifkan interupsi Output Compare Match (OCM) Timer/Counter2.

  • Petunjuk Praktikum Mikrokontroler Timer dan Counter 2

    2. Bit6, Timer/Counter2 Overflow Interrupt Enable (TOIE2), merupakan bit untuk mengaktifkan interupsi Overflow Timer/Counter2.

    3. Bit5, Timer/Counter1 Input Capture Interrupt Enable (TICIE1), merupakan bit untuk mengaktifkan interupsi Input Capture Timer/Counter1.

    4. Bit4, Timer/Counter1 Output Compare A Match Interrupt Enable (OCIE1A), merupakan bit untuk mengaktifkan interupsi Output Compare A Match (OCM) Timer/Counter1.

    5. Bit3, Timer/Counter1 Output Compare B Match Interrupt Enable (OCIE1B), merupakan bit untuk mengaktifkan interupsi Output Compare B Match (OCM) Timer/Counter1.

    6. Bit2, Timer/Counter1 Overflow Interrupt Enable (TOIE1), merupakan bit untuk mengaktifkan interupsi Overflow Timer/Counter1.

    7. Bit1, Timer/Counter0 Output Compare Match Interrupt Enable (OCIE0), merupakan bit untuk mengaktifkan interupsi Output Compare Match (OCM) Timer/Counter0.

    8. Bit0, Timer/Counter0 Overflow Interrupt Enable (TOIE0), merupakan bit untuk mengaktifkan interupsi Overflow Timer/Counter0.

    Register TIFR Register Timer/Counter Interrupt Flag Register (TIFR) memilki fungsi sebagai penanda, status, atau flag apakah terjadi interupsi atau tidak. Jika bernilai 1 berarti terjadi interupsi, kemudian program akan melompat ke vektor interupsi yang sesuai. Susunan dari register TIFR ditunjukkan pada Gambar 7.3.

    Gambar 2. Register TIFR

    1. Bit7, Timer/Counter2 Output Compare Match Flag (OCF2), merupakan flag yang menunjukkan adanya interupsi Output Compare Match Timer/Counter2.

    2. Bit6, Timer/Counter2 Overflow Flag (TOV2), merupakan flag yang menunjukkan adanya interupsi Overflow Timer/Counter2.

    3. Bit5, Timer/Counter1 Input Capture Flag (ICF1), merupakan flag yang menunjukkan adanya interupsi Input Capture Timer/Counter1.

    4. Bit4, Timer/Counter1 Output Compare A Match Flag (OCF1A), merupakan flag yang menunjukkan adanya interupsi Output Compare A Match Timer/Counter1.

    5. Bit3, Timer/Counter1 Output Compare B Match Flag (OCF1B), merupakan flag yang menunjukkan adanya interupsi Output Compare B Match Timer/Counter1.

    6. Bit2, Timer/Counter1 Overflow Flag (TOV1), merupakan flag yang menunjukkan adanya interupsi Overflow Timer/Counter1.

    7. Bit1, Timer/Counter0 Output Compare Match Flag (OCF0), merupakan flag yang menunjukkan adanya interupsi Output Compare Match Timer/Counter0.

    8. Bit0, Timer/Counter0 Overflow Flag (TOV0), merupakan flag yang menunjukkan adanya interupsi Overflow Timer/Counter0.

    Timer/Counter 8 bit (Timer0 dan Timer2) Timer 8 bit dapat menghitung maksimal hingga 255 (00-FF) cacahan, dengan periode setiap hitungan (clock) tergantung dari pengaturan prescaller-nya. Register yang mengatur mode T/C dan prescaller-nya, digunakan register TCCRx (x adalah 0 atau 2). Contoh susunan TCCRx yaitu sebagai berikut (contoh untuk TCCR0)

  • Petunjuk Praktikum Mikrokontroler Timer dan Counter 3

    Gambar 3. TCCR0

    1. Bit7, Force Output Compare (FOC0), digunakan pada mode non PWM, jika diset 1

    maka pin OC0 akan mengeluarkan sinyal sesuai yang ditentukan COM01 dan COM00.

    2. Bit6 dan Bit 3, Waveform Generation Mode (WGM00 dan WGM01), digunakan untuk menentukan mode Timer/Counter0, dengan susunan sesuai Tabel 7.1.

    Table 1. Mode Timer0 dari konfigurasi WGM00 dan WGM01

    Mode WGM01 (CTC0) WGM00 (PWM0)

    Timer/Counter Mode of

    Operation TOP Update of OCR0

    TOV0 Flag Set

    on 0 0 0 Normal 0xFF Immediate MAX

    1 0 1 PWM, Phase Correct 0xFF TOP BOTTOM

    2 1 0 CTC OCR0 Immediate MAX 3 1 1 Fast PWM 0xFF TOP MAX

    3. Bit 5 dan 4, Compare Match Output Mode (COM01 dan COM00), digunakan untuk mengatur keluaran dari pin OC0. Pengaturan COM01 dan COM00 ini berbeda untuk tiap modenya, yaitu sesuai dengan Tabel 7.2, Tabel 7.3 dan Tabel 7.4.

    Table 2. Bentuk keluaran OC0 pada Mode Non-PWM

    COM01 COM00 Fungsi

    0 0 Operasi normal, OC0 tidak terhubung pin

    0 1 Kondisi toggle jika TCNT0=OCR0

    1 0 Bernilai 0 setelah TCNT0=OCR0

    1 1 Bernilai 1 setelah TCNT0-OCR0

    Table 3. Bentuk keluaran OC0 pada Mode Fast PWM

    COM01 COM00 Fungsi

    0 0 Operasi normal, OC0 tidak terhubung pin 0 1 Tidak digunakan

    1 0 Bernilai 0 setelah

    TCNT0=OCR0 dan bernilai 1 saat TOP (puncak)

    1 1 Bernilai 1 setelah TCNT0-

    OCR0, dan bernilai 0 saat TOP (puncak)

  • Petunjuk Praktikum Mikrokontroler Timer dan Counter 4

    Table 4. Bentuk keluaran OC0 pada Mode Phase Correct PWM

    COM01 COM00 Fungsi

    0 0 Operasi normal, OC0 tidak terhubung pin 0 1 Tidak digunakan

    1 0

    Bernilai 0 setelah TCNT0=OCR0 saat mencacah naik, dan bernilai

    1 setelah TCNT0=OCR0 saat mencacah turun

    1 1

    Bernilai 1 setelah TCNT0=OCR0 saat mencacah naik, dan bernilai

    0 setelah TCNT0=OCR0 saat mencacah turun

    4. Bit2, 1, dan 0, Clock Select, merupakan kombinasi bit untuk mengatur prescale

    dengan susunan sesuai Tabel 7.5.

    Table 5. Fungsi kombinasi bit CS00:2 CS02 CS01 CS00 Fungsi

    0 0 0 Tidak ada clock, timer/counter berhenti 0 0 1 Prescale = 1 0 1 0 Prescale = 8 0 1 1 Prescale = 64 1 0 0 Prescale = 256 1 0 1 Prescale = 1024

    1 1 0 Sumber clock eksternal pada pin T0, clock pada transisi

    turun (falling edge)

    1 1 1 Sumber clock eksternal pada

    pin T0, clock pada transisi naik (rising edge)

    Register pada T/C 8 bit selain TCCRx adalah sebagai berikut

    1. Timer/CounterX Register (TCNTx) Register TCNTx berfungsi untuk menyimpan data cacahan Timer/Counterx. Register ini memiliki ukuran 8-bit sehingga maksimal nilai cacahan adalah 0xFF atau 255.

    2. Output Compare Register x (OCR0) Register OCRx berfungsi sebagai data pembanding yang akan selalu dibandingkan dengan isi register TCNT0. Jika nilai TCNTx sama dengan nilai OCRx maka akan terjadi keluaran pada pin OCx sesuai dengan mode yang telah ditentukan di register TCCRx.

    Timer Counter 16 bit (Timer1) Timer1 sebagai T/C 16 bit, memiliki nilai maksimum cacahan sebanyak 65536 cacahan atau 0x0000 0xFFFF. Register yang berkaitan dengan Timer1 yaitu TCCR1A, TCCR1B, TCNT1H, TCNT1L, OCR1AH, OCR1AL, OCR1BH, OCR1BL

  • Petunjuk Praktikum Mikrokontroler Timer dan Counter 5

    1. Timer/Counter1 Control Register A (TCCR1A) TCCR1A memiliki susunan seperti pada Gambar 4.

    Gambar 4. Susunan TCCR1A

    Bit 7:6 merupakan COM1A1:0, dan bit 5:4 COM1B1:0, berfungsi untuk mengatur pola keluaran pada pin OC1A dan OC1B seperti ditunjukkan pada Tabel 6, Tabel 7, dan Tabel 8.

    Table 6. Bentuk keluaran OC1A/OC1B pada Mode Non-PWM

    COM1A1/ COM1B1

    COM1A0/ COM1B0 Fungsi

    0 0 Operasi normal,

    OC1A/OC1B tidak terhubung pin

    0 1 Kondisi toggle jika TCNT1=OCR1A/OCR1B

    1 0 Bernilai 0 setelah TCNT1=OCR1A/OCR1B

    1 1 Bernilai 1 setelah TCNT1=OCR1A/OCR1B

    Table 7. Bentuk keluaran OC1A/OC1B pada Mode Fast-PWM

    COM1A1/ COM1B1

    COM1A0/ COM1B0 Fungsi

    0 0 Operasi normal, OC1A/OC1B tidak terhubung pin

    0 1 Jika WGM13:0=15, OC1A toggle pada saat

    TCNT1=OCR1A dan OC1B sebagai port I/O WGM yang lain, OC1A/OC1B sebagai port I/O

    1 0 Bernilai 0 setelah TCNT1=OCR1A/OCR1B dan bernilai 1 setelah mencapai TOP

    1 1 Bernilai 1 setelah TCNT1=OCR1A/OCR1B dan bernilai 0 setelah mencapai TOP

    Table 8. Bentuk keluaran OC1A/OC1B pada Mode Phase Correct-PWM

    COM1A1/ COM1B1

    COM1A0/ COM1B0 Fungsi

    0 0 Operasi normal, OC1A/OC1B tidak terhubung pin

    0 1

    Jika WGM13:0=9 atau 14, OC1A toggle pada saat TCNT1=OCR1A dan OC1B sebagai port I/O

    WGM yang lain, OC1A/OC1B sebagai port I/O

    1 0 Bernilai 0 setelah TCNT1=OCR1A/OCR1B saat

    mencacah naik dan bernilai 1 setelah TCNT1=OCR1A/OCR1B saat mencacah turun

    1 1 Bernilai 1 setelah TCNT1=OCR1A/OCR1B saat

  • Petunjuk Praktikum Mikrokontroler Timer dan Counter 6

    mencacah naik dan bernilai 0 setelah TCNT1=OCR1A/OCR1B saat mencacah turun

    Bit3 adalah Force Output Compare for Channel A (FOC1A), dan Bit 2 adalah Force Output Compare for Channel B (FOC1B), digunakan pada mode Non-PWM. Jika FOC1A diset 1, maka pin OC1A akan dipaksa menghasilkan sinyal sesuai pengaturan pada COM1A1:0. Demikian pula jika FOC1B diset 1, maka pin OC1B akan dipaksa mengeluarkan sinyal sesuai pengaturan pada COM1B1:0. Bit1:0, Waveform Generation Mode (WGM11 dan WGM10). Kedua bit ini bersama-sama dengan WGM13 dan WGM12 pada register TCCR1B menentukan mode pembangkitan runtun Timer/Counter1. Fungsi WGM10:13 ditunjukkan pada Tabel. 9

    Table 9. Deskripsi Waveform Generation Mode (WGM)

    2. Timer/Counter1 Control Register B (TCCR1B)

    Gambar 5. Register TCCR1B

    Bit 7, Input Capture Noise Canceler (ICNC1), merupakan bit untuk mengaktifkan filter pada pin ICP1. Jika ICNC1 diset 1, berarti filter pada ICP1 diaktifkan.

    Bit 6, Input Capture Edge Select (ICES1), merupakan bit untuk mengatur pemicu kejadian input capture. Jika ICES1 bernilai 0, maka input capture terpicu oleh transisi turun (falling edge) pada pin ICP1, sedangkan jika bernilai 1, maka input capture terpicu oleh transisi naik (rising edge)pada ICP1. Bit 5 tidak digunakan

    Bit 4:3, WGM13:12, digunakan bersama-sama dengan WGM11:WGM10. Lihat Tabel 9.

  • Petunjuk Praktikum Mikrokontroler Timer dan Counter 7

    Bit 2:0, Clock Select (CS12:0), merupakan bit untuk mengatur prescale yang akan digunakan oleh Timer/Counter1 dimana penggunaannya sama dengan CS02:0 pada Tabel 5.

    3. Timer/Counter Register 1 (TCNT1H dan TCNT1L) Register TCNT1H dan TCNT1L merupakan register untuk menyimpan data cacahan Timer/Counter1. TCNT1H (High) merupakan MSB dari 16 bit, dan TCNT1L (Low) sebagai LSB dari 16 bit. Gabungan keduanya mampu menyimpan hingga 65535 cacahan.

    4. Output Compare Register 1 A (OCR1AH dan OCR1AL) Gabungan kedua register ini sering disebut dengan OCR1A yang berfungsi untuk menyimpan data pembanding 16 bit yang selalu dibandingkan dengan register TCNT1.

    5. Output Compare Register 1 B (OCR1BH dan OCR1BL) Gabungan kedua register ini sering disebut dengan OCR1B yang berfungsi untuk menyimpan data pembanding 16 bit yang selalu dibandingkan dengan register TCNT1.

    6. Input Capture Register 1 (ICR1H dan ICR1L) Register ini digunakan untuk mengukur rentang waktu sebuah kejadian. Dengan input capture dapat diukur frekuensi dan duty cycle suatu sinyal.

    Prescaler Pada dasarnya Timer hanya menghitung pulsa clock. Frekuensi pulsa clock yang dihitung bisa sama dengan frekuensi kristal atau dapat diperlambat menggunakan prescaler dengan faktor 8, 64, 256, 1024. Misal suatu AVR dengan kristal 8 MHz, timer yang digunakan adalah Timer1 16 bit, maka maksimum waktu yang dihasilkan adalah Tmax = 1/fclock (FFFFh + 1) = 0,125 s 65536 = 0,00819 s Untuk menghasilkan waktu yang lebih lama, dapat digunakan prescaler misal yang digunakan 1024 maka waktu maksimum yang dihasilkan timer adalah Tmax = 1/fclock (FFFFh + 1) N = 0,125 s 65536 1024 = 8,3886 s Perhitungan Waktu Timer

    = (1 + ) TCNT : Nilai timer (Hex/Dec) fclock : frekuensi kristal (Hz) Ttimer : waktu yang diinginkan (detik) N : prescaler (1, 8, 64, 256, 1024) 1+FFFFh : Nilai maksimum timer 16 bit adalah FFFFh atau 8 bit adalah FFh dan saat

    overflow. LANGKAH KERJA 1. Hubungkan salah satu port dengan display led. 2. Hubungkan switch kedalam pin T0, T1, dan T2.

  • Petunjuk Praktikum Mikrokontroler Timer dan Counter 8

    3. Buatlah program dibawah dengan CodeVision AVR, kemudian download dan amati hasilnya. Program 1

    /*membuat timer dengan TC0, fc=8Mhz */ #include #include unsigned char lamp=0xCC; interrupt [TIM0_OVF] void timer0_ovf_isr(void) { TCNT0=0X00; //set nilai T/C0 lamp=~lamp; PORTB=lamp; } void main(void) { DDRB=0XFF; //PortD sebagai keluaran PORTB=lamp; //data led dikeluarkan pada Port D TCNT0=0X00; //Set nilai awal T/C0 TCCR0=0X05; //Set skala clock 1024 TIMSK=0X01; //Aktifkan interupt timer0 TIFR=0X00; //Hapus bendera interupt timer0 #asm("sei") //aktifkan interupsi global while(1) { }; }

    Program 2 : Timer untuk membuat delay 1 detik

    /*membuat timer dengan TC0, fc=8Mhz untuk delay 1 detik */ #include #include unsigned char lamp=0xCC; unsigned char count=0; interrupt [TIM0_OVF] void timer0_ovf_isr(void) { TCNT0=0X64; //set nilai T/C0 count++; if (count==50) { lamp=~lamp; PORTB=lamp; count=0; } } void main(void) { DDRB=0XFF; //PortD sebagai keluaran PORTB=lamp; //data led dikeluarkan pada Port D TCNT0=0X64; //Set nilai awal T/C0 TCCR0=0X05; //Set skala clock 1024 TIMSK=0X01; //Aktifkan oscillosc timer0 TIFR=0X00; //Hapus bendera oscillosc timer0 #asm(sei) //aktifkan interupsi global while(1) { }; }

  • Petunjuk Praktikum Mikrokontroler Timer dan Counter 9

    Program 3 : Membuat counter mode FAST PWM dengan TC 1 /*program timer mode fast PWM dengan TC1 fc=8Mhz membuat sinyal kotak frekuensi amati keluaran 0C1A dan OC1B dengan oscilloscope */ #include void main(void) { DDRD=0XFF; //PortD out, karena OC1A/B ada di sini TCCR1A=0XA3; //configurasi fast pwm 10 bit TCCR1B=0X0B; //configurasi fast pwm 10 bit TCNT1=0X0000; //set nilai awal tcnt1 OCR1A=0X0100; //set nilai OCR1A OCR1B=0X0300; //set nilai OCR1B while(1); } Program 4 : Membuat counter dari TC0 /* Program counter dengan TC0, fc=8Mhz */ #include #include interrupt [TIM0_OVF] void timer0_ovf_isr(void) { unsigned char i; TCNT0=0XF6; for(i=1;i

  • Petunjuk Praktikum Mikrokontroler Timer dan Counter 10

    o Menjadi mode Fast PWM 8 atau 9 bit (ubah TCCR1A dan TCCR1B) o Menjadi mode PWM Phase Correct 10 bit (ubah TCCR1A dan TCCR1B)

    Pada Program 3 ubahlah juga nilai OCR1A dan OCR1B dan amati yang terjadi. Pada Program 4 ubahlah menjadi counter dengan TC1.