Anda di halaman 1dari 28

PRAKTIKUM I

BASIC PWM BASED ATMEGA128


I. TUJUAN
1. Mahasiswa mengerti cara membuat program C pada Code Vision AVR untuk
membuat gelombang PWM.
2. Mahasiswa mengerti Mode operasi Timer yang digunakan untuk gelombang PWM.
3. Mahasiswa mampu mengatur duty cycle gelombang PWM pada ATMEGA128.
4. Mahasiswa mengerti perbedaan tiap Mode operasi pada Timer.
II. DASAR TEORI
ATMEGA128
Merupakan salah satu varian dari mikrokontroler AVR 8-bit. Beberapa fitur
yang dimiliki adalah memiliki beberapa memory yang bersifat non-volatile, yaitu
128 Kbytes of In-System Self-Programmable Flash program memory (128 Kbytes
memory flash untuk pemrograman), 4 Kbytes memori EEPROM, 4 Kbytes memori
internal SRAM, write/erase cycles : 10.000 flash/ 100.000 EEPROM (program dalam
mikrokontroler dapat diisi dan dihapus berulang kali sampai 10.000 kali untuk flash
memori atau 100.000 kali untuk penyimpanan program/data di EEPROM).
Selain memori, fitur yang dimiliki oleh mikrokontroler atmega128 ini adalah
pada perangkat peripheral interface-nya, yaitu memiliki 2 buah 8-bit timer / counter,
2 buah expand 16-bit timer / counter, RTC (Real Time Counter) dengan oscillator
yang terpisah, 2 buah 8-bit chanel PWM, 6 PWM chanel dengan resolusi
pemrograman dari 2 sampai 16 bits, output compare modulator, 8-chanel 10-bit
ADC, 2 buah TWI (Two Wire Interface), 2 buah serial USARTs, master / slave SPI
serial interface, Programmable Watchdog Timer dengan On-chip Oscillator, On-chip
analog comparator, dan memiliki 53 programmable I/O. Sedangkan untuk
pengoperasiannya sendiri, Miktrokontroler ATmega128 dapat dioperasikan pada
catuan 4.5 5.5 V untuk ATmega128 dengan clock speed 0 16 MHz.

Gambar 1. Pinout ATMEGA128

TIMER dan COUNTER


Timer dan counter merupakan fitur yang telah tertanam di micocontroller
AVR yang memiliki fungsi terhadap waktu. Fungsi pewaktu yang dimaksud disini
adalah penentuan kapan program tersebut dijalankan, tidak hanya itu saja fungsi
timer yang lainnya adalah PWM, ADC, dan Oscillator. Prinsip kerja timer dengan
cara membagi frekuensi (prescaler) pada clock yang terdapat pada mikrokontroler
sehingga timer dapat berjalan sesuai dengan frekuensi yang di kehendaki. Timer
merupakan fungsi waktu yang sumber clocknya berasal dari clock internal.
Sedangkan counter merupakan fungsi perhitungan yang sumber clocknya berasal
dari external mikrokontroler. Pada mikrokontroler ATMEGA 128 memiliki 4 buah
timer yaitu timer 0 (8bit), timer 1 (16bit), timer 2 (8bit), timer 3 (16bit).
o Timer 0 (8 bit)
Timer 0 pada ATMEGA128 memiliki fitur utama sebagai berikut :
Single Channel 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 (TOV0 and OCF0)
Allows Clocking from External 32kHz Watch Crystal Independent of the
I/O Clock

Gambar 2. Blok Diagram Timer/Counter 8 bit


Register yang terdapat pada Timer/Counter 0 :
TCCR0

Gambar 3. Timer/Counter Control Register 0

Bit 7 FOC0 : Force Ouput Compare


Bit FOC0 hanya aktif ketika bit WGM berada pada mode non-PWM.
Namun untuk memastikan kompatibilitas dengan perangkat yang akan
datang, bit ini harus di set pada nilai 0 ketika TCCR0 beroperasi pada mode
PWM. Ketika bit FOC0 diberi logika 1, akan dipaksa membandingkan unit
pembangkit gelombang. Keluaran OC0 berubah sesuai dengan setting pada
bit COM01:0. Dengan catatan bit FOC0 diimplementasikan sebagai strobe.
Oleh karena itu nilai bit COM01:0 saat ini merupakan efek dari
pembandingan secara paksa. Strobe FOC0 tidak akan menghasilkan interrupt
apapun, ataupun tidak akan menghapus timer pada mode CTC yang
menggunakan TOP OCRO. Bit FOC0 selalu dibaca nol.
Bit 6, 3 WGM01:0: Waveform Generation Mode
Bit ini mengontrol perhitungan urutan pada counter, sumber nilai
counter maksimal, dan tipe gelombang apa yang digunakan. Mode operasi
yang didukung oleh Timer/Counter adalah : Normal Mode, Clear Timer On
Compare Match (CTC) Mode, dan dua tipe dari PWM.
Tabel 1. deskripsi bit tiap mode.

Bit 5:4 COM01:0: Compare Match Output Mode


Bit ini mengontrol perilaku dari pin Output Compare (OC0). Ketika
OC0 terhubung dengan pin, maka fungsi dari bit COM01:0 didasarkan setting
bit pada WGM01:0. Tabel dibawah ini menunjukkan fungsi bit COM01:0
ketika bit WGM01:0 di set pada mode Normal maupun CTC (non-PWM).
Tabel 2. Compare Ouput Mode, non-PWM Mode

Tabel 3. Compare Ouput Mode, Fast PWM Mode

Tabel 4. Compare Ouput Mode, Phase Correct PWM Mode

Bit 2:0 CS02:0: Clock Select


Bit ini memiliki tugas sebagai pemili (prescaler) atau mendefinisikan
pulsa atau clock yang akan masuk ke dalam Timer/Counter 0.
Tabel 5. Pemilih / Prescaler.

Timer/Counter Register (TCNT0)

Gambar 4. Timer/Counter Register 0


Register ini bertugas untuk menghitung pulsa yang masuk ke
dalam timer/counter. Kapasitas register ini sebesar 8-bit atau 256
hitungan. Setelah mencapai hitungan maksimal maka akan kembali ke nol
(0) / overflow.

Output Compare Registers (OCR0)

Gambar 5. Ouput Compare Register 0


Register ini bertugas sebagai register pembanding yang bisa
ditentukan besarnya sesuai dengan kebutuhan.

o Timer 1 dan Timer 3 (16 bit)


Timer 1 dan 3 pada ATMEGA128 memiliki fitur utama sebagai berikut :
True 16-bit Design (i.e.,Allows 16-bit PWM)
Three 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
Ten Independent Interrupt Sources (TOV1, OCF1A, OCF1B, OCF1C,
ICF1, TOV3, OCF3A, OCF3B,OCF3C, and ICF3)

Gambar 6. Blok Diagram Timer 16 Bit


Register yang terdapat pada Timer/Counter 1 dan 3 :
Timer/Counter 1 Control Register A (TCCR1A)

Timer/Counter 3 Control Register A (TCCR3A)

Tabel 6. Compare Ouput Mode, Non-PWM

Tabel 7. Compare Output Mode, Fast PWM

Tabel 8. Compare Output Mode, Phase Correct and Phase and Frequency
Correct mode.

Timer/Counter 1 Control Register B (TCCR1B)

Timer/Counter 3 Control Register B (TCCR3B)

Bit 7 ICNCn: Input Capture Noise Canceler


Memberi nilai 1 pada bit ini mengaktifkan Input Capture Noise Canceler.
Ketika Noise Canceler diaktifkan, masukan ICPn akan di filter.
Bit 6 ICESn : Input Capture Edge Select
Bit ini memilih tepi mana pada Input Capture Pin (ICPn) yang digunakan
untuk menyulut pencuplikan. Ketika bit ICESn berisi 0, tepi menurun
digunakan sebagai trigger dan ketika bit ini berisi 1, tepi naik akan mentrigger
pencuplikan.
Bit 5 Reserved Bit
Bit ini disediakan untuk penggunakan pada masa yang akan datang. Untuk
memastikan kompatibilitas dengan perangkat yang akan datang, bit ini harus
diisi 0 ketika bit TCCRnB digunakan.
Bit 4:3 WGMn3:2: Waveform Generation Mode

Melihat deskripsi dari register TCCRnA


Bit 2:0 CSn2:0: Clock Speed
Memilih clock yang akan digunakan pada Timer/Counter
Tabel 9. Deskripsi bit untuk clock yang digunakan

Timer/Counter 1 Control Register C (TCCR1C)

Timer/Counter 3 Control Register C (TCCR3C)

Timer/Counter 1 TCNT1H TCNT1L

Timer/Counter 3 TCNT3H TCNT3L

Output Compare Register 1 A OCR1AH dan OCR1AL

Output Compare Register 1 B OCR1BH dan OCR1BL

Output Compare Register 1 C OCR1CH dan OCR1CL

Output Compare Register 3 A OCR3AH dan OCR3AL

Output Compare Register 3 B OCR3BH dan OCR3BL

Output Compare Register 3 C OCR3CH dan OCR3CL

Input Capture Register 1 ICR1H dan ICR1L

Input Capture Register 3 ICR3H dan ICR3L

Timer/Counter Interrupt Mask Register TIMSK

Extended Timer/Counter Interrupt Mask Register ETIMSK

Timer/Counter 1, Interrupt Flag Register - TIFR

Extended Timer/Counter 1, Interrupt Flag Register - ETIFR

Mode Operasi Timer ATMEGA 128


Ada 3 mode operasi yang digunakan untuk menjalankan Timer/Counter dan pin
ouput compare dengan mengkombinasikan WGM (wave generation mode) dan COM
compare output mode bit. COM tidak mempengaruhi urutan counting selama WGM
bit bekerja. Ketiga mode tersebut adalah :
1. Normal Mode
Modus yang paling sederhana dari operasi adalah mode normal (WGM01: 0 =

0). Dalam mode ini penghitungan arah selalu up (incrementing), dan tidak ada
counter yang jelas dilakukan. Counter hanya overruns ketika melewati
maksimum nilai 8-bit (TOP = 0xFF) dan kemudian restart dari bawah (0x00).
Dalam operasi normal Timer / counter meluap bendera (TOV0) akan ditetapkan
dalam yang sama Timer jam siklus sebagai TCNT0 menjadi nol. Bendera TOV0
dalam hal ini berperilaku seperti kesembilan sebuah bit, kecuali bahwa itu hanya
diatur, tidak dibersihkan. Namun, dikombinasikan dengan overflow timer
interrupt yang secara otomatis membersihkan bendera TOV0, resolusi waktu
dapat ditingkatkan dengan software. di sana ada kasus khusus yang perlu
diperhatikan dalam mode normal, nilai baru counter dapat ditulis kapan saja.
Output membandingkan Unit dapat digunakan untuk menghasilkan interupsi
di beberapa waktu tertentu. Menggunakan output dibandingkan dengan
menghasilkan bentuk gelombang dalam mode normal tidak dianjurkan, karena
ini akan menempati terlalu banyak waktu CPU.
2.

Clear Timer on Compare Match (CTC) Mode


Di Clear Timer on Compare atau mode CTC (WGM01: 0 = 2), OCR0 Register
digunakan untuk memanipulasi resolusi counter. Dalam mode CTC counter
dibersihkan ke nol ketika nilai counter (TCNT0) sesuai dengan OCR0. The
OCR0 mendefinisikan nilai atas untuk counter, maka juga yang resolusi.
Mode ini memungkinkan kontrol yang lebih besar dari frekuensi output
pertandingan membandingkan. Hal ini juga menyederhanakan pengoperasian
menghitung peristiwa eksternal. Diagram waktu untuk mode CTC ditunjukkan
pada Gambar 2. Nilai counter (TCNT0) meningkatkan sampai
membandingkan pertandingan terjadi antara TCNT0 dan OCR0, dan kemudian
counter (TCNT0) dibersihkan.

Untuk menghasilkan output gelombang dalam mode CTC, output OC0 dapat diatur
menjadi logika toogle level pada setiap perbandingan dengan menetapkan mode bit
output compare dengan mode toogle (COM01: 0 = 1). Nilai OC0 tidak akan terlihat
pada port pin kecuali arah data untuk pin diatur ke output.

Dengan nilai variable N dapat direpresentasikan sebagai factor prescale


(1,8,32,64,128,256, atau 1024)

3.

Fast PWM Mode


Dalam mode fast PWM , counter bertambah sampai nilai counter sesuai dengan
nilai MAX. Counter kemudian dibersihkan di mengikuti siklus clock waktu.
Diagram waktu untuk cepat Modus PWM ditunjukkan pada nilai Gambar 3.
TCNT0 dalam diagram waktu ditampilkan sebagai histogram untuk
menggambarkan operasi single-slope. Diagram termasuk non-inverted dan
inverted Output PWM. tanda kecil garis horizontal di slope TCNT0 mewakili
membandingkan antara OCR0 dan TCNT0.

Frekuensi PWM untuk output dapat dihitung dengan mengikuti persamaan


berikut :

Dengan variabel N mewakili factor prescale (1, 8, 32, 64, 128, 256 atau 1024)
PULSE WIDTH MODULATION (PWM)
Pulse Width Modulation (PWM) secara umum adalah sebuah cara memanipulasi
lebar sinyal yang dinyatakan dengan pulsa dalam suatu perioda, untuk mendapatkan
tegangan rata-rata yang berbeda. Beberapa contoh aplikasi PWM adalah
temodulasian data untuk telekomunikasi, pengontrolan daya atau tegangan yang
masuk ke beban, regulator tegangan, audio effect dan penguatan, serta aplikasiaplikasi lainnya. Aplikasi PWM berbasis mikrokontroler biasanya berupa
pengendalian kecepatan motor DC, pengendalian motor servo, pengaturan nyala
terang LED dan lain sebagainya.
Sinyal PWM pada umumnya memiliki amplitudo dan frekuensi dasar yang tetap,
namun memiliki lebar pulsa yang bervariasi. Lebar Pulsa PWM berbanding lurus
dengan amplitudo sinyal asli yang belum termodulasi. Artinya, Sinyal PWM
memiliki frekuensi gelombang yang tetap namun duty cycle bervariasi (antara 0%
hingga 100%).

10

Pulse Width Modulation (PWM) merupakan salah satu teknik untuk mendapatkan
signal analog dari sebuah piranti digital. Sebenarnya Sinyal PWM dapat dibangkitkan
dengan banyak cara, dapat menggunakan metode analog dengan menggunakan
rankaian op-amp atau dengan menggunakan metode digital. Dengan metode analog
setiap perubahan PWM-nya sangat halus, sedangkan menggunakan metode digital
setiap perubahan PWM dipengaruhi oleh resolusi dari PWM itu sendiri. Resolusi
adalah jumlah variasi perubahan nilai dalam PWM tersebut. Misalkan suatu PWM
memiliki resolusi 8 bit berarti PWM ini memiliki variasi perubahan nilai sebanyak
28 = 256 variasi mulai dari 0 255 perubahan nilai yang mewakili duty cycle 0
100% dari keluaran PWM tersebut.

Dengan cara mengatur lebar pulsa on dan off dalam satu perioda gelombang
melalui pemberian besar sinyal referensi output dari suatu PWM akan didapat duty
cycle yang diinginkan. Duty cycle 100% berarti sinyal tegangan pengatur motor
dilewatkan seluruhnya. Jika tegangan catu 100V, maka motor akan mendapat
tegangan 100V. pada duty cycle 50%, tegangan pada motor hanya akan diberikan
50% dari total tegangan yang ada, begitu seterusnya.

Dengan menghitung duty cycle yang diberikan, akan didapat tegangan output yang
dihasilkan. Sesuai dengan rumus yang telah dijelaskan pada gambar. Average voltage
merupakan tegangan output pada motor yang dikontrol oleh sinyal PWM. a adalah nilai
duty cycle saat kondisi sinyal on. b adalah nilai duty cycle saat kondisi sinyal off.
Vfull adalah tegangan maksimum pada motor. Dengan menggunakan rumus diatas,
maka akan didapatkan tegangan output sesuai dengan sinyal kontrol PWM yang
dibangkitkan.
III. ALAT dan BAHAN
PC / Laptop ( Telah terinstall CVAVR )
Downloader
Osiloskop
Modul ATMEGA 128
Voltmeter DC

11

IV. RANGKAIAN PERCOBAAN

V. LANGKAH PERCOBAAN
1. Buka software Code Vision AVR. Maka akan muncul jendela dari CVAVR.

2. Untuk membuat project baru :


Klik File New Project. Maka akan muncul jendela konfirmasi. Untuk
menggunakan Wizard atau Template dari CVAVR, pilih Yes.

Langkah selanjutnya adalah memilih tipe chip yang akan digunakan

12

Setelah memilih tipe dari chip yang digunakan, maka akan muncul jendela
wizard dari CVAVR. Wizard disini bertujuan untuk memudahkan user
mengaktifkan dan mengatur fitur yang akan digunakan.

Pertama-tama masuk ke tab Chip. Pilih varian dari chip yang digunakan.
Dalam praktikum kali ini yaitu ATMEGA128. Atur juga frekuensi dari kristal
eksternal yang digunakan oleh chip tersebut

Untuk mengaktifkan PWM, masuk ke tab Timer. Pilih Timer yang akan
digunakan. Misal Timer 0.
Ada beberapa hal yang perlu diatur. Yang pertama adalah Clock Source, yaitu
sumber clock dati Timer/Counter yang digunakan. Karena sumber clock yang
digunakan bersumber dari clock sistem, maka kita pilih System Clock

13

Hal selanjutnya yang perlu kita atur ialah Clock Value. Clock Value sangat
berhubungan dengan prescaller yang digunakan
Clock Value = System Clock / Prescaller
Jika prescaller yang digunakan ialah 1 maka nilai Clock Value 8 MHz atau 8000
KHz.

Setelah mengatur Clock Value, Selanjutnya ialah mengatur Mode Operasi dari
Timer/Counter yang digunakan. Misal kita gunakan mode operasi Fast PWM.

Kemudian kita atur bagaimana output gelombang yang dikeluarkan oleh PWM.
Pada mode Fast PWM terdapat 2 pilihan yaitu membalik dan tak membalik. Kita
pilih yang tidak membalik.

Mengaktifkan interrupt dari timer

Inisialisasi nilai start dari timer


Proses pembandingan terjadi pada nilai ini

14

3. Setelah proses konfigurasi selesai, langkah selanjutnya adalah menyimpan project


tersebut dalam beberapa ekstensi file. Klik FileSave. Beri nama yang sama
kepada 3 ekstensi file tersebut. (.cwp , .c , .prj ) . Hasil konfigurasi akan muncul
seperti gambar dibawah ini.

4. Untuk mengatur Duty Cycle PWM keluaran mikro, maka kita atur nilai dari OCRn.
Jika yang digunakan Timer 0, maka kita atur nilai dari OCR0. Tuliskan pada while
seperti contoh dibawah ini.

5.

Agar program dapat di download ke mikrokontroller ATMEGA128, pertama-tama


atur tipe chip programmer (downloader) yang akan digunakan. Klik
SettingProgrammer . Pilih chip programmer sesuai dengan downloder yang
tersambung. Jika sudah klik OK.

6. Kemudia klik ProjectConfigure. Maka akan muncul jendela konfigurasi


dari project yang sedang kita buat.

15

7. Pilih tab After Build. Pada Action pilih Program the Chip. Hilangkan
centang pada JTAGEN=0 kemudian OK.

8. Compile program. Perbaiki program apabila terdapat error. Jika tidak ada, Build
program.
9. Amati bentuk gelombang PWM keluaran dari mikrokontroller, kemudian ukur
tegangan keluaran dengan Multimeter Digital dan catat pada tabel.
10. Variasikan nilai OCR sehingga didapat beberapa data.
11. Lakukan semua prosedur dengan Mode CTC PWM dan Fast PWM dengan
mengubah prescaller dan Timer yang digunakan sesuai tabel.

16

VI. DATA PERCOBAAN


Mode CTC PWM

Timer

Prescaler

Timer 0

Timer 1

Nilai
OCR

FPWM Teori
(Hz)

FPWM
Pengukuran
(Hz)

Duty Cycle
(%)

Tegangan PWM
(V)

16

235.294,12

235.300,00

50,02

2,519

32

121.212,12

121.300,00

50,06

2,520

64

61.538,46

61.570,00

50,07

2,520

92

43.010,75

43.020,00

50,03

2,518

128

31.007,75

31.020,00

50,06

2,518

16

29.411,76

29.480,00

50,12

2,518

32

15.151,52

15.150,00

50

2,514

64

7.692,31

7.703,00

50,15

2,513

92

5.376,34

5.376,00

50

2,513

128

3.875,97

3.876,00

50

2,514

64

61.538,46

61.570,00

50,07

2,520

128

31.007,75

31.020,00

50,06

2,518

192

20.725,39

20.730,00

50,02

2,514

256

15.564,20

15.560,00

50,12

2,514

512

7.797,27

7.800,00

50,01

2,513

64

7.692,31

7.703,00

50,15

2,513

128

3.875,97

3.876,00

50

2,514

192

2.590,67

2.591,00

50,05

2,512

256

1.945,53

1.949,00

50,09

2,512

512

974,66

974,70

50

2,512

17

Mode FAST PWM

Timer

Prescaler

Timer 0

Timer 1

FPWM Teori
(Hz)

Nilai OCR

Duty Cycle
(%)

Nilai OCR Kalibrasi

Tegangan PWM

Teori

Pengukuran

Teori

Pengukuran

16

31.250,00

31.210,00

6,25

6,39

15

0,317

32

31.250,00

31.210,00

12,5

12,76

31

0,609

64

31.250,00

31.210,00

25

25,33

63

1,263

128

31.250,00

31.210,00

50

50,46

127

2,534

192

31.250,00

31.210,00

75

75,34

191

3,75

16

3.906,25

3.906,00

6,25

6,71

15

0,317

32

3.906,25

3.906,00

12,5

12,93

31

0,629

64

3.906,25

3.906,00

25

23,31

63

1,264

128

3.906,25

3.906,00

50

50,47

127

2,536

192

3.906,25

3.906,00

75

75,35

191

3,76

64

7.812,50

7.813,00

6,25

6,40

63

0,302

128

7.812,50

7.813,00

12,5

12,66

127

0,615

192

7.812,50

7.813,00

18,75

18,88

191

0,926

256

7.812,50

7.813,00

25

25,12

255

1,242

512

7.812,50

7.813,00

50

50,16

511

2,503

64

976,56

976,60

6,25

6,35

63

0,300

128

976,56

976,60

12,5

12,62

127

0,610

192

976,56

976,60

18,75

18,85

191

0,926

256

976,56

976,60

25

25,17

255

1,242

512

976,56

976,60

50

50,10

511

2,502
18

VII.

KODE PROGRAM

Mode Fast PWM, Prescaller = 1


#include <mega128.h>
void main(void)
{
DDRB=(0<<DDB7) | (0<<DDB6) | (1<<DDB5) | (1<<DDB4) | (0<<DDB3) | (0<<DDB2)
| (0<<DDB1) | (0<<DDB0);
PORTB=(0<<PORTB7) | (0<<PORTB6) | (0<<PORTB5) | (0<<PORTB4) |
(0<<PORTB3) | (0<<PORTB2) | (0<<PORTB1) | (0<<PORTB0);
ASSR=0<<AS0;
TCCR0=(1<<WGM00) | (1<<COM01) | (0<<COM00) | (1<<WGM01) | (0<<CS02) |
(0<<CS01) | (1<<CS00);
TCNT0=0x00;
OCR0=0x00;
TCCR1A=(1<<COM1A1) | (0<<COM1A0) | (0<<COM1B1) | (0<<COM1B0) |
(0<<COM1C1) | (0<<COM1C0) | (1<<WGM11) | (1<<WGM10);
TCCR1B=(0<<ICNC1) | (0<<ICES1) | (0<<WGM13) | (1<<WGM12) | (0<<CS12) |
(0<<CS11) | (1<<CS10);
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;
OCR1CH=0x00;
OCR1CL=0x00;
while (1)
{
OCR0 = 16;
//OCR0 = 32;
//OCR0 = 64;
//OCR0 = 128;
//OCR0 = 192;
OCR1A = 64;
//OCR1A = 128;
//OCR1A = 192;
//OCR1A = 256;
//OCR1A = 512;
}
}

19

Mode Fast PWM, Prescaller = 8


#include <mega128.h>
void main(void)
{
DDRB=(0<<DDB7) | (0<<DDB6) | (1<<DDB5) | (1<<DDB4) | (0<<DDB3) | (0<<DDB2)
| (0<<DDB1) | (0<<DDB0);
PORTB=(0<<PORTB7) | (0<<PORTB6) | (0<<PORTB5) | (0<<PORTB4) |
(0<<PORTB3) | (0<<PORTB2) | (0<<PORTB1) | (0<<PORTB0);
ASSR=0<<AS0;
TCCR0=(1<<WGM00) | (1<<COM01) | (0<<COM00) | (1<<WGM01) | (0<<CS02) |
(1<<CS01) | (0<<CS00);
TCNT0=0x00;
OCR0=0x00;
TCCR1A=(1<<COM1A1) | (0<<COM1A0) | (0<<COM1B1) | (0<<COM1B0) |
(0<<COM1C1) | (0<<COM1C0) | (1<<WGM11) | (1<<WGM10);
TCCR1B=(0<<ICNC1) | (0<<ICES1) | (0<<WGM13) | (1<<WGM12) | (0<<CS12) |
(1<<CS11) | (0<<CS10);
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;
OCR1CH=0x00;
OCR1CL=0x00;
while (1)
{
OCR0 = 16;
//OCR0 = 32;
//OCR0 = 64;
//OCR0 = 128;
//OCR0 = 192;
OCR1A = 64;
//OCR1A = 128;
//OCR1A = 192;
//OCR1A = 256;
//OCR1A = 512;
}
}

20

Mode CTC PWM, Prescaller = 1


#include <mega128.h>
void main(void)
{
DDRB=(0<<DDB7) | (0<<DDB6) | (1<<DDB5) | (1<<DDB4) | (0<<DDB3) | (0<<DDB2) |
(0<<DDB1) | (0<<DDB0);
PORTB=(0<<PORTB7) | (0<<PORTB6) | (0<<PORTB5) | (0<<PORTB4) | (0<<PORTB3) |
(0<<PORTB2) | (0<<PORTB1) | (0<<PORTB0);
ASSR=0<<AS0;
TCCR0=(0<<WGM00) | (0<<COM01) | (1<<COM00) | (1<<WGM01) | (0<<CS02) |
(0<<CS01) | (1<<CS00);
TCNT0=0x00;
OCR0=0x00;
TCCR1A=(0<<COM1A1) | (1<<COM1A0) | (0<<COM1B1) | (0<<COM1B0) |
(0<<COM1C1) | (0<<COM1C0) | (0<<WGM11) | (0<<WGM10);
TCCR1B=(0<<ICNC1) | (0<<ICES1) | (0<<WGM13) | (1<<WGM12) | (0<<CS12) |
(0<<CS11) | (1<<CS10);
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;
OCR1CH=0x00;
OCR1CL=0x00;
while (1)
{
OCR0 = 16;
//OCR0 = 32;
//OCR0 = 64;
//OCR0 = 128;
//OCR0 = 192;
OCR1A = 64;
//OCR1A = 128;
//OCR1A = 192;
//OCR1A = 256;
//OCR1A = 512;
}
}

21

Mode CTC PWM, Prescaller = 8


#include <mega128.h>
void main(void)
{
DDRA=(0<<DDA7) | (0<<DDA6) | (0<<DDA5) | (0<<DDA4) | (0<<DDA3) | (0<<DDA2) |
(0<<DDA1) | (0<<DDA0);
PORTA=(0<<PORTA7) | (0<<PORTA6) | (0<<PORTA5) | (0<<PORTA4) | (0<<PORTA3) |
(0<<PORTA2) | (0<<PORTA1) | (0<<PORTA0);
DDRB=(0<<DDB7) | (0<<DDB6) | (1<<DDB5) | (1<<DDB4) | (0<<DDB3) | (0<<DDB2) |
(0<<DDB1) | (0<<DDB0);
PORTB=(0<<PORTB7) | (0<<PORTB6) | (0<<PORTB5) | (0<<PORTB4) | (0<<PORTB3) |
(0<<PORTB2) | (0<<PORTB1) | (0<<PORTB0);
ASSR=0<<AS0;
TCCR0=(0<<WGM00) | (0<<COM01) | (1<<COM00) | (1<<WGM01) | (0<<CS02) |
(1<<CS01) | (0<<CS00);
TCNT0=0x00;
OCR0=0x00;
TCCR1A=(0<<COM1A1) | (1<<COM1A0) | (0<<COM1B1) | (0<<COM1B0) |
(0<<COM1C1) | (0<<COM1C0) | (0<<WGM11) | (0<<WGM10);
TCCR1B=(0<<ICNC1) | (0<<ICES1) | (0<<WGM13) | (1<<WGM12) | (0<<CS12) |
(1<<CS11) | (0<<CS10);
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;
OCR1CH=0x00;
OCR1CL=0x00;
while (1)
{
OCR0 = 16;
//OCR0 = 32;
//OCR0 = 64;
//OCR0 = 128;
//OCR0 = 192;
OCR1A = 64;
//OCR1A = 128;
//OCR1A = 192;
//OCR1A = 256;
//OCR1A = 512
}
}

22

VIII. ANALISA
PWM dapat dibangkitkan oleh mikrokontroller. Salah satunya oleh Mikrokontroller
ATMEGA 128 dengan mengaktifkan Timer/Counter. Pada ATMEGA128 terdapat 4
Timer/Counter, yaitu :
Timer/Counter 0 (8 bit)
Timer/Counter 1 (16 bit)
Timer/Counter 2 (8 bit)
Timer/Counter 3 (16 bit)
Mode Operasi yang dapat digunakan pada masing-masing timer adalah :
Normal Mode
Fast PWM Mode
CTC Mode
Phase Correct PWM Mode
Masing-masing mode operasi memiliki karakteristik yang berbeda. Pada praktikum ini
yang diamati adalah Mode Fast PWM dan CTC.
Perbedaan pertama terletak pada isi atau nilai register TCCR0 apabila menggunakan
Timer/Counter 0, sedangkan ketika menggunakan Timer/Counter 1 perbedaannya
terletak pada register TCCR1A dan TCCR1B.
Pada Timer/Counter 0
Fast PWM Mode
TCCR0=(1<<WGM00) | (1<<COM01) | (0<<COM00) | (1<<WGM01) | (0<<CS02) | (0<<CS01) | (1<<CS00);

CTC Mode
TCCR0=(0<<WGM00) | (0<<COM01) | (1<<COM00) | (1<<WGM01) | (0<<CS02) | (0<<CS01) | (1<<CS00);

Register TCCR0

Bit Deskripsi Mode Operasi Timer

Jika menggunakan Mode Fast PWM, nilai Bit WGM01 = 1


dan WGM00 = 1.
Jika menggunakan Mode CTC, nilai Bit WGM01 = 1 dan
WGM00 = 0.

23

Pada Timer/Counter 1
Fast PWM Mode
TCCR1A=(1<<COM1A1) | (0<<COM1A0) | (0<<COM1B1) | (0<<COM1B0) | (0<<COM1C1) | (0<<COM1C0) | (1<<WGM11) | (1<<WGM10);
TCCR1B=(0<<ICNC1) | (0<<ICES1) | (0<<WGM13) | (1<<WGM12) | (0<<CS12) | (0<<CS11) | (1<<CS10);
CTC Mode
TCCR1A=(0<<COM1A1) | (1<<COM1A0) | (0<<COM1B1) | (0<<COM1B0) | (0<<COM1C1) | (0<<COM1C0) | (0<<WGM11) | (0<<WGM10);
TCCR1B=(0<<ICNC1) | (0<<ICES1) | (0<<WGM13) | (1<<WGM12) | (0<<CS12) | (0<<CS11) | (1<<CS10);

Pada Mode Fast PWM, Nilai Bit WGM12,


WGM11, dan WGM13 adalah 1.
Pada Mode CTC, Nilai Bit WGM12 = 1,
WGM11 = 0, dan WGM13 adalah 0.

24

Perbedaan kedua,
Mode CTC PWM (sampel data hanya pada Timer 0)
Timer

Prescaler

Timer 0

Nilai
OCR

FPWM Teori
(Hz)

FPWM
Pengukuran
(Hz)

Duty Cycle
(%)

Tegangan PWM
(V)

16

235.294,12

235.300,00

50,02

2,519

32

121.212,12

121.300,00

50,06

2,520

64

61.538,46

61.570,00

50,07

2,520

92

43.010,75

43.020,00

50,03

2,518

128

31.007,75

31.020,00

50,06

2,518

16

29.411,76

29.480,00

50,12

2,518

32

15.151,52

15.150,00

50

2,514

64

7.692,31

7.703,00

50,15

2,513

92

5.376,34

5.376,00

50

2,513

128

3.875,97

3.876,00

50

2,514

Pada Mode ini, apabila nilai OCR


semakin besar, maka Frekuensi PWM
yang dihasilkan akan semakin kecil

Sementara itu Duty Cycle yang dihasilkan


konstan berkisar pada 50%, dan Tegangan
PWM juga konstan pada nilai 2,5 V.

Mode FAST PWM


Timer

Prescaler

Nilai OCR

FPWM Teori
(Hz)
Teori

Timer 0

Duty Cycle
(%)

Tegangan
PWM

Pengukuran Teori Pengukuran

16

31.250,00

31.210,00

6,25

6,39

0,317

32

31.250,00

31.210,00

12,5

12,76

0,609

64

31.250,00

31.210,00

25

25,33

1,263

128

31.250,00

31.210,00

50

50,46

2,534

192

31.250,00

31.210,00

75

75,34

3,75

16

3.906,25

3.906,00

6,25

6,71

0,317

32

3.906,25

3.906,00

12,5

12,93

0,629

64

3.906,25

3.906,00

25

23,31

1,264

128

3.906,25

3.906,00

50

50,47

2,536

192

3.906,25

3.906,00

75

75,35

3,76

Pada Mode ini, semakin besarnya nilai


OCR, Frekuensi PWM yang dihasilkan
nilainya tetap atau konstan

Sementara itu Duty Cycle dan Tegangan


PWM yang dihasilkan berbanding lurus
dengan nilai OCR

25

Perhitungan Frekuensi PWM (beberapa sampel)


Timer/Counter 0

Timer/Counter 0

Mode CTC ; Prescaller = 1 ; OCR0 = 16

Mode Fast PWM ; Prescaller = 1

FOCn =


2 ( 1+ )
8M
2 x 1 x ( 1+16 )

= 235,294 KHz
Mode CTC ; Prescaller = 8 ; OCR0 = 16
FOCn =


2 ( 1+ )

8M
=
2 x 8 x ( 1+16 )

= 29,411 KHz

Timer/Counter 1
Mode CTC ; Prescaller = 1 ; OCR0 = 64

FOCn =
2 ( 1+ )
8M
=
2 x 1 x ( 1+64 )

FOCn =


256
8M
1 x 256

= 31,250 KHz
Mode Fast PWM ; Prescaller = 8;
FOCn =


256
8M
8 x 256

= 3,906 KHz

Timer/Counter 1
Mode Fast PWM ; Prescaller = 1;
FOCn =


1024
8M
1 x 1024

= 7,8125 KHz
= 61,538 KHz
Mode CTC ; Prescaller = 8 ; OCR0 = 64

FOCn =
2 ( 1+ )
8M
=
2 x 8 x ( 1+64 )

Mode Fast PWM ; Prescaller = 8;


FOCn =


1024
8M
8 x 1024

= 976,56 Hz
= 7,692 KHz

26

Terdapat beberapa variabel yang dapat kita ubah nilainya agar frekuensi PWM sesuai dengan
yang kita inginkan. Variabel tersebut adalah System Clock, Prescaller, Timer Periode.
Pada modul ATMEGA128, akan sangat sulit jika kristal yang telah terpasang (System Clock)
harus diubah nilainya. Sehingga para Programmer biasanya mengubah nilai dari Prescaller
maupun Timer Periode. Pada praktikum kali ini nilai Timer Periode tidak ubah. Sedangkan
yang diubah adalah Prescaller.
Nilai Prescaller pada Timer adalah 1, 8, 32, 64, 128, 256, 1024.
Penggunaan masing-masing nilai tersebut akan berpengaruh pada register TCCR0 apabila
menggunakan Timer/Counter 0 dan TCCR1B apabila menggunakan Timer/Counter 1.
Pada Timer/Counter 0
Prescaller = 1
TCCR0=(1<<WGM00) | (1<<COM01) | (0<<COM00) | (1<<WGM01) | (0<<CS02) | (0<<CS01) | (1<<CS00);

Prescaller = 8
TCCR0=(1<<WGM00) | (1<<COM01) | (0<<COM00) | (1<<WGM01) | (0<<CS02) | (1<<CS01) | (0<<CS00);

Bit Deskripsi Pemilihan Prescaller pada Timer 0

Pada Timer/Counter 1
Prescaller = 1
TCCR1B=(0<<ICNC1) | (0<<ICES1) | (0<<WGM13) | (1<<WGM12) | (0<<CS12) | (0<<CS11) | (1<<CS10);

Prescaller = 8
TCCR1B=(0<<ICNC1) | (0<<ICES1) | (0<<WGM13) | (1<<WGM12) | (0<<CS12) | (1<<CS11) | (0<<CS10);

Bit Deskripsi Pemilihan Prescaller pada Timer 1

27

IX. KESIMPULAN
Mikrokontroller ATMEGA128 dapat membangkitkan gelombang PWM dengan
frekuensi yang kita inginkan melalui TIMER. Pada ATMEGA128 terdapat 4 Timer yaitu :
Timer 0, Timer 1, Timer 2, dan Timer 3. Mode Operasi dari tersebut adalah Normal Mode,
CTC Mode, Fast PWM Mode, Phase Correct Mode. Dari keempat mode operasi tersebut,
rumus perhitungan untuk keluaran frekuensi PWM berbeda-beda.
Agar menghasilkan frekuensi PWM yang diinginkan, kita dapat mengubah nilai dari
variabel Prescaller maupun Timer Periode. Nilai Prescaller sendiri telah disediakan
yaitu 1, 8, 32, 64, 128, 256, 1024. Perubahan nilai Prescaller akan berpengaruh pada nilai
dari Regsiter TCCRn (Timer 0 dan Timer 2) atau TCCRnB (Timer 1 dan Timer 3). Lebih
tepatnya pada bit CSn2, CSn1, dan CSn0. Sedangkan Perbedaan pada tiap Mode Operasi
Timer akan berpengaruh pada Register TCCRn (Timer 0 dan Timer 2) atau TCCRnA dan
TCCRnB (Timer 1 dan Timer 3). Tepatnya pada bit WGMn0 dan WGMn1 untuk Timer 0
dan Timer 2. Sedangkan untuk Timer 1 dan Timer 3 pada bit WGMn0, WGMn1, WGMn2.
Apabila Mode Fast PWM dan Mode CTC diamati dalam hal keluaran karkteristik
gelombang keluarannya, maka :
Mode Fast PWM, Semakin bertambahnya nilai OCR, frekuensi PWM nya tetap. Namun
Duty Cycle dan Tegangan Ouput PWM berbanding lurus dengan nilai OCR sehingga
semakin besar juga.
Mode CTC, semakin bertambahnya nilai OCR, frekuensi PWM nya semakin turun.
Sedangkan Duty Cycle tetap pada nilai 50%. Begitu pula dengan tegangan output PWM
yang berkisar antara 2,5 V (Konstan).

OCR Meningkat

CTC

Fast PWM

Frekuensi turun

Frekuensi Tetap

Tegangan Output Tetap (2,5 V)

Tegangan Output Meningkat

Duty Cycle Tetap (50%)

Duty Cycle Meningkat

28

Anda mungkin juga menyukai