Tabel 8. Compare Output Mode, Phase Correct and Phase and Frequency Correct
mode.
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.
3.
direpresentasikan
sebagai
factor
prescale
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%).
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 opamp atau dengan menggunakan metode digital. Dengan metode analog setiap perubahan
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.
KEYPAD
Modul keypad biasanya berjenis keypad matrix. Jumlah tombol yang ada
merupakan jumlah perkalian antara baris dan kolom dari keypad tersebut. Dengan
menggunakan modul keypad ini dapat menghemat jumlah pin I/O yang digunakan.
Sebagai contoh modul keypad yang terdiri dari 4 kolom dan 4 baris yang totalnya ada
16 tombol (angka 0 sampai 9,tombol *, tombol #, tombol A sampai tombol D).
Jadi, keypad sebenarnya adalah sebuah rangkaian jalur baris dan kolom dan
disusun sedemikian rupa menyerupai matrik, yang tidak terhubung antar baris dan
kolomnya. Tombol tekan (push button) diletakkan pada posisi perpotongan baris dan
kolom tertentu sehingga tombol tersebut dapat menghubungkan jalur baris dan kolom
tertentu yang terpisah. Untuk dapat melakukan pemrograman keypad digunakan tehnik
scanning. Dalam perancangan interface yang dihubungkan dengan keypad,
menggunakan dua cara, yaitu:
- baris sebagai input dan kolom sebagai output
- kolom sebagai input dan baris sebagai output.
Skematik Keypad 4x4 dengan menggunakan tehnik kolom sebagai input dan
baris sebagai output. Pada gambar skematik tersebut Keypad terhubung dengan PORTC
pada Mikrokontroller. Port C yang digunakan sebagai interfacing antara keypad dan
mikrokontroler dibagi menjadi 2. Separuh menjadi input (PC.4 PC.7, biasa disebut
PC upper) dan separuhnya lagi menjadi output (PC.0-PC.3, biasa disebut PC
lower).Angka pada tombol hanya sebagai panduan saja. Kita bisa mengganti tombol
dengan nilai lain yang kita butuhkan dengan mengubah program kita.
Pin No.
Keypad
Pin AVR
Fungsi
Baris 4
PORTC.0
OUTPUT
Baris 3
PORTC.1
OUTPUT
Baris 2
PORTC.2
OUTPUT
Baris 1
PORTC.3
OUTPUT
Kolom 4
PORTC.4
INPUT
Kolom 3
PORTC.5
INPUT
Kolom 2
PORTC.6
INPUT
Kolom 1
PORTC.7
INPUT
Algorithma
Jika baris 1 diberi logic 0 dan baris yang lain diberi logic 1,
maka: PORTC = 0xf7 = (1111 0111)
- Jika ditekan tombol 1, (baris 1 kolom 1) maka PINC = 0x77 = (0111 0111)
- Jika ditekan tombol 2, (baris 1 kolom 2) maka PINC = 0xb7 = (1011 0111)
- Jika ditekan tombol 3, (baris 1 kolom 3) maka PINC = 0xd7 = (1101 0111)
- Jika ditekan tombol A, (baris 1 kolom 4) maka PINC = 0xe7 = (1110 0111)
Jika baris 2 diberi logic 0 dan baris yang lain diberi logic 1,
maka: PORTC = 0xfb = (1111 1011)
- Jika ditekan tombol 4, (baris 2 kolom 1) maka PINC = 0x7b = (0111 1011)
- Jika ditekan tombol 5, (baris 2 kolom 2) maka PINC = 0xbb = (1011 1011)
- Jika ditekan tombol 6, (baris 2 kolom 3) maka PINC = 0xdb = (1101 1011)
- Jika ditekan tombol B, (baris 2 kolom 4) maka PINC = 0xeb = (1110 1011)
Jika baris 3 diberi logic 0 dan baris yang lain diberi logic 1,
maka: PORTC = 0xfd = (1111 1101)
- Jika ditekan tombol 7, (baris 3 kolom 1) maka PINC = 0x7d = (0111 1101)
- Jika ditekan tombol 8, (baris 3 kolom 2) maka PINC = 0xbd = (1011 1101)
- Jika ditekan tombol 9, (baris 3 kolom 3) maka PINC = 0xdd = (1101 1101)
- Jika ditekan tombol C, (baris 3 kolom 4) maka PINC = 0xed = (1110 1101)
Jika baris 4 diberi logic 0 dan baris yang lain diberi logic 1,
maka: PORTC = 0xfe = (1111 1110)
- Jika ditekan tombol *, (baris 4 kolom 1) maka PINC = 0x7e = (0111 1110)
- Jika ditekan tombol 0, (baris 4 kolom 2) maka PINC = 0xbe = (1011 1110)
- Jika ditekan tombol #, (baris 4 kolom 3) maka PINC = 0xde = (1101 1110)
- Jika ditekan tombol D, (baris 4 kolom 4) maka PINC = 0xee = (1110 1110)
LCD KARAKTER
Display LCD sebuah liquid crystal atau perangkat elektronik yang dapat digunakan
untuk menampilkan angka atau teks. Ada dua jenis utama layar LCD yang dapat
menampilkan numerik (digunakan dalam jam tangan, kalkulator dll) dan menampilkan teks
alfanumerik (sering digunakan pada mesin foto kopi dan telepon genggam). Dalam
menampilkan numerik ini kristal yang dibentuk menjadi bar, dan dalam menampilkan
alfanumerik kristal hanya diatur kedalam pola titik. Setiap kristal memiliki sambungan
listrik individu sehingga dapat dikontrol secara independen. Ketika kristal off' (yakni tidak
ada arus yang melalui kristal) cahaya kristal terlihat sama dengan bahan latar belakangnya,
sehingga kristal tidak dapat terlihat. Namun ketika arus listrik melewati kristal, itu akan
merubah bentuk dan menyerap lebih banyak cahaya. Hal ini membuat kristal terlihat lebih
gelap dari penglihatan mata manusia sehingga bentuk titik atau bar dapat dilihat dari
perbedaan latar belakang. Sangat penting untuk menyadari perbedaan antara layar LCD
dan layar LED. Sebuah LED display (sering digunakan dalam radio jam) terdiri dari
sejumlah LED yang benar-benar mengeluarkan cahaya (dan dapat dilihat dalam gelap).
Sebuah layar LCD hanya mencerminkan cahaya, sehingga tidak dapat dilihat dalam gelap.
LMB162A adalah modul LCD matrix dengan konfigurasi 16 karakter dan 2 baris
dengan setiap karakternya dibentuk oleh 8 baris pixel dan 5 kolom pixel (1 baris terakhir
adalah kursor). Memori LCD terdiri dari 9.920 bir CGROM, 64 byte CGRAM dan 80x8
bit DDRAM yang diatur pengalamatannya oleh Address Counter dan akses datanya
(pembacaan maupun penulisan datanya) dilakukan melalui register data.Pada LMB162A
terdapat register data dan register perintah. Proses akses data ke atau dari register data akan
mengakses ke CGRAM, DDRAM atau CGROM bergantung pada kondisi Address
Counter, sedangkan proses akses data ke atau dari Register perintah akan mengakses
Instruction Decoder (dekoder instruksi) yang akan menentukan perintahperintah yang
akan dilakukan oleh LCD.
Pins
1
Description
Ground
Vcc
Contrast Voltage
"E" Clock
7 - 14
15
16
R/W
D7
D6
D5
D4
D3
D2
D1
D0
Instruction/Description
14
13
12
11
10
Pins
Clear Display
ID
Enable Display/Cursor
SC
RL
DL
BF
V. LANGKAH PERCOBAAN
1. Buka software Code Vision AVR. Maka akan muncul jendela dari CVAVR.
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
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.
5. Ada berbagai macam ukuran dari LCD Karakter. Misal, LCD Karakter yang kita pakai
berukuran 16x2. 16 merupakan banyaknya kolom dan 2 merupakan banyak baris.
Karena banyaknya kolom 16, maka pada Characters/Line kita ganti dengan 16.
8.
10. Pilih tab After Build. Pada Action pilih Program the Chip. Hilangkan
centang pada JTAGEN=0 kemudian OK.
11. Buat Program agar Keypad dapat mengatur nilai duty cycle dari PWM dan LCD
Karakter dapat menampilkan nilai Duty yang di setting dan Nilai OCR.
12. Compile program. Perbaiki program apabila terdapat error. Jika tidak ada, Build
program. Amati bentuk gelombang PWM keluaran dari mikrokontroller dengan
osiloskop apakah duty yang diinput dari keypad telah sesuai atau belum.
int index = 0;
int maxdigit = 2;
int duty,pencet = 0;;
char buf[10];
DDRA= 0x00;
PORTA= 0x00;
DDRB= 0x10;
PORTB= 0x00;
DDRC= 0x0F;
PORTC= 0x00;
ASSR=0<<AS0;
TCCR0=(1<<WGM00) | (1<<COM01) | (0<<COM00) | (1<<WGM01) | (0<<CS02) |
(1<<CS01) | (0<<CS00);
TCNT0=0x00;
OCR0=0x00;
lcd_init(20);
while (1)
{
// Place your code here
lcd_gotoxy(0,0);
lcd_putsf("Duty =");
lcd_gotoxy(0,1);
lcd_putsf("OCR0 =");
nilai = baca_keypad();
if(nilai>=0&&nilai<=9)
{
if(index<=maxdigit)
{
bufferkey[index] = nilai;
delay_ms(100);
lcd_gotoxy(index+7,0);
lcd_putchar(bufferkey[index]+0x30);
index++; //menggeser index array
pencet++; //counter penekanan keypad
}
}
//Menghapus angka yang telah di input
else if(nilai==12)
{
if(index>0)
{
index--;
bufferkey[index] = ' ';
lcd_gotoxy(index+7,0);
lcd_putchar(bufferkey[index]);
delay_ms(200);
pencet--;
}
}
//Tombol ENTER ditekan
else if(nilai==15)
{
//Korelasi berapa banyak keypad ditekan dengan rumus yang digunakan
if(pencet==3)
duty = bufferkey[0]*100 + bufferkey[1]*10 + bufferkey[2]*1;
else if(pencet==2)
duty = bufferkey[0]*10 + bufferkey[1]*1;
else
duty = bufferkey[0]*1;
//Jika perhitungan duty > 100, maka duty diberi nilai 100 (maksimum)
if(duty>100)
duty = 100;
//Perhitungan nilai OCR0 dengan metode fast pwm
OCR0 = duty*2.55;
//Menampilkan nilai OCR0 pada LCD
lcd_gotoxy(7,1);
sprintf(buf,"%3d",OCR0);
lcd_puts(buf);
//Mengosongkan nilai yang ada sebelumnya
bufferkey[0]=' ';
bufferkey[1]=' ';
bufferkey[2]=' ';
//Menghapus nilai duty pada LCD
for(index=0;index<=2;index++)
{
lcd_gotoxy(index+7,0);
lcd_putchar(bufferkey[index]);
}
index = 0;
pencet = 0;
}
delay_ms(200);
}
}
VIII. ANALISA
Proses kontrol dilakukan untuk menjaga keluaran agar sesuai dengan yang kita
harapkan. Dengan proses kontrol tersebut diharapkan error yang terdapat pada sebuah
sistem dapat di minimalisir. Contoh yang sederhana adalah pengaturan duty cycle pada
gelombang PWM yang dibangkitkan oleh ATMEGA128. Secara manual, pengaturan
duty cycle PWM dapat dilakukan dengan mengatur nilai OCR dari Timer yang
digunakan. Namun akan menjadi sangat tidak efisien dan memakan banyak waktu apabila
kita harus membuka program, mengedit program, barulah kita download pada chip
ATMEGA. Proses pengaturan yang lebih baik adalah kita dapat menginterasikan keypad
dengan mikrokontroller, sehingga kita dapat mengatur duty cycle PWM sesuai yang kita
kehendaki. Tentunya, penambahan perangkat LCD Karakter akan mempermudah
monitoring nilai OCR dan Duty Cycle PWM saat ini. Dengan begitu pengguna akan
dimudahkan.
Timer dan Jenis Mode yang digunakan
Fast PWM Mode
TCCR0=(1<<WGM00) | (1<<COM01) | (0<<COM00) | (1<<WGM01) | (0<<CS02) | (1<<CS01) | (0<<CS00);
Register TCCR0
Sebelum menginjak pada program, hal pertama yang harus kita pahami adalah hubungan
antara nilai OCR dengan Duty Cycle. Secara perumusan dapat ditulis sebagai berikut :
Setelah mendefinisikan bagian input dan output pada keypad, kita dapat membentuk
algoritma pemrograman proses pembacaan penekanan keypad. Proses pembacaan
penekanan pada keypad dapat menggunakan teknik scanning. Untuk memudahkan
pemahaman, alangkah baiknya dibuat subroutine untuk tiap proses pada pemrograman.
Seperti contoh divawah ini.
Int baca_keypad() merupakan subroutine proses pembacaan penekanan pada keypad.
Setelah tombol pada keypad ditekan, angka yang ditekan akan terdifinisi dan dimasukkan
dalam variabel tombol. Kemudian program dalam subroutine tersebut akan mengirim
balik nilai pada program utama melalui statement return ----->
Nilai balik yang dikirim oleh subroutine int baca_keypad() bertipe data integer. Nilai
tersebut ditampung pada variabel nilai yang terdapat pada program utama.
Barulah masuk pada tahap seleksi tombol yang ditekan. Keypad disini memiliki beberapa
fungsi, yaitu :
o Input dari nilai duty cycle dengan masksimal digit 3
o Dapat menghapus angka akibat penekanan yang salah
o Memasukkan nilai duty cycle settingan dengan menekan Enter
Proses seleksi pertama adalah apakah tombol yang ditekan merupakan angka 0 s/d 9.
Apabila benar, maka data integer yang terdapat pada variabel nilai akan dimasukkan
pada variabel array bufferkey[index]. Index sendiri didefinisikan bernilai 0 pada
mulanya. Sehingga angka pertama hasil penekanan tombol akan masuk pada variabel
befferkey pada index ke-0.
1
2
3
4
Ketika tombol ini ditekan maka index akan dikurangi 1 atau akan menuju pada index
sebelumnya (1). Kemudian data yang terdapat pada index tersebut, semisal angka 1,
akan diganti dengan karakter kosong (2). Barulah karakter kosong tersebut dicetak (3),
sehingga pada tampilan LCD seolah-olah akan terhapus. Dengan dihapusnya data pada
index tersebut, maka banyak digit yang terhitung akan berkurang (4).
Proses seleksi terakhir adalah apakah tombol yang ditekan bernilai 15. Tombol yang
bernilai 15 pada algoritma penekanan keypad ialah tombol = (sama dengan). Tombol ini
berfungsi untuk memasukkan nilai setpoint pada variabel duty.
Variabel pencet digunakan sebagai pemilah dan penghitung berapa banyak digit pada
nilai set point duty cycle.
Banyak digit = 1
maka data pada variabel index ke-0 tersebut merupakan angka satuan.
duty = bufferkey[0]*1
Banyak digit = 2
misal 76, maka angka tersebut terdiri dari puluhan dan satuan. Angka yang
ditekan pertama yaitu 7 (tersimpan pada bufferkey[0]) merupakan angka
puluhan. Sedangkan angka kedua yaitu 6 (tersimpan pada bufferkey[1])
merupakan angka satuan. Dari algoritma tersebut, kita dapat membuat suatu
perumusan bahwa :
duty = bufferkey[0]*10 + bufferkey[1]*1
Banyak digit = 3
Misal 123, maka angka tersebut terdiri dari ratusan, puluhan, dan satuan. Angka
yang ditelan pertama yaitu 1 (tersimpan pada bufferkey[0]) merupakan angka
Nilai maksimum dari duty cycle adalah 100%. Saat nilai set point melebihi 100, maka
kita buat nilainya sama dengan 100.
Setelah didapat nilai dari duty cycle, barulah kita memasukkan nilai dari duty cycle
tersebut pada perumusan nilai OCR dan menampilkan nilai OCR pada LCD
Setelah nilai OCR berhasil di set, maka nilai duty pada tampilan yang kita input
sebelumnya harus hilang. Agar selanjutnya kita dapat memasukkan nilai lain pada duty
cycle.
2
Mula-mula data yang terdapat pada variabel bufferkey index ke-0 s/d 2 harus kita hapus
terlebih dahulu dengan memberi karakter kosong pada index-index tersebut. Barulah
karakter kosong tersebut kita cetak agar seolah seolah nilai duty pada tampilan LCD
terhapus (1). Untuk kembali pada keadaan awal, maka nilai variabel index dan pencet
kita set pada nilai 0 (2).
IX. KESIMPULAN
Sistem yang baik adalah sistem yang memiliki efisiensi 100%. Artinya, tidak
terdapat error dalam sistem tersebut. Namun hal itu sangat jarang dijumpai. Sulit sekali
merancang sebuah sistem dengan error 0%. Untuk memperkecil atau meminimalisir
nilai error tersebut kita dapat melakukan suatu pengontrolan pada sistem. Ada banyak
sekali metode atau cara yang dapat kita gunakan untuk mengontrol sebuah sistem. Baik
secara manual maupun secara otomatis. Salah satu contoh pengontrolan secara manual
adalah Pengaturan Duty Cycle PWM ATMEGA128 dengan Keypad. Sebenarnya untuk
mengatur nilai duty cycle PWM kita hanya perlu merubah nilai OCR dari Timer. Namun
akan sangat merepotkan dan tidak efisien apabila kita harus membuka program,
mengedit, barulah mendownload pada chip ATMEGA. Oleh sebab itu digunakan cara
yang lebih baik dan lebih efisien. Yaitu dengan mengintegrasikan keypad dengan
mikrokontroller dan mememonitoringnya pada LCD. Dengan demikian diharapkan
pengguna akan lebih mudah dalam pengontrolan duty cycle pada PWM.