Jelajahi eBook
Kategori
Jelajahi Buku audio
Kategori
Jelajahi Majalah
Kategori
Jelajahi Dokumen
Kategori
MIKROPROSESO
R PEMROGRAMAN TIMER/COUNTER
Misal:
• Mikrokontroler AVR menggunakan osilator 8MHz,
maka isi register counter di increment setiap sekali
dalam 125ns (1/8MHz).
• Jadi jika kita ingin waktu tunda = 1000ns, maka kita
harus meng-clear counter terlebih dahulu kemudian
menunggu register counter hingga mencapai angka 8
(8*125ns = 1000ns)
PENDAHULUA
N
• Setiap counter dalam mikrokontroler memiliki
FLAG masing-masing.
• Flag akan di set ketika terjadi overflow pada
counter yang bersangkutan dan di clear
menggunakan software.
PENDAHULUA
N
• Metode kedua untuk pembangkitan waktu tunda
adalah mengisi (load) register counter dan
menunggunya hingga terjadi overflow dan flag di set.
• ATMega32 mempunyai 3 macam timer:
• Timer/counter 0 (8bit)
• Timer/counter 1 (16bit)
• Timer/counter 2 (8bit)
• Setiap kanal timer dilengkapi dengan prescaler yang
digunakan untuk membagi sumber clock utama
mikrokontroler (fclck_I/O) menjadi clock bagi system
pewaktuan.
PENDAHULUA
N
• Semua kanal timer AVR ATmega32 dapat
dioperasikan pada salah satu dari 4 mode:
1. Normal (mode 0)
2. Clear timer on compare match (CTC) (mode
1)
3. Fast PWM (mode 2)
4. Phase Correct PWM (mode 3)
Mode Normal
• Pada mode normal timer secara kontinu menghitung dari
$00 (Bottom) sampai $FF(Top).
• Bila TCNT0 kembali 0 pada setiap siklus counter, maka
timer/counter, maka Timer/Counter Overflow Flag (TOV0)
akan set
• Mode normal berguna untuk membangkitkan ‘clock tick’
periodic yang dapat digunakan untuk menghitung waktu
nyata atau menyediakan delay dalam suatu system.
Mode Operasi
Timer/Counter
Mode Clear Timer on Compare Match
• Timer TCNT0 direset ke 0 setiap saat pencacah TCNT0
mencapai set nilai pada OCR0. Output Compare Flag 0
(OCF0) di set jika event ini terjadi.
• OCF0 flag di-enable oleh pernyataan timer/counter0 output
compare match interrupt enable (OCIE0) flag dalam TIMSK
dan bila I-bit dalam status register di set ke-1
• Mode CTC digunakan untuk membangkitkan gelombang
digital presisi seperti sinyal periodic atau sebuah pulsa
tunggal.
Mode Operasi
Timer/Counter
TMAX=1/f_clk x (65535+1)
TMAX=1/f_clk x (255+1)
CONTO
H
• Sebuah AVR ATMega8535 menggunakan Kristal
dengan frekuensi 8MHz dan timer yang digunakan
adalah timer 16bit, maka nilai maksimum waktu
timer yang bisa dihasilkan adalah:
TMAX=1/f_clk x (65535+1)
=0,125us * (65536)
=8191.875us
CONTO
H
• Untuk menghasilkan timer yang lebih lama dapat
digunakan prescaler, misalnya 1024. maka waktu
maksimum timer yang bisa dihasilkan adalah:
TMAX=1/f_clk x (65535+1)*N
=0,125us * (65536) * 1024
=8388608us 8,388608 detik
CONTO
H
• Ketika prescaler digunakan, waktu timer dapat
diperpanjang namun tingkat ketelitiannya menjadi
turun.
• Misal dengan prescaler 1024 nilai timer akan
bertambah 1 setiap kelipatan 1024pulsa dan
membutuhkan waktu
(1/f_clk) * 1024 (1/8MHz) * 1024 128us
• Bandingkan tingkat resolusi ini tanpa prescaler
(0,125us)
PERHITUNGAN WAKTU
TIMER
• Nilai timer yang diinginkan harus terlebih dahulu
dikonversikan menjadi nilai heksadesimal yang nantinya
dimasukan kedalam untuk inisialisasi register timer.
• Persamaan
• Solusi:
• Perioda sinyal yang keluar pada PB3 T = 1/0,5Hz =
2detik
• Sinyal gelombang kotak yang mempunyai duty cycle 50%,
jadi TH = 0,50*T TH = 0,50*2s TH= 1s
• TL = T-TH = 2s-1s = 1s
CONTO
H
• Berdasarkan table, untuk membangkitkan waktu
tunda 1 detik pada Kristal 8MHz maka diperlukan
prescaler 256, jadi
• WT=256*(65536-TCNT)*0,125us
• 1s=256*(65536-TCNT)*0,125us
• TCNT= 34286 0x85EE
CONTO
H
• TCCR1A=0b00000000 (WGM11=0, WGM10=0)
• TCCR1B=0b00000100 (WGM13=0, WGM12=0,
CS12=1, CS11=0) prescaler 256
.include “m8535def.inc” ;===subrutin tunda=== Tunggu:
.org 0x0000 Ldi r16,0xEE In r16,TIFR
ldi r20,high(ramend) Out TCNTL,r16 Sbrs r16,TOV1
out sph,r20 Ldi r16,0x85 Rjmp Tunggu
ldi r20,low(ramend) Out TCNTH,r16 Ldi r16,0x00
out spl,r20 Out TCCR1A,r16
Ldi r16,0x00 Out
Sbi ddrb,3 Out TCCR1A,r16 TCCR1B,r16
Ulang: Ldi r16,0b00000100 Ldi r16,0b00000100
Cbi portb,3 Out TCCR1B,r16 Out TIFR,r16
Rcall RET
tunda Sbi
portb,3
Rcall tunda
Rjmp
Ulang
LATIHA
N
• Buat program timer1 mode normal menggunakan
frekuensi oscillator 16MHz untuk membangkitkan
gelombang kotak (duty cycle 50%) dengan
frekuensi 0,25Hz. Sinyal ini keluar melalui PB3.
abaikan waktu overhead yang ditimbulkan
instruksi.