Anda di halaman 1dari 42

Kuliah Mikrokontroler

AVR
Contoh Timer-Counter-PWM
AVR ATmega16
EruOktober 2009
PENS

8-bit Timer/Counter0 with PWM


Features

Single Compare Unit Counter


Clear Timer on Compare Match (Auto Reload)
Glitch-free, Phase Correct Pulse Width Modulator
(PWM)
Frequency Generator
External Event Counter
10-bit Clock Prescaler
Overflow and Compare Match Interrupt Sources
(TOV0 and OCF0)

Modes
Normal Mode
Clear Timer on Compare Match (CTC)
Mode
Fast PWM Mode
Phase Correct PWM Mode

Normal Mode TOP = FFH


Clock Source

System Clock Timer


T0 Pin (Falling/Rising Edge) Counter

Prescaller (System Clock, Timer)


Stop, fclock/1, fclock/8, fclock/64, fclock/256, fclock/1024

Output, OC0

Disconnect
Toggle on Compare Match
Clear on Compare Match
Set on Compare Match

Interrupt

Overflow saat TCNT0 menjadi 0


Compare Match

Value

Timer Value, TCNT0


Compare Match Value, OCR0

Counter 0
Buat program untuk menghitung jumlah
barang menggunakan sensor
optotransistor dan peraga LCD
+

PC
T0
ATmega16

LCD

Jumlah digit
= 3 + ASCIIZ

Inisialisasi
Tanpa static, tiap
perulangan tmp akan
di-create ulang

Timer 0
Hampir selalu, timer berkaitan dengan
interupsi
Buat program pembangkit multi-channel
PWM (8 channel) menggunakan timer 0
dan PORTB
Data PWM pada variable
unsigned char PWM[8]

Frekuensi PWM sekitar 100 Hz dengan f


clock 4 MHz
Untuk eksitasi motor atau sejenisnya

Prinsip
Timer diberi nilai
awal (Load) saat
inisialisasi
Isi counter akan naik
sampai mencapai
FFH dan kembali ke
00H
Saat isi
timer/counter
kembali ke 00H
akan muncul
interupsi TOV0
Pada rutin interupsi,
nilai awal counter
diisi kembali
(Reload)

Interupsi
Timer Overflow
td

255
Nilai Timer
Naik

nd

Nilai Awal
Nilai Awal
(inisialisasi)

ReLoad

0
tTOV0

Persiapan
FPWM = 100 Hz (frekuensi PWM)
RPWM = 256 (resolusi PWM, 8 bit)
FTOV0 = 256 x 100 Hz = 25,600 kHz (f clock PWM)
Fclock = 4 MHz (f clock timer/counter)
?
Pembagi = 4 MHz / 25,6 kHz = 156.25 157 clock
Pembagi = Prescaller x Hitungan Counter
Prescaller = 1 (dipilih)
Hitungan Counter = 157 clock
TCNT0 awal = 256 - 157 = 99 (63H)
Menggunakan Interupsi Timer 0 Over Flow (TOV0)

Hasil Simulasi :
173 clock per interupsi
Atau fTOV0 23,121 kHz
Mengapa ?

Inisialisasi

Sampai proses ReLoad,


butuh beberapa clock

Kesalahan
Perhitungan

Loncat, butuh
sekitar 1 clock
Hasil Simulasi :
173 clock per interupsi
Atau fTOV0 23,121 kHz
Mengapa ?
td
nd
tx
nx
tTOV0

Diperlukan waktu
saat terjadi
interupsi, loncat
ke rutin interupsi,
sampai titik nilai
TCNT0 diisi ulang
(sekitar 16 clock
sistem, menurut
simulasi)
Solusi, pilih
frekuensi timer
serendah
mungkin untuk
mengurangi efek
loncatan

Tugas
Buat pembangkit gelombang kotak
dengan frekuensi 1 kHz melalui
Port sembarang
Pin OC0 (menggunakan register OCR0)

Clear Timer on Compare Match


(CTC) Mode
Perhitungan pewaktuan lebih tepat,
karena mekanisme re-clear terjadi secara
otomatis pada level hardware
Contoh, buat aplikasi PWM seperti pada
uraian sebelumnya

Prinsip
Timer diberi nilai
awal (00H) saat
inisialisasi
255
Isi counter akan naik
sampai mencapai
Nilai Timer
OCR0 dan kembali
Naik
ke 00H secara
otomatis
Saat isi
Nilai Awal
(inisialisasi)
timer/counter
mencapai OCR0
akan muncul
interupsi OC0
Pin OC0 dapat
0
digunakan untuk
membangkitkan
gelombang tertentu

Interupsi
OC0

td

reclear

Nilai OCR0

nd

tOC0

Persiapan
FPWM = 100 Hz
RPWM = 256
FOC0 = 256 x 100 Hz = 25,600 kHz
Fclock = 4 MHz
Pembagi = 4 MHz / 25,6 kHz = 156.25
Prescaller = 1
OCR0 = 157-1 = 156 (9CH)
Menggunakan Interupsi OC0

Inisialisasi
Waktu yang dicapai
157 1 clock
Dari mana 1 clock ?

Lebih akurat dari


mode Normal
Mengapa ?

Fast PWM Mode


Buat program untuk membangkitkan
gelombang PWM dengan duty cycle 25%
dan frekuensi PWM 20 kHz melalui pin
OC0
OC0
AVR
ATmega16

Persiapan
FPWM = 20 kHz
RPWM = 256
FClockPWM = 20 kHz x 256 = 5,12 MHz
FClockCPU = 4 MHz
Prescaller = 1
Ditentukan (mengapa ?)
FClockPWM = 4 MHz
FPWM = 4 MHz / 256 = 15.625 kHz

OCR0 = 25% x 255 = 63 = 3FH

Inisialisasi

Contoh
Buat program untuk menghasilkan
gelombang sinus dengan frekuensi 100
Hz dan amplitudo 2 volt

OC0
AVR
ATmega16

Persiapan
FSinyal = 100 Hz
FSampling > 2 x 100 Hz 4 kHz
mengapa ?

FPWM >> FSampling 20 kHz


Mengapa ?

FClockCPU = 4 MHz
Prescaller = 1
Ditentukan
FClockPWM = 4 MHz
FPWM = 4 MHz / 256 = 15.625 kHz

Inisialisasi

Apakah keluaran
dari sistem ini
berupa tegangan
bolak-balik (ac) ?
Berapa frekuensi
tertinggi yang dapat
dihasilkan dengan
cara ini ?
Bagaimana caranya
untuk mendapatkan
frekuensi
gelombang lebih
dari beberapa kHz ?
Misalkan untuk
audio 15 ~ 20 kHz

Phase Correct PWM Mode


Buat program untuk membangkitkan
gelombang PWM dengan duty cycle 25%
dan frekuensi PWM 10 kHz melalui pin
OC0
OC0
AVR
ATmega16

Persiapan
FPWM = 10 kHz
RPWM = 256
FClockPWM = 10 kHz x 256 x 2 = 5,12 MHz
FClockCPU = 4 MHz
Prescaller = 1
Ditentukan
FClockPWM = 4 MHz
FPWM = 4 MHz / (2 x 256) = 7.8125 kHz

OCR0 = 25% x 255 = 63 = 3FH

Phase Correct PWM Mode

Inisialisasi

16-bit Timer/Counter1
Features

True 16-bit Design (i.e., Allows 16-bit PWM)


Two Independent Output Compare Units
Double Buffered Output Compare Registers
One Input Capture Unit
Input Capture Noise Canceler
Clear Timer on Compare Match (Auto Reload)
Glitch-free, Phase Correct Pulse Width Modulator (PWM)
Variable PWM Period
Frequency Generator
External Event Counter
Four Independent Interrupt Sources (TOV1, OCF1A, OCF1B,
and ICF1)

Modes
Normal Mode
Clear Timer on Compare Match (CTC)
Mode
Fast PWM Mode
Phase Correct PWM Mode
Phase and Frequency Correct PWM Mode

Operasi 16 Bit

Normal Mode

Clear Timer on Compare Match


(CTC) Mode

Frequency Counter

Tachometer

Fast PWM Mode

Phase Correct PWM Mode

Phase and Frequency Correct


PWM Mode

8-bit Timer/Counter2 with PWM and


Asynchronous Operation
Features
Single Compare unit Counter
Clear Timer on Compare Match (Auto Reload)
Glitch-free, Phase Correct Pulse Width Modulator
(PWM)
Frequency Generator
10-bit Clock Prescaler
Overflow and Compare Match Interrupt Sources
(TOV2 and OCF2)
Allows clocking from External 32 kHz Watch Crystal
Independent of the I/O Clock

Modes
Normal Mode
Clear Timer on Compare Match (CTC)
Mode
Fast PWM Mode
Phase Correct PWM Mode

Normal Mode

Clear Timer on Compare Match


(CTC) Mode

Fast PWM Mode

Phase Correct PWM Mode

Anda mungkin juga menyukai