Anda di halaman 1dari 32

PRAKTIKUM II

KEYPAD AND LCD INTEGRATION FOR CONTROLING AND


MONITORING PWM BASED ATMEGA128
I. TUJUAN
1. Mahasiswa mampu mengintegrasikan Keypad dan Mikrokontroller untuk mengatur
nilai duty cycle PWM
2. Mahasiswa mampu menampilkan nilai Duty Cycle dan OCR pada LCD.
3. Mahasiswa mengerti hubungan antara Duty Cycle dan OCR.
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


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

3.

direpresentasikan

sebagai

factor

prescale

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 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

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.
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.

Gambar Konektor Keypad 4x4 pada Mikrokontroller

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

Konfigurasi Keypad 4x4 dan penyambungannya pada AVR Minimum System

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.

Klasifikasi LED Display 16x2 Character


a. 16 karakter x 2 baris
b. 5x7 titik Matrix karakter + kursor
c. HD44780 Equivalent LCD kontroller/driver Built-In
d. 4-bit atau 8-bit MPU Interface
e. Tipe standar
f. Bekerja hampir dengan semua Mikrokontroler.
Tabel Pin Out LCD character

Pins
1

Description
Ground

Vcc

Contrast Voltage

"R/S" _Instruction/Register Select

"R/W" _Read/Write LCD Registers

"E" Clock

7 - 14

Data I/O Pins (D0..D7)

15

Anoda (+) backlight

16

Katoda (-) backlight

Tabel Daftar Instruksi LCD Character


R/S

R/W

D7

D6

D5

D4

D3

D2

D1

D0

Instruction/Description

14

13

12

11

10

Pins

Clear Display

ID

Return Cursor and LCD to Home


Position
Set Cursor Move Direction

Enable Display/Cursor

SC

RL

Move Cursor/Shift Display

DL

Set Interface Length

Move Cursor into CGRAM

Move Cursor to Display

BF

Poll the "Busy Flag"

Write a Character to the Display the


Current
Position
Read theCursor
Character
on the Display

The bit descriptions for the different commands are:

at the Current Cursor Position

"*" - Not Used/Ignored. This bit can be either "1" or "0"


Set Cursor Move Direction:
ID - Increment the Cursor After Each Byte Written to Display if Set

S - Shift Display when Byte Written to Display


Enable Display/Cursor
D - Turn Display On(1)/Off(0)
C - Turn Cursor On(1)/Off(0)
B - Cursor Blink On(1)/Off(0)
Move Cursor/Shift Display
SC - Display Shift On(1)/Off(0)
RL - Direction of Shift Right(1)/Left(0)
Set Interface Length
DL - Set Data Interface Length 8(1)/4(0)
N - Number of Display Lines 1(0)/2(1)
F - Character Font 5x10(1)/5x7(0)
Poll the "Busy Flag"
BF - This bit is set while the LCD is processing
Move Cursor to CGRAM/Display
A - Address
Read/Write ASCII to the Display
D Data
Proses inisialisasi pemrograman LCD dalam mode 4 four bit:
1. Wait more than 15 msecs after power is applied.
2. Write 0x03 to LCD and wait 5 msecs for the instruction to complete
3. Write 0x03 to LCD and wait 160 usecs for instruction to complete
4. Write 0x03 AGAIN to LCD and wait 160 usecs (or poll the Busy Flag)
5. Set the Operating Characteristics of the LCD
o Write 0x02 to the LCD to Enable Four Bit Mode
All following instruction/Data Writes require two nibble writes.
o Write "Set Interface Length"
o Write 0x01/0x00 to turn off the Display
o Write 0x00/0x01 to Clear the Display
o Write "Set Cursor Move Direction" Setting Cursor Behaviour Bits
o Write "Enable Display/Cursor" & enable Display and Optional Cursor

Karakter Kode pada LCD

III. ALAT dan BAHAN


PC / Laptop ( Telah terinstall CVAVR )
Downloader
Osiloskop
Modul ATMEGA 128
Voltmeter DC
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

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.

Mengaktifkan interrupt dari timer

Inisialisasi nilai start dari timer


Proses pembandingan terjadi pada nilai ini
3. Agar Mikrokontroller dapat terintegrasi dengan LCD Karakter, maka kita pilih tab
Alphanumeric LCD

4. Untuk mengaktifkan Alphanumeric LCD, kita centang Enable Alphanumeric LCD


Support

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.

6. Connections, merupakan hubungan antara LCD Karakter dengan PORT pada


Mikrokontroller. Misal, pada hardware asli, LCD Karakter terhubung pada PORTA.
Maka kita atur pin out LCD Karakter terhubung dengan PORTA bit keberapa.

7. 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.

8.

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.

9. Kemudian klik ProjectConfigure. Maka akan muncul jendela konfigurasi dari


project yang sedang kita buat.

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.

VI. DATA PERCOBAAN


Kondisi Awal

Duty Cycle = 20%

Duty Cycle 50%

Duty Cycle 70%

Duty Cycle 90%

Duty Cycle 125%

VII. KODE PROGRAM


#include <mega128.h>
#include <alcd.h>
#include <delay.h>
#include <stdio.h>
//Pembacaan Penekanan pada Keypad
int baca_keypad()
{
int a,tombol;
PORTC= 0xff;
tombol=0xff; // jika tdk ada tombol ditekan
PORTC.3 = 0; //baris 1
delay_ms(1);
a = PINC;
// baris 1
if (a==0x77) {tombol=1; goto selesai;}
if (a==0xb7) {tombol=2; goto selesai;}
if (a==0xd7) {tombol=3; goto selesai;}
if (a==0xe7) {tombol=10; goto selesai;}
PORTC.2=0; PORTC.3=1;
delay_ms(1);
a = PINC;
// baris 2
if (a==0x7b) {tombol=4; goto selesai;}
if (a==0xbb) {tombol=5; goto selesai;}
if (a==0xdb) {tombol=6; goto selesai;}
if (a==0xeb) {tombol=11; goto selesai;}
PORTC.1=0; PORTC.2=1;
delay_ms(1);
a = PINC;
// baris 3
if (a==0x7d) {tombol=7; goto selesai;}
if (a==0xbd) {tombol=8; goto selesai;}
if (a==0xdd) {tombol=9; goto selesai;}
if (a==0xed) {tombol=12; goto selesai;}
PORTC.0=0; PORTC.1=1;
delay_ms(1);
a = PINC;
// baris 4
if (a==0x7e) {tombol=14; goto selesai;}
if (a==0xbe) {tombol=0; goto selesai;}
if (a==0xde) {tombol=15; goto selesai;}
if (a==0xee) tombol=13;
selesai:
return(tombol);
}
void main(void)
{
// Declare your local variables here
int nilai,bufferkey[3];

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

Bit Deskripsi Mode Operasi Timer

Jika menggunakan Mode Fast PWM, nilai Bit WGM01 = 1


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

Bit Deskripsi Pemilihan Prescaller pada Timer 0

Sebelum menginjak pada program, hal pertama yang harus kita pahami adalah hubungan
antara nilai OCR dengan Duty Cycle. Secara perumusan dapat ditulis sebagai berikut :

OCR = Initial Value Timer + ( Duty Cycle x Timer Period )


Jika pada setting timer Initial Value Timer = 0, maka :
OCR = Duty Cycle x Timer Period
Pada praktikum kali ini, Timer yang digunakan ialah Timer 0 dengan Mode Fast PWM
dan nilai prescaller diatur pada 8. Karena Timer 0 merupakan Timer 8 bit, maka nilai
Timer Period nya adalah 255. Sehingga :
OCR = Duty Cycle x 255
Karena duty cycle dalam persen,
OCR = Duty Cycle x 2.55
Langkah awal kita harus mendefinisikan bagian mana pada keypad yang akan berfungsi
sebagai output maupun input

Baris sebagai OUTPUT

Kolom Sebagai Input

Dengan dihubungkannya keypad seperti gambar tersebut,


maka PC0 s/d PC3 bernilai 1 karena sebagai keluaran.
Sedangkan PC4 s/d PC7 bernilai 0 karena sebagai input.
Dengan demikian PORTC = 0x0F;

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.

Untuk menampilkan hasil penekanan pada keypad, digunakan statement lcd_putchar.


Setelah angka pertama hasil penekanan tombol keypad tersimpan, maka angka kedua
hasil penekanan tombol keypad tersimpan pada variabel yang sama yaitu bufferkey,
namun berada pada index yang berbeda. Oleh karena itu setelah angka pertama tersimpan,
nilai index akan bertambah melalui statement berikut :
Variabel pencet digunakan untuk mengidentifikasi banyaknya penekanan pada keypad
yang berhubungan dengan banyaknya digit pada input duty cycle. Banyaknya digit ini
akan dikorelasikan dengan pemilihan rumus untuk menghitung besar duty cycle.
Proses seleksi berikutnya adalah apakah tombol yang ditekan bernilai 12. Adapun
tombol yang bernilai 12 pada algoritma penekanan keypad ialah tombol : (bagi). Tombol
ini berfungsi untuk menghapus input angka yang telah kita masukkan.

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

ratusan. Angka berikutnya yaitu 2 (Tersimpan pada bufferkey[1]) merupakan


angka puluhan. Sedangkan angka 3 (tersimpan pada bufferkey[2]) merupakan
angka satuan. Dari algoritma tersebut, kita dapat membuat perumusan bahwa:
duty = bufferkey[0]*100 + bufferkey[1]*10 + bufferkey[2]*1

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).

Perhitungan Duty PWM (beberapa sampel)

Duty Cycle = 20%


OCR0 = duty x 2.55
= 20 x 2.55
= 51

Duty Cycle = 50%


OCR0 = duty x 2.55
= 50 x 2.55
= 127.5

Duty Cycle = 70%


OCR0 = duty x 2.55
= 70 x 2.55
= 178.5

Duty Cycle = 90%


OCR0 = duty x 2.55
= 90 x 2.55
= 229.5

Duty Cycle = 100%


OCR0 = duty x 2.55
= 100 x 2.55
= 255

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.

Anda mungkin juga menyukai