1310131042_bramasto adi nugroho

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

Upload: bramasto-adi-nugroho

Post on 06-Dec-2015

40 views

Category:

Documents


9 download

DESCRIPTION

Mikro

TRANSCRIPT

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

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

1 Baris 4 PORTC.0 OUTPUT

2 Baris 3 PORTC.1 OUTPUT

3 Baris 2 PORTC.2 OUTPUT

4 Baris 1 PORTC.3 OUTPUT

5 Kolom 4 PORTC.4 INPUT

6 Kolom 3 PORTC.5 INPUT

7 Kolom 2 PORTC.6 INPUT

8 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 perintah–perintah 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 Description

1 Ground

2 Vcc

3 Contrast Voltage

4 "R/S" _Instruction/Register Select

5 "R/W" _Read/Write LCD Registers

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

4 5 14 13 12 11 10 9 8 7 Pins

0 0 0 0 0 0 0 0 0 1 Clear Display

0 0 0 0 0 0 0 0 1 * Return Cursor and LCD to Home

Position 0 0 0 0 0 0 0 1 ID S Set Cursor Move Direction

0 0 0 0 0 0 1 D C B Enable Display/Cursor

0 0 0 0 0 1 SC RL * * Move Cursor/Shift Display

0 0 0 0 1 DL N F * * Set Interface Length

0 0 0 1 A A A A A A Move Cursor into CGRAM

0 0 1 A A A A A A A Move Cursor to Display

0 1 BF * * * * * * * Poll the "Busy Flag"

1 0 D D D D D D D D Write a Character to the Display the

Current Cursor Position 1 1 D D D D D D D D Read the Character on the Display

at the Current Cursor Position The bit descriptions for the different commands are:

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

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

Mengaktifkan interrupt dari timer

Inisialisasi nilai start dari timer

Proses pembandingan terjadi pada nilai ini

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 “File””Save”. Beri nama yang sama

kepada 3 ekstensi file tersebut. (.cwp , .c , .prj ) . Hasil konfigurasi akan muncul seperti

gambar dibawah ini.

0

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

9. Kemudian klik “Project””Configure”. 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

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 :

Jika menggunakan Mode Fast PWM, nilai Bit WGM01 = 1

dan WGM00 = 1.

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

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.

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;

2

3

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.

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

1

4

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.

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

1

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.