Download - PWM based Mikrokontroller ATMEGA128
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
1
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
2
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
3
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)
4
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
5
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
6
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
7
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 =
8
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.
9
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 aplikasi- aplikasi 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 “File””Save”. 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
“Setting””Programmer” . Pilih chip programmer sesuai dengan downloder yang
tersambung. Jika sudah klik “OK”.
6. Kemudia klik “Project””Configure”. 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 Nilai
OCR FPWM Teori
FPWM
Pengukuran Duty Cycle Tegangan PWM
(Hz) (Hz) (%) (V)
Timer 0
1
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
8
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
Timer 1
1
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
8
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 Nilai OCR
FPWM Teori Duty Cycle
Nilai OCR Kalibrasi Tegangan PWM (Hz) (%)
Teori Pengukuran Teori Pengukuran
Timer 0
1
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
8
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
Timer 1
1
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
8
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 Nilai
OCR FPWM Teori
FPWM
Pengukuran Duty Cycle Tegangan PWM
(Hz) (Hz) (%) (V)
Timer 0
1
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
8
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 Duty Cycle Tegangan PWM (Hz) (%)
Teori Pengukuran Teori Pengukuran
Timer 0
1
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
8
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
Mode CTC ; Prescaller = 1 ; OCR0 = 16
FOCn = 𝑆𝑦𝑠𝑡𝑒𝑚 𝐶𝑙𝑜𝑐𝑘
2 𝑥 𝑃𝑟𝑒𝑠𝑐𝑎𝑙𝑙𝑒𝑟 𝑥 ( 1+𝑂𝐶𝑅𝑛 )
= 8 M
2 x 1 x ( 1+16 )
= 235,294 KHz
Mode CTC ; Prescaller = 8 ; OCR0 = 16
FOCn = 𝑆𝑦𝑠𝑡𝑒𝑚 𝐶𝑙𝑜𝑐𝑘
2 𝑥 𝑃𝑟𝑒𝑠𝑐𝑎𝑙𝑙𝑒𝑟 𝑥 ( 1+𝑂𝐶𝑅𝑛 )
= 8 M
2 x 8 x ( 1+16 )
= 29,411 KHz
Timer/Counter 1
Mode CTC ; Prescaller = 1 ; OCR0 = 64
FOCn = 𝑆𝑦𝑠𝑡𝑒𝑚 𝐶𝑙𝑜𝑐𝑘
2 𝑥 𝑃𝑟𝑒𝑠𝑐𝑎𝑙𝑙𝑒𝑟 𝑥 ( 1+𝑂𝐶𝑅𝑛 )
= 8 M
2 x 1 x ( 1+64 )
= 61,538 KHz
Mode CTC ; Prescaller = 8 ; OCR0 = 64
FOCn = 𝑆𝑦𝑠𝑡𝑒𝑚 𝐶𝑙𝑜𝑐𝑘
2 𝑥 𝑃𝑟𝑒𝑠𝑐𝑎𝑙𝑙𝑒𝑟 𝑥 ( 1+𝑂𝐶𝑅𝑛 )
= 8 M
2 x 8 x ( 1+64 )
= 7,692 KHz
Timer/Counter 0
Mode Fast PWM ; Prescaller = 1
FOCn = 𝑆𝑦𝑠𝑡𝑒𝑚 𝐶𝑙𝑜𝑐𝑘
𝑃𝑟𝑒𝑠𝑐𝑎𝑙𝑙𝑒𝑟 𝑥 256
= 8 M
1 x 256
= 31,250 KHz
Mode Fast PWM ; Prescaller = 8;
FOCn = 𝑆𝑦𝑠𝑡𝑒𝑚 𝐶𝑙𝑜𝑐𝑘
𝑃𝑟𝑒𝑠𝑐𝑎𝑙𝑙𝑒𝑟 𝑥 256
= 8 M
8 x 256
= 3,906 KHz
Timer/Counter 1
Mode Fast PWM ; Prescaller = 1;
FOCn = 𝑆𝑦𝑠𝑡𝑒𝑚 𝐶𝑙𝑜𝑐𝑘
𝑃𝑟𝑒𝑠𝑐𝑎𝑙𝑙𝑒𝑟 𝑥 1024
= 8 M
1 x 1024
= 7,8125 KHz
Mode Fast PWM ; Prescaller = 8;
FOCn = 𝑆𝑦𝑠𝑡𝑒𝑚 𝐶𝑙𝑜𝑐𝑘
𝑃𝑟𝑒𝑠𝑐𝑎𝑙𝑙𝑒𝑟 𝑥 1024
= 8 M
8 x 1024
= 976,56 Hz
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).
CTC Fast PWM
OCR Meningkat
Frekuensi turun Frekuensi Tetap
Tegangan Output Tetap (2,5 V) Tegangan Output Meningkat
Duty Cycle Tetap (50%) Duty Cycle Meningkat
28