MODUL VIII
MENGGUNAKAN TIMER/COUNTER
DALAM MIKROKONTROLER ATMEGA8535
- Mahasiswa mampu
menggunakan fitur timer/counter mikrokontroler.
- Mahasiswa mampu
menggunakan mikrokontroler untuk membuat timer.
- Mahasiswa mampu
menggunakan mikrokontroler untuk menghitung banyaknya pulsa yang masuk.
Timer/counter dalam ATmega8535 ada 3
yaitu:
·
Timer/counter 0
·
Timer/counter 1
·
Timer/counter 2
Interrupt timer berasal dari dua sumber
yaitu:
·
Overflow interrupt, dimana interrupt terjadi jika TCNTn
mencapai 255 untuk timer 8 bit dan 65535 untuk timer 16 bit.
·
Compare match interrupt, dimana interrupt terjadi jika nilai
OCR sama dengan TCNTn.
Secara
umum fitur Timer/Counter mikrokontroler
ATmega8535 dapat digunakan untuk berbagai macam fungsi, yaitu:
·
Timer/delay
time
Pada
dasarnya ketika Timer/Counter difungsikan sebagai Timer, sistem hanya
menghitung pulsa clock. Frekuensi pulsa clock yang dihitung tersebut bisa sama
dengan frekuensi kristal yang digunakan atau dapat diperlambat menggunakan
prescaler dengan faktor 8, 64, 256, atau 1024. Contohnya jika sebuah sistem
mikrokontroler menggunakan kristal dengan frekuensi 4 MHz dan timer yang digunakan
adalah timer 8 bit, maka maksimum waktu timer yang bisa dihasilkan adalah:
Untuk menghasilkan timer yang lebih lama dapat digunakan
prescaler, misalnya 1024, maka maksimum waktu timer yang bisa dihasilkan
adalah:
Untuk menghitung nilai TCNT supaya
menghasilkan waktu timer tertentu dipergunakan rumus berikut:
Dimana:
TCNT =
nilai Timer (Heksadesimal)
fCLK
= Frekuensi clock kristal yang
digunakan (Hz)
Ttimer =
Waktu timer yang diinginkan (detik)
N =
prescaler (1,8,64,256,1024)
1+FFh =
nilai maksimum timer adalah FFh dan overflow saat FFh ke 00h
·
Counter
Secara prinsip, memfungsikan
Timer/Counter sebagai Counter sama dengan fungsi sebagai Timer akan tetapi
sumber clock bukan berasal dari frekuensi kristal, tetapi input dari kaki Tn.
Dengan memanfaatkan counter naik, maka bisa diberikan nilai TCNT yang sesuai
dengan rumus berikut:
TCNT =
(1+FFH) – jumlah counter
Sehingga jika diinginkan membuat
counter 5, maka nilai TCNT adalah FBH.
·
Mode CTC
Dengan
mode ini, maka mikrokontroler bisa membangkitkan sinyal dengan frekuensi
tertentu sesuai dengan rumus berikut:
Jika diinginkan untuk membangkitkan
sinyal dengan frekuensi 1 kHz, maka dengan frekuensi clock 4 MHz, dan N=16,
maka diperoleh nilai OCR sebagai berikut:
·
Mode PWM
Dengan
mode ini, maka mikrokontroler bisa membangkitkan sinyal dengan frekuensi
tertentu dan duty cycle tertentu sesuai dengan rumus sebagai berikut.
Untuk Fast PWM:
Untuk Phase Correct PWM:
Dimana nilai OCR yang berkisar dari 0
sampai 255 akan mempengaruhi duty cycle sinyal yang dibangkitkan.
- 1
set PC/Laptop yang sudah berisi program Code Vision dan Khazama
- 1
buah multimeter dengan fasilitas frequency counter
- 1
buah ISP Downloader AVR
- 1
buah sistem minimum AVR
- 1
buah I/O
- 1
buah kabel printer USB
- 2
buah kabel pita hitam
TIMER
1.
Rangkailah peralatan yang diperlukan seperti
gambar dibawah. Hubungkan soket jumper PORTC pada minimum system dengan soket
jumper pada OUTPUT Trainer I/O.
2.
Buka program Code Vision AVR
3.
Buatlah project baru. Pada saat mengeset chip
dan clock, set juga bagian PORTC untuk LED serta Timer seperti gambar dibawah.
Kemudian simpanlah file tersebut.
·
Nilai Clock Value adalah Nilai Clock Frequency
Chip (Fclock) dibagi dengan prescaller dimana prescaller tersebuat
bernilai 1, 8, 64, 256, atau 1024
·
Contoh jika nilai Fclock = 4 Mhz maka
jika kita ingin menggunakan prescaller 1024 setting Clock Value nya adalah
4Mhz/1024=3,906 Khz
4.
Perhatikan blok program berikut.
5.
Tuliskan script berikut dalam interrupt:
6.
Compile dan Build program jika ada yang error
perbaiki program. Masukkan file hex menggunakan Khanzama AVR Programer. Klik
auto program.
7.
Perhatikan dan catat nyala LED.
8.
Ubah nilai TCCR0 menjadi 0x04 dan 0x03.
9.
Perhatikan perbedaan nyala LED dengan nilai TCCR
yang berbeda-beda.
10. Ulangi
langkah 3-9 untuk Timer2 dengan TCNT=0x80;
11. Buat
Project baru untuk Timer1 dengan TCNT = 0xd5d0
12. Perhatikan
blok berikut
c
13. Tuliskan
script berikut dalam blok interrupt
14. Compile dan Build program jika ada yang error
perbaiki program. Masukkan file hex menggunakan Khanzama AVR Programer. Klik
auto program.
15. Perhatikan
dan catat nyala LED.
16. Ubah
nilai TCCR1B sehingga menjadi 0x04, 0x03, 0x02, 0x01.
17. Perhatikan
perbedaan nyala LED dengan nilai TCCR yang berbeda-beda.
18. Buatlah
program menggunakan Timer 16 bit (Timer1) dengan nilai TCCR1B=0x05, Ubah nilai
TCNT sehingga menghasilkan timer 1 detik.
COUNTER
1.
Rangkailah peralatan yang diperlukan seperti
dalam gambar dibawah. Hubungkan soket jumper PORTC pada minimum system dengan
soket jumper pada OUTPUT LED. Hubungkan kaki IS1 ke PORTB.0 (T0).
2.
Buka program Code Vision AVR
3.
Buatlah project baru. Pada saat mengeset chip
dan clock, set juga bagian PORTC untuk LED serta Timer seperti gambar dibawah.
Kemudian simpanlah file tersebuT.
4.
Perhatikan blok program berikut.
5.
Tuliskan script berikut dalam interrupt:
6.
Compile dan Build program jika ada yang error
perbaiki program. Masukkan file hex menggunakan Khanzama AVR Programer. Klik
auto program.
7.
Tekan push button IS1 Perhatikan dan catat nyala
LED.
8.
Lakukan hal serupa dengan Timer dengan mengganti
nilai TCNT0 menjadi 0xFC dan 0xF0
CTC
- Rangkailah
peralatan yang diperlukan seperti dalam Gambar 1.2. Hubungkan
PORTB pada minimum
system dengan kabel data pada
OUTPUT TRAINER.
- Buka program Code
Vision AVR
- Buatlah project baru. Pada saat mengeset chip dan clock, set juga bagian PORTB untuk LED serta Timer. Kemudian simpanlah file tersebut.
- Klik Yes jika muncul dialog diatas.
- Perhatikan blok program berikut.Compile dan Build program jika ada yang error perbaiki program. Masukkan file hex menggunakan Khanzama AVR Programer. Klik auto program.
- Lihat nyala LED di PORTB.3.
- Ukur frekuensi pada PORTB.3 dengan
frequency counter di AVOmeter
- Ubah Nilai OCR0 menjadi 0x3E dan 0x1E
(lihat tabel CTC pada data hasil percobaan)
- Lihat nyala LED di PORTB.3.
- Ukur frekuensi pada PORTB.3 dengan
frequency counter di AVOmeter
- Amati Nyala LED
- Buatlah program yang dapat membangkitkan
sinyal dengan frekuensi 1 Hz.
PULSE WIDTH MODULATION (PWM)
- Rangkailah
peralatan yang diperlukan seperti dalam Gambar 1.2. Hubungkan
PORTB pada minimum
system dengan kabel data pada
OUTPUT TRAINER.
- Buka program Code
Vision AVR
- Buatlah project baru. Pada saat mengeset chip dan clock, set juga bagian PORTB untuk LED serta Timer. Kemudian simpanlah file tersebut.
- Klik Yes jika muncul dialog diatas
- Perhatikan blok program berikut.
- Compile dan Build program jika ada yang
error perbaiki program. Masukkan file hex menggunakan Khanzama AVR
Programer. Klik auto program.
- Lihat nyala LED di PORTB.3.
- Ukur frekuensi pada PORTB.3
- Ubah Nilai OCR0 menjadi 0x00 dan 0xFF
(lihat tabel PWM pada data hasil percobaan)
- Amati Nyala LED
- Ulang langkah 3-9
dengan mode Fast PWM.
- Buatlah program yang dapat mengubah nilai
Duty Cycle sesuai dengan input Potensiometer !
Potensiometer 0 V (minimum) à
Duty Cycle 0%
Potensiomter 5V (Maksimum) à
Duty Cycle 100%
TIMER
No
|
TIMER
|
TCCRx
|
TCNTx
|
Kondisi Led
|
Delay
|
1
|
Timer0
|
0x05
|
0x50
|
00000000 à
11111111
|
2s
|
2
|
Timer0
|
0x04
|
0x50
|
00000000 à
11111111
|
1s
|
3
|
Timer0
|
0x03
|
0x50
|
11111111
|
Diam
|
6
|
Timer2
|
0x05
|
0x80
|
00000000 à
11111111
|
2s
|
7
|
Timer1
|
0x05
|
0xD5D0
|
00000000 à
11111111
|
20s
|
8
|
Timer1
|
0x04
|
0xD5D0
|
00000000 à
11111111
|
2s
|
9
|
Timer1
|
0x03
|
0xD5D0
|
00000000 à
11111111
|
2s
|
10
|
Timer1
|
0x02
|
0xD5D0
|
00000000 à
11111111
|
10ms
|
11
|
Timer1
|
0x01
|
0xD5D0
|
11111111
|
Diam
|
12
|
Timer1
|
00000000 à
11111111
|
1 s
|
Counter
No
|
TIMER
|
TCCRx
|
TCNTx
|
Jumlah Penekanan Tombol IS1 Hingga
LED Menyala
|
Jumlah Penekanan Tombol IS1 Hingga
LED Mati
|
1
|
Timer0
|
0x06
|
0xFB
|
||
2
|
Timer0
|
0x06
|
0xFC
|
||
3
|
Timer0
|
0x06
|
0xF0
|
CTC
Nilai OCR0/OCR1A/OCR1B/OCR2
|
N
|
Nyala LED
|
Frekuensi
|
0x7C
|
Nyala pada bit 3
|
61,8 hz
|
|
0x3E
|
Menyala semua
|
122,7 hz
|
|
0x1E
|
Menyala semua
|
249,3
|
|
1 Hz
|
PWM
Fast PWM
|
|||
Nilai OCR0
|
Nyala LED
|
Tegangan LED
|
Frekuensi
|
0x00
|
Kedip
|
3,5 v
|
50,11
Hz
3,775
Hz
50,08
Hz
|
0x50
|
Kedip
|
2,8 v
|
|
0xFF
|
nyala
|
3,8 v
|
|
Phase Correct PWM
|
|||
Nilai OCR0
|
Nyala LED
|
Tegangan LED
|
Frekuensi
|
0x00
|
Mati
|
1,3 mv
|
50,09
Hz
50,12
Hz
|
0x50
|
Kedip
|
314 mv
|
|
0xFF
|
nyala
|
4,77 v
|
TIMER
- Analisa
data hasil pada tabel Timer dengan menggunakan rumus :
Hitung Nilai Ttimer :
TIMER
|
TCCRx
|
TCNTx
|
Fclock
(Hz)
|
Prescaler
|
8 / 16
bit
|
T (s)
|
Keterangan
|
Timer0
|
0x05
|
0x50
|
4.000.000
|
1.024
|
255
|
0,05
|
Delay tidak terlihat
|
Timer0
|
0x04
|
0x50
|
4.000.000
|
Delay tidak terlihat
|
|||
Timer0
|
0x03
|
0x50
|
4.000.000
|
Diam
|
|||
Timer2
|
0x05
|
0x80
|
4.000.000
|
Delay tidak terlihat
|
|||
Timer1
|
0x05
|
0xD5D0
|
4.000.000
|
Delay 20s
|
|||
Timer1
|
0x04
|
0xD5D0
|
4.000.000
|
Delay 2s
|
|||
Timer1
|
0x03
|
0xD5D0
|
4.000.000
|
Delay 1 s
|
|||
Timer1
|
0x02
|
0xD5D0
|
4.000.000
|
Delay tidak terlihat
|
|||
Timer1
|
0x01
|
0xD5D0
|
4.000.000
|
Diam
|
- Bagaimana
anda mendapatkan timer dengan Ttimer 1 detik dengan menggunakan
Timer1?
COUNTER
- Analisa
data hasil pada tabel counter
CTC
- Hitung
nilai frekuensi
Nilai OCR0/OCR1A/OCR1B/OCR2
|
N
|
Nyala LED
|
Frekuensi
|
0x7C
|
Nyala pada bit 3
|
61,8 Hz
|
|
0x3E
|
Nyala
|
127,7
Hz
|
|
0x1E
|
Nyala
|
249,3
Hz
|
- Bagaimana
cara anda membangkitkan sinyal dengan frekuensi 1 detik menggunakan
Timer/Counter mode CTC?
PWM
- Hitung
nilai frekuensi dan duty cycle
Fast PWM
|
|||
Nilai OCR0
|
Duty Cycle Berdasarkan Nilai OCR0
|
Duty Cycle Berdasarkan Nilai Tegangan
LED
|
Frekuensi
|
0x00
|
|||
0x50
|
|||
0xFF
|
|||
Phase Correct PWM
|
|||
Nilai OCR0
|
Duty Cycle Berdasarkan Nilai OCR0
|
Duty Cycle Berdasarkan Nilai Tegangan
LED
|
Frekuensi
|
0x00
|
|||
0x50
|
|||
0xFF
|
2. Jelaskan
perbedaan mode Fast PWM dengan Phase Correct PWM
3. Mengapa
nyala led pada mode Fast PWM berkedip lebih cepat daripada mode Phase Correct
PWM?
4. Source
Code Program langkah no 11.
0 Profil penulis:
Posting Komentar