Anda di halaman 1dari 123

PROYEK AKHIR

Pemanfaatan Mikrokontroler Sebagai Pengatur


Parameter
Pada Efek Gitar Digital

BAGUS RIJALUL HAQ


7104.030.0005

Dosen Pembimbing

HARY OKTAVIANTO, ST
NIP. 132 300 375

TRI HARSONO, SSI.MKOM


NIP. 132 093 224

JURUSAN TEKNIK ELEKTRONIKA


POLITEKNIK ELEKTRONIKA NEGERI SURABAYA
INSTITUT TEKNOLOGI SEPULUH NOVEMBER
SURABAYA 2007
PROYEK AKHIR

PEMANFAATAN MIKROKONTROLER
SEBAGAI PENGATUR PARAMETER
PADA EFEK GITAR DIGITAL

BAGUS RIJALUL HAQ


7104.030.005

Dosen Pembimbing :
HARY OKTAVIANTO, ST.
NIP. 132.300.375

TRI HARSONO, SSI.MKOM


NIP. 132.093.224

JURUSAN TEKNIK ELEKTRONIKA


POLITEKNIK ELEKTRONIKA NEGERI SURABAYA
INSTITUT TEKNOLOGI SEPULUH NOPOMBER SURABAYA
2007

i
Pemanfaatan Mikrokontroler Sebagai Pengatur
Parameter
Pada Efek Gitar Digital
Oleh :
BAGUS RIJALUL HAQ
7104.030.005

Proyek akhir ini Diajukan Sebagai Syarat


Untuk Memperoleh Gelar Ahli Madya (Amd.)
di
Politeknik Elektronika Negeri Surabaya
Institut Teknologi Sepuluh Nopember Surabaya

Disetujui oleh
Tim Penguji: Dosen Pembimbing:
1. 1.

Ir. Ratna Adil, MT Hary Oktavianto,ST.


NIP. 131.756.642 NIP. 132.300.375
2. 2.

Ir. Elly Purwantini, Mkom Tri Harsono, Ssi. Mkom


NIP. 131.803.697 NIP. 132.093.224
3.

Firman Arifin, ST
NIP. 132.296.743

Mengetahui :
Ketua Jurusan Teknik Elektronika

Mohd. Syafrudin, ST.,M.Eng.


NIP. 131.884.954

ii
ABSTRAK

Pengolahan sinyal analog menggunakan DSP TMS320C5402


mampu menghasilkan suara yang cukup baik. Begitu juga pada suara
gitar listrik yang digunakan sebagai input data analog, dapat diolah
dengan DSP TMS320C5402 yang menghasilkan efek suara yang lebih
bervariasi.

Untuk menjadikan DSP TMS320C5402 sebagai perangkat efek


gitar digital pada umumnya, akan mengalami permasalahan dalam
mengolah data, dikarenakan DSP TMS320C5402 sebagai mikroprosesor
yang mempunyai fungsi khusus untuk mengolah sinyal, harus
menangani banyak pengolahan data, seperti pengubahan nilai parameter
melalui ADC, pengambilan dan pemrosessan input data, serta
penyediaan berupa tampilan ketika memilih efek. Sehingga dengan
banyaknya data yang diproses, DSP TMS320C5402 menjadi tidak
realtime dan kapasitas memorinya tidak mencukupi.

Kami menggunakan mikrokontroler ATmega32 yang berfungsi


untuk menyimpan dan mengolah data-data non sinyal, seperti
pengubahan nilai parameter sampai 2 byte, pengambilan input data
melalui keypad, penyediaan tampilan oleh LCD grafik, dan untuk
mengirimkan data ke DSP TMS320C5402 digunakan pengiriman data
secara serial menggunakan IC MAX 232.

Kata kunci: ATmega32, pengiriman data serial, real time, keypad, LCD
grafik.

iii
ABSTRACT

Analogous processing signal that is use a DSP TMS320C5402


is able to produces good enough voice. In addition, at voice of electrics
guitar that is used as input of analogue data it is can changeable with
DSP TMS320C5402 that is produce more variety voice effect.

The DSP TMS320C5402 as a peripheral of digital guitar effect


generally, would be problem with data processing, because of DSP
TMS320C5402 as a microprocessor having special function for signal
processing, have to handle a lot of data processing, such as changes
parameter value from ADC, taking and processing of data input, and
also giving appearance when chose the effect. Therefore, that with many
of data processed, the DSP TMS320C5402 becoming not real time and
this memory capacities fall short.

We used a microcontroller ATmega32 that is function for


saving and processing of non signal data, such as changes parameter
value until 2 byte, take of data input through by keypad, giving
appearance by LCD Graph, and to send data to the DSP
TMS320C5402, it is used a IC MAX 232 serial.

Keyword: ATmega32, serial data delivery, real time, keypad, LCD


Graph

iv
KATA PENGANTAR

Assalamu’alaikum Wr. Wb,

Puji Syukur Alhamdulillah kehadlirat Allah SWT yang


senantiasa selalu memberikan Ridho dan RahmatNya sehingga penulis
dapat menyelesaikan proyek akhir ini dengan judul:

Pemanfaatan Mikrokontroler Sebagai Pengatur Parameter


Pada Efek Gitar Digital
Dalam menyelesaikan proyek akhir ini, penulis berpegang pada
teori yang pernah didapat dan bimbingan dari para dosen pembimbing
proyek akhir. Dan juga pihak – pihak lain yang sangat membantu hingga
terselesaikannya proyek akhir ini.
Proyek akhir ini merupakan salah satu syarat akademis untuk
memperoleh gelar Ahli Madya (A.Md.) di Politeknik Elektronika Negeri
Surabaya, Institut Teknologi Sepuluh November Surabaya.
Sebagai penutup, tak ada gading yang tak retak mengibaratkan
bahwa pada tugas akhir ini masih terdapat banyak kelemahan dan
kekurangan, meskipun penulis telah berusaha untuk melakukan yang
terbaik. Dan akhir kata penulis berharap semoga tugas akhir ini dapat
memberi manfaat bagi penulis dan rekan-rekan mahasiswa pada
khususnya serta seluruh pembaca pada umumnya.
Wassalamu’alaikum Wr.Wb.

Surabaya, Agustus 2007

Penulis

v
UCAPAN TERIMA KASIH

Alhamdulillah, atas segala limpahan rahmat, taufik, hidayah


serta inayah-Nya sehingga proyek akhir ini dapat kami selesaikan
dengan baik. Kami menyadari bahwa terwujudnya proyek akhir ini tak
lepas dari bantuan, bimbingan dan dukungan dari berbagai pihak. Oleh
karena itu dengan segala kerendahan hati kami sampaikan terima kasih
kepada :

1. Allah swt, yang atas izin dan kuasa-Nya kami masih diberi
kesempatan untuk dapat menyelesaikan Tugas Akhir ini.
2. Ayah dan Ibu atas kasih sayang dan perhatiannya, yang telah
bekerja keras dan membanting tulang untuk membiayai sehingga
penulis bisa tetap kuliah dan menyelesaikan proyek akhir ini,
serta memberi dorongan serta do’a dalam tugas akhir ini. Semoga
Allah selalu melindungi dan memudahkan jalan mereka.
3. Bapak Dr. Ir. Titon Dutono M.Eng selaku Direktur PENS-ITS.
4. Bapak Mohd. Syafrudin, ST.,M.Eng. selaku ketua jurusan Teknik
Elektronika.
5. Bapak Hary Oktavianto, ST., dan bapak Tri Harsono, Ssi. M.Kom
selaku dosen pembimbing kami yang telah banyak memberikan
ilmu, pengarahan, bimbingan, dan masukan-masukan kepada
penulis sehingga Tugas Akhir ini dapat terselesaikan dengan baik.
6. Partner TA-ku, Ahmad Bahtiar, yang s’lalu kompak bekerja
sama, kerja bareng siang dan malam, tiada kata yang terucap
selain please forgive me and thank you very much.
7. Teman-teman seperjuanganq, yang selalu mengingatkan aq dan
memberikan saran kritik buat kebaikkan semuanya, Thax to all.
Aq berharap dengan selesainya TA-q, aq tetap bersama kalian
dengan karya2-q.
8. Guru programq, Kholid Amrillah, Thax always telah mengajariq
program, sehingga penulis bisa belajar kreatif dalam program. ga’
percuma ngajari Mahasiswa kayak aq, buktinya Juara I, hehe..!
Serta Adex, thax 2 all u’r motivation, with u’r problems and u’r
message - writer always remember to his mission. Jangan
ngambe’kan & muuanja lagi ya! Terus Belajar!!

vi
9. Untuk semua arek2 kelas 3 D3Ea yang satu perjuangan dalam
kondisi apapun, ya ngerjain laporan, garap tugas, nyontek
berjama’ah, belajar bareng. Tanpa kalian poltek ga’ bakalan
RaMe! Hidup D3Ea...!
10. Seluruh penghuni Lab. D4 lantai 1, yang selalu membantu, bisa
diajak kerja sama, diajak guyon, dan bisa dimintain tolong
mbeliin maem ’n pinjem komponen. Sori kalo g’ sengaja ngrusak
barang kalian dan kenapa kalian rusak barangku?!! Thanx 2 all.

Serta semua pihak yang telah membantu baik secara langsung


maupun tidak langsung. Saya ucapkan terima kasih buanyak atas
bantuannya. Maaf kalau ga bisa disebutin semua, nanti bukunya
penuh dengan ucapan terima kasih. Buat temen-temen semua,
Sukses Karirnya!! ^_^ !

vii
DAFTAR ISI

Lembar Judul .........................................................................................i


Lembar Pengesahan ..............................................................................ii
Abstrak .................................................................................................iii
Abstract ................................................................................................iv
Kata Pengantar ...................................................................................... v
Ucapan Terima kasih ...........................................................................vi
Daftar Isi .............................................................................................viii
Daftar Gambar .....................................................................................xi
Daftar Tabel .......................................................................................xiii

BAB 1 PENDAHULUAN
1.1.LATAR BELAKANG .......................................................... 1
1.2 TUJUAN .............................................................................. 1
1.3 PERMASALAHAN ............................................................. 2
1.4 BATASAN MASALAH ...................................................... 2
1.5 METODOLOGI ................................................................... 2
1.6 SISTEMATIKA PEMBAHASAN ....................................... 3

BAB 2 TEORI PENUNJANG


2.1. MIKROKONTROLER AVR ATmega32 ........................... 5
2.1.1 Arsitektur AVR ATmega32 .................................... 5
2.1.2 Konfigurasi PIN ATmega32 ................................... 6
2.1.3 Port Sebagai Input/Output Digital .......................... 8
2.2. KOMUNIKASI DATA SERIAL ........................................ 9
2.2.1. Metode Komunikasi ............................................. 10
2.2.2. Protokol Pengiriman Data..................................... 10
2.2.3. Format Data Komunikasi Serial .......................... 11
2.2.4. Port Serial RS 232 ............................................... 13
2.3. CODE VISION AVR ......................................................... 16
2.3.1. Fasilitas Code Vision AVR .................................. 16
2.3.2. Membuat Project Baru.......................................... 17
2.3.3. Menampilkan data ke Layar dan Menghu-
bungkan ke Hyperterminal................................... 19
2.3.4. Download ke Mikrokontroler ............................... 21
2.3.5. Konektor RS 232 Mikrokontroler dengan DSK
TMS320C5402 .................................................... 21

viii
2.4. LCD GRAFIK ................................................................... 22
2.4.1. Fitur dan Spesifikasi Teknis ............................................ 22
2.4.2. Inisialisasi LCD Grafik ................................................... 23
2.5. KEYPAD MATRIK 4x4 ................................................... 24
2.5.1. Prinsip Dasar Scanning Keypad ............................... 25
2.5.1.1. Metode Polling ........................................... 25
2.5.1.2. Metode Interrupt......................................... 25

BAB 3 PERENCANAAN DAN PEMBUATAN ALAT


3.1. Perencanaan Proyek Akhir Keseluruhan ............................ 29
3.2. Perancangan Perangkat Keras Downloader
Mikrokontroler ATmega32 ................................................ 30
3.3. Perancangan Minimum Sistem Mikrokontroler AVR
ATmega32.......................................................................... 30
3.4. Perancangan Minimum Sistem Mikrokontroler dengan
keypad dan LCD grafik ...................................................... 32
3.4.1. Keypad ..................................................................... 32
3.4.2. Tampilan pada LCD grafik....................................... 34
3.5. Perancangan Pengiriman Protokol Serial ........................... 35
3.6. Perancangan Software Mikrokontroler ATmega32............ 37
3.6.1. Perancangan Efek Tunggal....................................... 37
3.6.2. Perancangan Efek Gabung ....................................... 40
3.6.2.1. Penggabungan 2 efek.................................. 41
3.6.2.2. Penggabungan 3 efek.................................. 41

BAB 4 PENGUJIAN DAN ANALISA


4.1. Pengujian Minimum Sistem dan Port ATmega32 .............. 43
4.2. Pengujian Hubungan Minimum Sistem Dengan
PC (Serial ........................................................................... 44
4.3. Pengujian Rangkaian antara Keypad dengan
LCD grafik dan Minimum Sistem..................................... 45
4.4. Pengujian Pengubahan Nilai Parameter Secara
Serial dari Mikrokontroler ke DSP TMS320C5402
Sebanyak 2 byte ................................................................. 47
4.5. Pengujian Gabungan Efek ................................................. 50
4.5.1. Pengujian Penggabungan 2 efek............................... 51
4.5.2. Pengujian Penggabungan 3 efek............................... 52

ix
BAB 5 PENUTUP
5.1. Kesimpulan ........................................................................ 53
5.2. Saran .................................................................................. 53

DAFTAR PUSTAKA......................................................................... 55
LAMPIRAN
DAFTAR RIWAYAT HIDUP

x
DAFTAR GAMBAR

Gambar 2.1. Blok Diagram Arsitektur ATmega32 ...................... 6


Gambar 2.2. Pin-pin ATmega32 Kemasan 40-pin 2 .................... 6
Gambar 2.3. Hubungan Simplex .................................................. 10
Gambar 2.4. Hubungan Half-Duplex ........................................... 10
Gambar 2.5. Hubungan Full-Duplex............................................ 10
Gambar 2.6. Format Pengiriman Data dari Mikrokontroler
ke DSK TMS320C5402 .......................................... 11
Gambar 2.7. Format Data Serial................................................... 13
Gambar 2.8. Konektor Serial DB-9 pada Bagian Belakang CPU 13
Gambar 2.9. Pembuatan Project Baru .......................................... 17
Gambar 2.10. Inisialisasi mikrokontroler
a. Pilihan Inisialisasi Mikrokontroler ...................... 17
b. Menyimpan Hasil Inisialisasi pada AVR ............ 17
Gambar 2.11. Menyimpan Hasil Inisialisasi Dalam Folder ........... 18
Gambar 2.12. Pilihan After Make Chip Sebelum di Download ..... 18
Gambar 2.13. Pilihan Type Program Chip Sebelum di Download. 19
Gambar 2.14. Tampilan Code Vision AVR ................................... 18
Gambar 2.15. Tampilan Hyperterminal ......................................... 19
Gambar 2.16. Contoh Hasil Compile Program .............................. 21
Gambar 2.17. Pemasangan DB-9 antara Mikrokontroler
dengan Komputer .................................................... 22
Gambar 2.18. Pemasangan DB-9 antara mikrokontroler
dengan DSP TMS320C5402 ................................... 22
Gambar 2.19. Jumper font pada LCD Grafik
a. Jumper Font 8 x 8 (Default)................................. 23
b. Jumper Font 6 x 8 ................................................ 23

Gambar 2.20. Rangkaian LCD grafik GM24644 ........................... 24


Gambar 2.21. Blok Diagram Proses Scanning Keypad.................. 26
Gambar 2.22. Flowchart Scanning Keypad Metode Polling .......... 27
Gambar 2.23. Schematic Keypad .................................................. 27
Gambar 3.1. Rancangan Proyek Akhir Secara Keseluruhan ........ 29
Gambar 3.2. Rangkaian Downloader ISP Flash........................... 30
Gambar 3.3. Rangkaian Minimum Sistem Mikrokontroler.......... 31
Gambar 3.4. Pengaturan Minimum Sistem Mikrokontroler
ATmega32 .............................................................. 32

xi
Gambar 3.5. Program Keypad Beserta Inisialisasi Tombol
Keypad .................................................................... 33
Gambar 3.6. Program Pemilihan Efek.......................................... 38
Gambar 3.7. Program Memasukkan Nilai Parameter................... 39
Gambar 3.8. Program Pengiriman Data. ...................................... 40
Gambar 4.1. Diagram Blok Dari Rangkaian Pengujian
Mikrokontroler ........................................................ 43
Gambar 4.2. Program Pengujian Minimum Sistem dan Port
ATmega32 ............................................................... 43
Gambar 4.3. Port Settings Hyperterminal .................................... 44
Gambar 4.4. Pengujian Komunikasi Serial pada
Hyper Terminal ....................................................... 45
Gambar 4.5. Diagram Blok Pengujian Mikrokontroler ,
LCD, dan Keypad.................................................... 45
Gambar 4.6. Program Pengujian Rangkaian antara Keypad
dengan LCD .Grafik dan Minimum Sistem............ 46
Gambar 4.7. Hasil Pengujian Rangkaian Keypad, Minimum
Sistem, dan LCD Grafik .......................................... 46
Gambar 4.8. Blok Diagram Pengujian Pengubahan Nilai
Parameter Secara Serial dari Mikrokontroler
ke DSP TMS320C5402 Sebanyak 2 byte................ 47
Gambar 4.9. Program Pengujian Pengubahan Parameter............. 48
Gambar 4.10. Hasil Pengujian Pengubahan Nilai Parameter
a. Nilai Parameter 1 byte ......................................... 49
b. Nilai Parameter 2 byte ......................................... 49
Gambar 4.11. Blok Diagram Pengujian Pengubahan Parameter
oleh Mikrokontroler ATmega32 pada DSP
....TMS320C5402........................................................ 51

xii
DAFTAR TABEL

Tabel 2.l. Konfigurasi PIN Port ......................................................... 9


Tabel 2.2. Konfigurasi PIN dan Nama Sinyal Konektor Serial DB9 .. 14
Tabel 2.3. Nama Register yang Digunakan Beserta Alamatnya ......... 15
Tabel 3.1. Perancangan efek tunggal................................................. 37
Tabel 3.2. Pilihan Gabungan 2 Efek yang Dapat Digabung............... 41
Tabel 3.3. Pilihan Gabungan 3 Efek yang Dapat Digabung............... 41
Tabel 4.1. Hasil pengujian pengubahan nilai parameter
pada efek tunggal ............................................................... 50
Tabel 4.2. Hasil Pengujian Gabungan 2 Efek..................................... 51
Tabel 4.3. Hasil Pengujian Gabungan 3 Efek .................................... 52

xiii
BAB 1
PENDAHULUAN
1.1 LATAR BELAKANG
Kualitas suara yang dihasilkan pada perangkat digital jauh lebih
unggul dan lebih bervariasi dari pada suara yang dihasilkan pada
perangkat analog. Proyek akhir sebelumnya, telah dibuat dua proyek
efek gitar digital yang menggunakan DSP TMS320C5402. Pertama
pembuatan efek gitar berbasis distorsi, yang terdiri dari 7 efek, dan
pembuatan efek audio berbasis time delay, terdiri dari 6 efek. Pada
proyek akhir tersebut nilai parameter pada masing-masing efek masih
bernilai tetap, dan tidak bisa di ubah-ubah.

Berdasarkan hal tersebut, pada proyek akhir ini kami akan


mencoba melakukan pengembangan dari proyek akhir sebelumnya,
yaitu kami akan menambahkan nilai parameter pada masing-masing
efek dapat diubah-ubah, pengabungan efek dari dua proyek akhir
sebelumnya, serta efek dapat digabungkan. Untuk merealisasikanya
kami melakukan pembagian kerja antara DSP dengan mikrokontroler
agar proses pada DSP tetap real-time.

Pada dasarnya pada proyek akhir ini terdapat tiga variabel yang
dapat diubah-ubah oleh mikrokontroler, yaitu alamat efek, alamat
parameter, dan nilai parameter. Terdapat 11 alamat efek, yang tiap
alamat efeknya terdapat alamat parameter yang telah ditetapkan
nilainya. Dan tiap alamat parameter mempunyai nilai parameter yang
nilainya dapat diubah-ubah serta diberikan batas nilai minimum dan
maksimal nilai yang dimasukkan.

Pada proyek akhir penulis, penulis lebih spesifik pada pembuatan


rangkaian yang melibatkan penggunaan mikrokontroler. Pada proyek
akhir ini penulis menggunakan mikrokontroler ATmega32 dengan
bahasa pemrograman C yang dibangun dalam program Code Vision
AVR untuk melakukan pengubahan parameter dan penggabungan efek
pada DSP TMS320C5402. Dan untuk melakukan pengiriman data ke
board DSK TMS320C5402 digunakan serial RS-232.

41
2

1.2 TUJUAN
Tujuan proyek akhir ini adalah :
• Dapat mengkomunikasikan antara mikrokontroler ATmega32
dengan DSP TMS320C5402 menggunakan protokol serial RS-
232
• Dapat mengubah-ubah parameter dan pengabungan efek
melalui keypad.
• Dapat membuat tampilan menu pada LCD sebagai kemudahan
mengakses data.

1.3 PERMASALAHAN
Adapun permasalahan yang akan penulis bahas dalam proyek
akhir ini adalah bagaimana mengkomunikasikan antara mikrokontroler
ATmega32 dengan DSP TMS320C5402 menggunakan protokol serial
RS-232, pengaturan parameter dan pengabungan efek melalui keypad.,
serta pembuatan tampilan menu pada LCD.

1.4 BATASAN MASALAH


Batasan masalah dalam proyek akhir ini adalah :
• Komunikasi serial antara mikrokontroler ATmega32 dengan DSP
TMS320C5402 adalah satu arah.
• Batasan untuk penggabungan efek adalah 2 efek.
• Hasil pengujian data diambil berdasar sampel yang mewakili atau
yang umum dipakai.

1.5 METODOLOGI
Perencanaan dan pembuatan proyek akhir ini memerlukan
langkah-langkah penyelesaian sebagai berikut:

Studi Literatur
Studi pendahuluan mengenai ATmega32, LCD grafik
gm24644, konfigurasi keypad 4x4, serta komunikasi serial RS-
232 dengan DSK TMS320C5402. Yaitu mempelajari prinsip
kerja, karakteristik dari tiap-tiap sistem.

Perancangan sistem
Meliputi pembuatan minimum sistem Mikrokontroler
ATmega32, inisialisasi dan perancangan port dengan LCD
grafik gm24644, serta perancangan tampilan menu untuk
kesesuaian pengiriman data.
3

Pengujian Alat dan Analisa Sistem


Pengujian kesesuaian pengiriman data dari Mikrokontroler
pada DSP TMS320C5402 untuk pengolahan efek dan analisa
terhadap hasil yang telah didapatkan

1.6 SISTEMATIKA PEMBAHASAN


Sistematika pembahasan dalam proyek akhir ini adalah sebagai
berikut :
Bab I. Pendahuluan
Menguraikan tentang latar belakang, tujuan, permasalahan,
batasan masalah, metodologi, dan sistematika pembahasan
masalah yang digunakan dalam pembuatan proyek akhir ini.

Bab II. Teori Penunjang


Teori – teori berisi tentang pembahasan secara garis besar
Mikrokontroler AVR ATmega32, Bahasa C, LCD grafik
gm24644, konfigurasi keypad 4x4, dan Komunikasi Serial
RS232.

Bab III. Perencanaan dan Pembuatan Perangkat Keras dan


Lunak
Pembahasan secara lengkap tentang perencanaan dan
pembuatan sistem yang dibangun seperti Interfaces ATmega32,
komunikasi antara Mikrokontroler ATmega32 dengan
DSK TMS320C5402, DownLoader Mikrokontroler
ATmega32, serta kesesuaian antara input keypad dengan output
pada LCD grafik.

Bab IV Pengujian Alat dan Analisa


Membahas tentang pengujian alat dan analisa perangkat keras
dari sistem yang telah dibuat.

Bab V Penutup
Berisi tentang kesimpulan dan saran yang berdasarkan analisa
hasil data yang diperoleh.
4

HALAMAN INI SENGAJA DIKOSONGKAN

4
5

BAB 2
TEORI PENUNJANG
2.1. MIKROKONTROLER AVR ATmega32
Pada bagian ini akan dibahas lebih dalam mengenai mikrokontroler
AVR ATmega32, meliputi arsitektur AVR ATmega32, konfigurasi PIN
ATmega32, dan port sebagai input dan otput.

2.1.1. Arsitektur AVR ATmega32


AVR merupakan seri Mikrokontroler CMOS 8-bit buatan Atmel,
berbasis arsitektur RISC (Reduced Instruction Set Computer). Hampir
semua instruksi dieksekusi dalam satu siklus clock. AVR mempunyai 32
register general-purpose, timer/counter fleksibel dengan mode compare,
interupt internal dan eksternal, serial UART, programmable Watchdog
Timer, dan mode power saving. Beberapa diantaranya mempunyai ADC
dan PWM internal. AVR juga mempunyai In-System Programmable Flash
on-chip yang mengijinkan memori program untuk diprogram ulang dalam
sistem menggunakan hubungan serial SPI. Chip AVR yang digunakan
untuk tugas akhir ini adalah ATmega 321.

Penulis menggunakan mikrokontroler ATmega32 dikarenakan


ATmega32 memiliki kapasitas EEPROM 1024 bytes dan kapasitas FLASH
16K words ( 32K bytes ). Dimana panjang baris program yang akan di
download ke mikrokontroler membutuhkan kapasitas yang cukup besar,
meliputi 11 efek dan efek gabungan.

Mikrokontroler ini merupakan mikrokontroler CMOS 8-bit daya-


rendah berbasis arsitektur RISC yang ditingkatkan. Kebanyakan instruksi
dikerjakan pada satu siklus clock, ATmega32 mempunyai throughput
mendekati 1 MIPS per MHz membuat disainer sistem untuk mengoptimasi
komsumsi daya versus kecepatan proses1. Blok diagram dari
Mikrokontroler dapat dilihat pada gambar 2.1.

5
1
Http://www.atmel.com/dyn/resources/prod_ documents/.pdf
6

Gambar 2.1. Blok Diagram Arsitektur ATmega321.

2.1.2. Konfigurasi PIN ATmega32


Pin-pin pada ATmega32 dengan kemasan 40-pin DIP (dual inline package)
ditunjukkan oleh gambar 2.2 Kemasan pin tersebut terdiri dari 4 Port yaitu
Port A, Port B, Port C,Port D yang masing masing Port terdiri dari 8 buah
pin. Selain itu juga terdapat RESET, VCC, GND 2 buah, VCC, AVCC,
XTAL1, XTAL2 dan AREF.

Gambar 2.2. Pin-pin ATmega32 kemasan 40-pin 2

1
Http://www.atmel.com/dyn/resources/prod_ documents/.pdf
7

Diskripsi dari pin-pin ATmega32 adalah sebagai berikut:


1. VCC : Supply tegangan digital.
2. GND : Ground
3. PORT A :
Menjalankan analog input ke A/D converter. Port A juga berfungsi
sebagai 8 bit directional I/O port jika A/D converter tidak digunakan.
Ketika pin PA0-PA7 digunakan input dan secara eksternal pull-low ,
mereka seperti sumber arus jika internal pull- up resistor diaktifkan. Pin
port A adalah tri-states ketika kondisi sebuah reset menjadi aktif,
sekalipun clocknya tidak jalan.

4. PORT B :
Port B adalah 8 bit bi-directional I/O port dengan Internal pull-up
resistor. Buffer output port B ini mempunyai karakteristik symmetrical
drive dengan kapabilitas source dan sink yang tinggi.Sebagai input, pin
port B adalah eksternal pull-low seperti sumber arus jika pull-up
resistor aktif. Pin port B adalah tri-states ketika kondisi sebuah reset
menjadi aktif, sekalipun clocknya tidak jalan.

5. PORT C :
Port C adalah 8 bit bi-directional I/O port dengan Internal pull-up
resistor. Buffer output port B ini mempunyai karakteristik symmetrical
drive dengan kapabilitas source dan sink yang tinggi.Sebagai input, pin
port C adalah eksternal pull-low seperti sumber arus jika pull-up
resistor aktif. Pin port C adalah tri-states ketika kondisi sebuah reset
menjadi aktif, sekalipun clocknya tidak jalan.Jika interface JTAG
enable, pull up resistor di pin PC5(TDI), PC3(TMS), dan PC2(TCK)
akan aktif sekalipun reset terjadi.

6. PORT D :
Port D adalah 8 bit bi-directional I/O port dengan Internal pull-up
resistor.
Buffer output port D ini mempunyai karakteristik symmetrical drive
dengan kapabilitas source dan sink yang tinggi.Sebagai input, pin port
D adalah eksternal pull-low seperti sumber arus jika pull-up resistor
aktif. Pin port D adalah tri-states ketika kondisi sebuah reset menjadi
aktif, sekalipun clocknya tidak jalan.

7. RESET :
Sebuah low level pada pin akan lebih lama dari pada lebar pulsa
minimum akan menghasilkan reset meskipun clock tidak berjalan.
8

8. AVCC :
Pin supply tegangan untuk Port A dan A/D converter. Sebaiknya
eksternalnya dihubungkan ke VCC meskipun ADC tidak digunakan.
Jika ADC digunakan, dihubungkan ke VCC melalui low pas filter.

9. XTAL1 :
Input inverting penguat Oscilator dan input intenal clock operasi
rangkaian.

10. XTAL2 : Output dari inverting penguat Oscilator.

11. AREF : Pin referensi analog untuk A/D konverter.

2.1.3. Port Sebagai Input/Output Digital


ATmega32 mempunyai empat buah port yang bernama PortA, PortB,
PortC, dan PortD. Keempat port tersebut merupakan jalur bidirectional
dengan pilihan internal pull-up. Tiap port mempunyai tiga buah register bit,
yaitu DDxn, PORTxn, dan PINxn. Huruf ‘x’mewakili nama huruf dari port
sedangkan huruf ‘n’ mewakili nomor bit. Bit DDxn terdapat pada I/O
address DDRx, bit PORTxn terdapat pada I/O address PORTx, dan bit
PINxn terdapat pada I/O address PINx. Bit DDxn dalam regiter DDRx
(Data Direction Register) menentukan arah pin. Bila DDxn diset 1 maka Px
berfungsi sebagai pin output. Bila DDxn diset 0 maka Px berfungsi sebagai
pin input.Bila PORTxn diset 1 pada saat pin terkonfigurasi sebagai pin
input, maka resistor pull-up akan diaktifkan.

Untuk mematikan resistor pull-up, PORTxn harus diset 0 atau pin


dikonfigurasi sebagai pin output. Pin port adalah tristate setelah kondisi
reset. Bila PORTxn diset 1 pada saat pin terkonfigurasi sebagai pin output
maka pin port akan berlogika 1. Dan bila PORTxn diset 0 pada saat pin
terkonfigurasi sebagai pin output maka pin port akan berlogika 0. Saat
mengubah kondisi port darikondisi tri-state (DDxn=0, PORTxn=0) ke
kondisi output high (DDxn=1, PORTxn=1) ka harus ada kondisi peralihan
apakah itu kondisi pull-up enabled (DDxn=0, PORTxn=1)atau kondisi
output low (DDxn=1, PORTxn=0). Biasanya, kondisi pull-up enabled dapat
diterima sepenuhnya, selama lingkungan impedansi tinggi tidak
memperhatikan perbedaan antara sebuah strong high driver dengan sebuah
pull-up. Jika ini bukan suatu masalah, maka bit PUD pada register SFIOR
dapat diset 1 untuk mematikan semua pull-up dalam semua port. Peralihan
dari kondisi input dengan pull-up ke kondisi output low juga menimbulkan
masalah yang sama. Kita harus menggunakan kondisi tri-state (DDxn=0,
PORTxn=0) atau kondisi output high (DDxn=1, PORTxn=0) sebagai
kondisi transisi.
9

Tabel 2.l. Konfigurasi pin port 3

Bit 2 – PUD : Pull-up Disable Bila bit diset bernilai 1 maka pull-up
pada port I/O akan dimatikan walaupun register DDxn dan PORTxn
dikonfigurasikan untuk menyalakan pull-up (DDxn=0, PORTxn=1).

2.2. KOMUNIKASI DATA SERIAL


Komunikasi data serial sangatlah berbeda dengan format pemindahan
data pararel. Disini, pengiriman bit-bit tidak dilakukan sekaligus melalui
saluran pararel, tetapi setiap bit dikirimkan satu persatu melalui saluran
tunggal. Dalam pengiriman data secara serial harus ada sinkronisasi atau
penyesuaian antara pengirim dan penerima agar data yang dikirimkan dapat
diterima dengan tepat dan benar oleh penerima.

Dalam komunikasi secara serial terdapat tiga macam mode transmisi


serial dalam mentransmisikan bit-bit data, yaitu : synchronous,
asynchronous dan isochronous saja yang digunakan. Transmisi serial mode
asynchronous digunakan bila pengiriman data dilakukan satu karakter tiap
pengiriman. Antara satu karakter dengan yang lainnya tidak ada waktu yang
tetap. Karakter dapat dikirimkan sekaligus ataupun beberapa karakter
kemudian berhenti untuk waktu yang tidak tertentu, kemudian dikirimkan
sisanya.

Dengan demikian bit-bit data ini dikirimkan dengan periode yang acak
sehingga pada sisi penerima data akan diterima kapan saja. Adapun
sinkronisasi yang terjadi pada transmisi serial asynchronous adalah dengan
memberikan bit-bit pertanda awal dari data dan penanda akhir dari data
pada sisi pengirim maupun dari sisi penerima.
10

2.2.1. Metode Komunikasi


Metode komunikasi dibagi menjadi 3, yaitu :
1. Mode Komunikasi Simplex
Pada mode komunikasi simplex ini jalur komunikasi yang
diberikan adalah satu arah. Dalam komunikasi, pengirim dan penerima
adalah permanen, dimana pada pengirim adalah selalu mengirim data dan
penerima selalu menerima data, metode komunikasi inilah yang dipakai
penulis untuk pengiriman data.

Pengirim Penerima

Gambar 2.3 Hubungan simplex5

2. Mode Komunikasi Half-Duplex


Mode ini komunikasi data dilakukan dalam dua arah, dimana
masing-masing sebagai penerima atau sebagai pengirim data. Namun
Pengirim Penerima pada mode ini tidak dapat dilakukan secara bersamaan,
melainkan bergantian (two way alternativ)e. Jika salah satu sebagai
pengirim maka yang lain adalah sebagai penerima, demikian juga
sebaliknya.

Pengirim Penerima
Penerima Pengirim

Gambar 2.4 Hubungan Half-Duplex5


3. Mode Komunikasi Full-Duplex
Mode komunikasi full-duplex pada prinsipnya sama dengan mode
komunikasi half-duplex, bedanya adalah komunikasi dapat dilakukan dalam
dua arah yang terjadi secara bersamaan.

Pengirim Penerima
Penerima Pengirim

Gambar 2.5 Hubungan Full-Duplex5

2.2.2. Protokol Pengiriman Data


Metode komunikasi yang dipakai penulis adalah metode
komunikasi simplex. Dimana telah ditetapkan bahwa mikrokontroler
ATmega32 sebagai transceiver dan DSP TMS320C5402 sebagai receiver.
Adapun permasalahan yang muncul adalah komunikasi serial hanya
mengijinkan pengiriman data 1 byte, padahal untuk melakukan pengubahan
efek pada DSP TMS320C5402 data yang dikirim lebih dari 1 byte.
5
Budiharto Widodo,S.Si,M.Kom, Interfacing Komputer dan Mikrokontroler,
Elex Media Komputindo, Jakarta, 2004.
11

Maka metode pengiriman data yang kami gunakan adalah


pengiriman secara berturut-urut menggunakan perintah pengiriman data
putchar().Untuk mengirimkan data mulai dari efek, parameter, nilai
parameter. Membutuhkan lima perintah putchar(), yang masing-masing
untuk menghubungi start, efek, parameter, dan nilai parameter, yang diberi
jeda berupa delay.
Jika data yang dikirim lebih dari 1 byte, misal 2 byte, maka data
tersebut dipisah dahulu menjadi masing-masing 1 byte. Untuk melakukan
hal tersebut digunakan perintah geser byte sebelum dilakukan pengiriman
data. Format pengiriman data dari mikrokontroler ATmega32 ke DSP
TMS320C5402 secara keseluruhan dapat dilihat pada gambar 2.6.

Pengiriman Pengiriman
awal akhir

1 byte 1 byte 1 byte 1 byte 1 byte


Start Efek Parameter Nilai-1 Nilai-2

DSK ATmega32
TMS320C5402

Gambar 2.6 Format Pengiriman Data dari mikrokontroler ke DSK


TMS320C5402

2.2.3. Format Data Komunikasi Serial


Dalam teknik komunikasi data serial dikenal istilah format data serial.
Format data serial ini terdiri dari parameter-parameter yang dipakai untuk
menentukan bentuk data serial yang akan dikomunikasikan. Ada beberapa
macam format data serial yang dapat digunakan, dimana elemen-elemennya
terdiri dari :

1. Kecepatan mobilisasi data per bit (Baud rate)


Laju perpindahan data serial dinyatakan dalam baud. Laju baud
dalam kanal komunikasi merupakan laju tercepat dari perpindahan bit. Laju
pemindahan bit kanal jaringan biasanya lebih rendah dari laju baud.
Keterlambatan tersebut karena bit ekstra ditambahkan untuk keperluan
pewaktuan. Data serial dapat dimobilisasikan pada berbagai baud rate.
modem asynchronous adalah 300 bps sampai dengan 19200 bps. Kecepatan
transmisi (Baud Rate) merupakan suatu hal yang amat penting dalam
komunikasi data seri asinkron, mengingat dalam komunikasi data seri
asinkron clock tidak ikut dikirimkan, sehingga harus diusahakan bahwa
kecepatan transmisi mengikuti standard yang sudah ada.
12

2. Jumlah bit data per karakter (data length)


Dalam komunikasi data serial mode asynchronous biasanya
berlangsung transmisi data yang dikemas dalam bentuk karakter. Dalam
satu karakter diperbolehkan terdiri dari beberapa variasi jumlah bit. Dari
sekian variasi yang diperbolehkan diantaranya dalah terdiri dari 7 bit dan 8
bit (panjang data karakternya saja). Kedua variasi ini adalah yabg paling
sering digunakan dalam komunikasi data serial. Tetapi meskipun demikian
tidak menutup kemungkinan jika diinginkan untuk menggunakan variasi
jumlah bit yang lain asalkan masih diperkenankan dalam penulisan
inisialisasi peralatan serial yang bersangkutan.

3. Parity yang digunakan


Bit parity adalah bit yang digunakan sebagai alat pemerikasaan
kesalahan sederhana dalam proses transmisi data digital. Pemakaian parity
ini akan diikutsertakan dalam proses penulisan inisialisasi peralatan serial
yang bersangkutan. Bit parity ini akan diletakkan setelah susunan bit dat.
Kemungkinan dari jenis parity ini ada tiga macam, yaitu : parity ganjil,
parity genap dan tanpa parity (tidak diikutkan dalam pemeriksaan
kesalahan). Level digital dari bit parity ini akan ditentukan oleh jenisnya.
Jika seluruh bit data yang ada dijumlah dan hasilnya dibagi dua, maka
sisanya akan dianggap sebagai level digital dari bit parity yang
bersangkutan. Jika salah satu dari bit data tertanggu dalam proses
transmisinya, maka bit parity yang dibangkitkan tidak benar, dan hal
semacam ini dapat dideteksi oleh peralatan serial pada terminal yang sedang
berfungsi sebagai terminal penerima. Pada jenis parity genap (even) akan
dibangkitkan bit parity yang memiliki level digital berupa kebalikan dari
sisa hasil bagi jumlah nilai seluruh bit data yang telah dijelaskan diatas,
dengan kata lain bit parity akan bernilai 0 (null) jika sisa hasil baginya sama
dengan 1 (satu). Demikian juga sebaliknya, apabila yang dipakai jenis
parity ganjil, maka bit parity yang dibangkitkan akan bernilai 1 jika sisa
hasil baginya sama dengan 1. Di dalam proses komunikasi data serial mode
null modem asynchronous, seringakali bit parity ini tidak dipakai.

4. Jumlah stop bit dan start bit


Pada komunikasi data serial pada mode asynchronous, port serial
yang menerima karakter serial harus tahu kapan karakter itu diawali dan
kapan karakter itu diakhiri. Bertolak dari hal tersebut, maka dalam proses
komunikasi data serial juga disertakan bit awal dan bit akhir. Bit awal (start
bit) yang selalu bernilai 0 (null) akan menandai awal dari pengiriman suatu
karakter. Setelah bit awal, maka selalu diikuti bit data dan bit parity jika
ada. Dan akhirnya terdapat satu atau dua bit yang menandakan akhir dari
karakter yang dikirimkan. Bit-bit inilah yang dinamakan stop bit, dan
kombinasi jumlahnya adalah satu atau dua bit.
13

Sebelum berkomunikasi dengan port serial, terlebih dahulu


diketahui parameter-parameter format data serial yang meliputi : kecepatan
transmisi yang digunakan, memakai parity atau tidak, jumlah stop bit yang
digunakan dan panjang data yang digunakan. Ilustrasi level tegangan digital
dari contoh format data serial ini ditunjukkan pada gambar 2.7. Pilihan ini
kebanyakan didasarkan pada kemampuan dari piranti yang dihubungkan
pada port serial.

Gambar 2.7 Format Data Serial

2.2.4. Port Serial RS-232


Pengiriman data yang bisa dilakukan pada komunikasi serial hanya
ada satu bit informasi. Dengan demikian secara otomatis hanya ada satu
kabel yang diperlukan dalam proses transmisi data ini. Dikatakan pula
bahwa komunikasi data secara serial memiliki kesederhanaan dalam hal
pengkabelannya. Hal tersebut dapat terwujud tidak lain karena adanya port
serial yang merupakan piranti dari sebuah komputer yang sanggup
mengubah bentuk data paralel menjadi data serial dan juga sebaliknya dari
data serial menjadi data paralel.

Gambar 2.8 Konektor Serial DB-9 pada bagian belakang CPU 4.

4
Rizqi Firmansyah, Robot Pengelasan (Hardware). Tugas Akhir PENS-ITS, 2003.
14

Tabel 2.2 Konfigurasi pin dan nama sinyal konektor serial DB-9

Keterangan mengenai fungsi saluran RS 232 pada konektor DB-9


adalah sebagai berikut :

• DCD, Received Line Signal Detect, dengan saluran ini DCE


memberitahukan ke DTE bahwa pada terminal masukan ada data
masuk.
• RxD, Receive Data, digunakan DTE menerima data dari DCE.
• TxD, Transmit Data, digunakan DTE mengirimkan data ke DCE.
• DTR, Data Terminal Ready, pada saluran ini DTE memberitahukan
kesiapan terminalnya.
• GND, Signal Ground, saluran ground.
• RI, Ring Indicator, pada saluran ini DCE memberitahu ke DTE bahwa
sebuah stasiun menghendaki hubungan dengannya.
• CTS, Clear To Send, dengan saluran ini DCE memberitahukan bahwa
DTE boleh mulai mengirim data.
• RST, Request To Send, pada saluran ini DCE diminta mengirim data oleh
DTE.
• DSR, Data Set Ready sinyal aktif pada saluran ini menunjukkan bahwa
DCE sudah siap.

Untuk dapat menggunakan port serial kita perlu mengetahui


alamatnya. Biasanya tersedia dua port serial pada CPU, yaitu COM1 dan
COM2. Base address COM1 biasanya adalah 1016 (3F8h) dan COM2
biasanya 760 (2F8h). Alamat tersebut adalah alamat yang biasa digunakan,
tergantung dari komputer yang digunakan. Tepatnya kita bisa melihat pada
peta memori tempat menyimpan alamat tersebut, yaitu memori 0000.0004h
untuk base address COM1 dan memori 0000.0402h untuk base address
COM2. Setelah kita mengetahui base address-nya, maka kita dapat
menentukan alamat register-register yang digunakan untuk komunikasi port
serial ini.
15

Tabel 2.3 Nama register yang digunakan beserta alamatnya.

Keterangan mengenai fungsi register-register tersebut adalah


sebagai berikut :

• Rx Buffer, digunakan untuk menampung dan menyimpan datadari DCE.


• Tx Buffer, digunakan untuk menampung dan menyimpan data yang akan
dikirim ke port serial.
• Baud rate Divisor Latch LSB, digunakan untuk menampung byte bobot
rendah untuk pembagi clock pada IC UART agar didapat baud rate yang
tepat.
• Baud rate Divisor Latch MSB, digunakan untuk menampung byte bobot
rendah untuk pembagi clock pada IC UART sehingga total angka
pembagi adalah 4 byte yang dapat dipilih dari 0001h sampai FFFFh.
Sebagai catatan, register Baud Rate Divisor Latch ini bisa diisi jika bit 7
pada register Line Control Register diisi 1.
• Interrupt Enable Register, digunakan untuk menset interupsi apa saja
yang akan dilayani komputer.
• Interrupt Identification Register, digunakan untuk menentukan urutan
prioritas interupsi.
• Line Control Register, digunakan untuk menentukan jumlah bit data,
jumlah bit pariti, jumlah bit stop, serta untuk menentukan apakah baud
rate divisor dapat diubah atau tidak.
• Modem Control Register, digunakan untuk mengatur saluran pengatur
modem terutama saluran DTR dan saluran RST.
• Line Status Register, digunakan untuk menampung bit-bit yang
menyatakan keadaan penerimaan data dan status kesalahan operasi.

Modem Status Register, digunakan untuk menampung bit-bit yang


menyatakan status dari saluran hubungan dengan modem.
16

2.3. CODE VISION AVR


Code vision AVR adalah suatu C cross-compiler, yang
mengembangkan pada integrasi external dan Program Generator otomatis
yang dirancang untuk keluarga ATMEL AVR microcontrollers. Aplikasinya
dirancang untuk dapat bekerja di Windows 95, 98, NT 4, 2000 dan XP
sistem operasi 6.

Implementasi C cross-compiler hampir semuanya unsur-unsurnya


menggunakan bahasa C, seperti diijinkan oleh arsitektur AVR, dengan
beberapa fasilitas yang ditambahkan untuk keunggulan dari spesifikasi dari
AVR dan juga beberapa tambahan fasilitas pada sistem embedded yang
diperlukan. Pada Codevisionavr teradapa perangkat lunak untuk built-in
pada Program AVR Chip In-System yang memungkinkan untuk transfer
data secara otomatis ke mikrokontroler 6.

2.3.1. Fasilitas Code Vision AVR


Dalam perkembangannya fasilitas-fasilitas pendukung pada Code
vision AVR semakin bertambah. Berikut ini fasilitas-fasilitas yang terdapat
pada Code vision AVR antara lain :

Tipe program pada chip AVR.


Pada Perangkat lunak ini dirancang untuk bekerja bersama dengan :
• Atmel STK500/AVRISP/AVRPROG ( AVR910 catatan aplikasi).
• Kanda Sistem STK200+/300.
• Dontronics DT006.
• Vogel Elektronik VTEC-ISP.
• FUTURLEC JRAVR.
• MICROTRONICS ATCPU/MEGA2000 board.

Codevisionavr juga berisi Codewizardavr Generator Program yang


Otomatis. Pada semua kode perlu untuk menerapkan fungsi berikut :

• External memory access setup


• Identifikasi sumber chip reset
• Port Input/Output Inisialisasi
• External Interrupts Inisialisasi
• Timers/Counters Inisialisasi
• Watchdog Timer Inisialisasi
• Inisialisasi UART dan interrupt buffered komunikasi serial
• Analog Comparator and ADC Inisialisasi
• SPI Interface Inisialisasi
6
Code Vision AVR, help.
17

• I2C Bus, LM75 Temperature Sensor, DS1621


Thermometer/Thermostat and PCF8563, PCF8583, DS1302, DS1307
Real Time Clocks Inisialisasi
• Inisialisasi 1 Wire Bus and DS1820/DS18S20 Temperature Sensor
• Inisialisasi modul LCD.

2.3.2. Membuat Project Baru


Pembuatan project baru diikuti dengan inisialisasi serta pengesetan
fasilitas – fasilitas yang dibutuhkan. Berikut ini langkah – langkah untuk
membuat project baru :
1. Buka program Code Vision AVR
2. Pilih file – new. Maka akan muncul tampilan pada gambar 2.9.

Gambar 2.9. Pembuatan Project Baru

3. Setelah memilih project, kemudian tekan OK. Maka tampilan


berikutnya pada gambar 2.10. Disini anda dapat melakukan inisialisasi
sesuai dengan peralatan yang akan dijalankan. Untuk menyimpan hasil
inisialisasi ditunjukkan pada gambar 2.10.a dan gambar 2.10.b .

(a) (b)

Gambar 2.10. Inisialisasi mikrokontroler


a. Pilihan inisialisasi mikrokontroler
b. Menyimpan hasil inisialisasi pada AVR
18

4. Selanjutnya akan muncul tampilan sebagai berikut. Kemudian klik


tombol save sebanyak tiga kali dengan nama yang sama.

Gambar 2.11. Menyimpan hasil inisialisasi dalam folder

5. Kemudian pada Code Vision AVR pilih project-configure maka akan


muncul tampilan pada gambar 2.12., pilih After Make-Program The
Chip dan pilih Ok.

Gambar 2.12. Pilihan after make chip sebelum di download


19

6. Pada program pilih setting-programmer dan muncul tampilan pada


gambar 2.13. Pada type AVR gunakan Kanada System STK200+/300.

Gambar 2.13. Pilihan tipe program chip sebelum di download

2.3.3. Menampilkan Data ke Layar dan Menghubungkan ke


Hyperterminal

Untuk keperluan menampilkan data/informasi, Code Vision AVR


menyediakan sejumlah fungsi. Beberapa diantaranya yaitu:

1) Fungsi printf()
Fungsi printf() merupakan fungsi yang paling umum digunakan
dalam menampilkan data. Berbagai jenis data dapat ditampilkan ke
Code Vision AVR dengan memakai fungsi ini.

2) Fungsi putchar()
Fungsi putchar( ) digunakan untuk menampilkan sebuah karakter.
Penampilan karakter disini tidak diakhiri dengan perpindahan baris.
Contoh :
Putchar (‘A’);

3) Fungsi putsf()
Fungsi putsf() digunakan untuk menampilkan karakter dalam
jumlah banyak. Penampilan karakter disini juga tidak diakhiri dengan
perpindahan baris. Penulisan karakter yang dikirim diapit tanda petik
ganda.
Contoh : Putchar (”Politeknik Elektronika Negeri Surabaya!”);
20

Untuk melihat hasil tampilan dari data yang kita kirimkan melalui
fungsi-fungsi diatas, dapat dilihat pada fasilitas terminal yang disediakan
oleh Code Vision AVR. Langkah untuk mengaktifkannya yaitu :

1. Tulis perintah fungsi diatas pada program Code Vision AVR ,


kemudian pada toolbar klik icon run terminal, bergambar
komputer, atau pilih tools-terminal. Tampilan ditunjukkan pada
gambar 2.14.
2. Klik tombol connect/disconnect untuk menghubungkan dengan
program. Dan tombol Hex untuk menampilkan angka dalam hexa
desimal, sedang tombol ASCII menampilkan data berupa huruf.

Tampilan layar
Run Terminal

Gambar 2.14. Tampilan Code Vision AVR

Untuk menghubungkan dengan hyper terminal klik tombol


disconnect, kemudian buka hyperterminal dan klik icon call (gambar
telepon).

Gambar 2.15. Tampilan hyperterminal


21

2.3.4. Download ke Mikrokontroler


Untuk melakukan download terlebih dahulu dilakukan setting agar
Code Vision AVR dapat membaca adanya mikrokontroler dan agar dapat
mengirimkan data. Pada program Code Vision AVR, pilih project-
configure-after make-program the chip dan check signature pada kotak
pilihan. Dan penyetingan dilanjutkan pada toolbar setting-program, type
AVR chip program yang digunakan adalah kanada system STK200+/300.
Setelah melakukan penyetingan, download dilakukan dengan pilihan
project-compile, jika tidak ada error dilanjutkan dengan memberikan
perintah project-make-program.

Gambar 2.16. Contoh Hasil Compile Program

2.3.5. Konektor RS 232 dari Mikrokontroler ke DSK TMS320C5402


Untuk mengirimkan pesanan dari mikrokontroler ke PC ialah
menggunakan sistem dupleks atau hanya searah saja. Bautrate yang
digunakan ialah 9600 bps. Pada konektor serial ini yang digunakan hanya 3
pin saja yaitu TX, RX dan ground.

Pada Proyek Akhir ini kabel serial yang digunakan untuk


memberikan informasi berupa pengiriman data dari mikrokontroler ke DSP
TMS320C5402. Konfigurasi pin kabel serial mikrokontroler harus
menyesuaikan dengan pin pada DSK TMS320C5402, karena board tersebut
mempunyai letak pin yang berbeda pada pemasangan kabel serial pada
komputer. Agar komunikasi antara kedua perangkat dapat berlangsung,,
maka pemasangan pin Tx-Rx untuk komunikasi serial dari mikrokontroler
ke komputer harus dibalik, kemudian pin Tx-Rx dari DB-9 tersebut
dipasangkan pada serial DSK TMS320C5402.
22

Tx Tx
Mikrokontroler Rx Rx
Gnd Gnd

Gambar 2.17. Pemasangan DB-9 antara mikrokontroler dengan


komputer

Mikrokontroler Tx Tx
Rx Rx DSP
Gnd Gnd

Gambar 2.18. Pemasangan DB-9 antara mikrokontroler dengan


DSP TMS320C5402

2.4. LCD GRAFIK


Salah satu alasan mengapa modul LCD (Liquid Crystal Display) makin
banyak dipakai adalah kenyataan bahwa modul LCD relative jauh lebih
sedikit memerlukan daya dari pada modul-modul display berbasis LED.
Berdasarkan tampilannya, LCD dibedakan menjadi beberapa macam
tampilan, seperti character dan graphic.

Pada Tugas Akhir ini penulis memakai modul LCD grafik GM24644.
Modul LCD ini dapat menampilkan grafik ataupun karakter dengan luas
tampilan 240 x 64, dengan tampilan yang disajikan lebih banyak daripada
LCD Oprex, seperti type DMC24227 yang hanya mempunyai 2 baris dan 24
kolom. LCD grafik GM24644 kompatibel dengan DT-51 MinSys dan
disertai rutin-rutin siap pakai, juga dapat diatur contrast ke kiri (display
makin cerah) atau ke kanan (display makin gelap) untuk mendapatkan
tampilan terbaik, yaitu dengan mengatur potensiometer pada modul LCD
Grafik.

2.4.1. Fitur dan Spesifikasi Teknis


Berikut ini adalah Fitur dan Spesifikasi Teknis grafik GM24644 :
1. Luas tampilan 240 x 64 pixel.
2. Memiliki 2 ukuran font (lihat Font Selection).
3. Dilengkapi dengan program ImageViewer untuk preview gambar
*.BMP pada LCD dan mengubah gambar *.BMP menjadi *.ASM.
4. Dilengkapi dengan rutin-rutin siap pakai.
5. Kompatibel penuh dengan DT-51 Minimum System.
23

ImageViewer.EXE, L.EXE, dan L.PIF yang dibutuhkan untuk program


ImageViewer terdapat dalam ImgView.ZIP. Terdapat pula pilihan untuk
memilih nilai font dengan cara mengatur jumper pada modul LCD grafik,
untuk pengamatan lebih jelas kami menggunakan ukuran font 8x8.

1 2 3 1 2 3

(a) (b)

Gambar 2.19. Jumper font pada LCD Grafik


a. Jumper Font 8 x 8 (Default)
b. Jumper Font 6 x 8

2.4.2. Inisialisasi LCD Grafik


Inisialisasi pada LCD grafik berbeda dengan inisialisasi pada LCD
biasa, karena pada LCD grafik mempunyai pengalamatan tersendiri agar
dapat dikenali oleh bahasa pemrograman, dalam proyek akhir ini adalah
program Code Vision AVR. Langkah awal yang harus dilakukan untuk
menginisialisasikan LCD Grafik adalah penulisan header ”#include
<gm24644.h>”, yang tidak kalah penting adalah mengcopy data yang
mempunyai extension .h, yaitu gm24644.h pada folder inc dalam folder
cvavr yang telah di install, juga mengcopy data gm24644.lib pada folder lib
dalam folder cvavr.

Juga diperlukan penginisialisasian yang lain seperti pengisian atau


pengosongan RAM display ataupun inisialisasi bermacam-macam mode
display pada LCD Grafik, berikut ini program untuk inisialisasi berupa
tampilan-tampilan pada LCD Grafik.

LCDG_init();LCDG_RAMBlank(TextHomeAddr,0xF0);LCDG_RA
MBlank(TextAttrAddr,0xF0);LCDG_RAMBlank(Grp1HomeAddr,TotalGrp
Byte);SetAttrMode(TxtAttrIntCGROM);DisplayMode(DispMode|TextOn|Gr
aphicOn);

Modul LCD Grafik GM24644 dirancang untuk dapat digunakan di


dalam sistem rangkaian berbasis mikroprosesor standart bus, yaitu jalur
alamat dan jalur data yang terpisah, dengan lebar 8 bit atau dapat juga 4-bit
(bergantian), sehingga inisialisasinya pun harus disesuaikan dengan
penempatan jalur alamat atau jalur data.
24

Pada gambar 2.20 adalah gambar rangkaian interface LCD grafik


GM24644.

Gambar 2.20. Rangkaian LCD grafik GM24644

2.5. KEYPAD MATRIK 4x4


Keypad termasuk peralatan input, tetapi dibedakan dengan
peralatan-peralatan input yang lain karena fungsinya yang spesifik. Jika
ditinjau dari segi fungsi, adanya peralatan keypad pada suatu sistem
mikrokontroler menunjukkan bahwa program kemudi sistem tersebut
menghendaki suatu masukan data yang bersifat temporer, dapat dilakukan
”upload” pada saat program kemudi dalam keadaan running. Sistem keypad
berlaku sebagai user interface, yang menjembatani kebutuhan data-data
yang bersifat bukan data tetap, dari user/operator ke sistem kontrol untuk
keperluan proses interaksi kontrol/kerja mikrokontroler. Untuk sistem
kontrol portable berbasis mikrokontroler biasanya cukup dilengkapi dengan
keypad heksadesimal saja, meskipun penamaan tombol-tombolnya kadang-
kadang tidak selalu menggunakan karakter ”0” sampai ”F”.

Fungsi dari tombol keypad disini adalah sebagai input untuk


memilih efek, maupun memberi nilai parameter efek yang kemudian
dikirim melalui komunikasi serial. Diperlukan pula scanning keypad untuk
menentukan posisi dari tombol yang ditekan. Setelah posisi keypad yang
aktif dapat ditemukan maka data tersebut diolah menjadi data data tombol
yang ditekan.
25

2.5.1. Prinsip Dasar Scanning Keypad


Teknik paling sederhana yang digunakan dalam perancangan
keypad heksadesimal adalah teknik multiplexing empat buah jalur baris dan
empat jalur kolom. Bila baris dan kolom ini disilangkan maka akan
terbentuk titik-titik potong yang membentuk matriks (4x4).

Asumsikan bahwa rangkaian ini dihubungkan ke mikrokontroler


port A sebanyak 4 bit sebanyak 4 bit (PA3 sampai PA0) dan port B
sebanyak 4 bit juga (PB3 sampai PB0). Rangkaian ni dapat dianalogikan
dengan 4 buah kabel terbuka yang disilangkan dengan 4 kabel terbuka yang
lain (diletakkan diatasnya). Perlakuan ini akan menyebabkan perolehan 16
titik persilangan. Bila pada suatu titik, kabel yang bersilangan itu
disentuhkan (salah satu ditekan sehingga menyentuh kabel yang bersilangan
di bawahnya) maka diasumsikan bahwa tombol keypad pada posisi
bersilangan tersebut ditekan. Peristiwa secara rangkaian adalah sebuah
kabel pada port B (di antara PB3 sampai PB0) telah berhubungan dengan
salah satu kabel dari port A (di antara PA3 sampai PA0).

Permasalahannya adalah bagaimana CPU dapat mengidentifikasi


letak atau posisis tombol yang ditekan itu. Informasi apa yang diperlukan
untuk mengidentifikasi posisi tombol agar itu menjadi jelas dan akurat.
Perhatikan bahwa susunan matrik keyboard itu membentuk koordinat (x,y)
dalam dua dimensi. Dengan pendekatan ini informasi posisi yang
diperlukan adalah informasi tentang nilai x dan y. Dalam pemrograman,
nilai x dan y akan diperoleh melalui ”scanning”. Terdapat dua metode
scanning yang digunakan dalam pemrograman keypad secara umum, yaitu
metoda Polling dan metoda Interrupt Driven.

2.5.1.1. Metode Polling


Metoda yang pertama adalah menggunakan metoda scanning terus-
menerus terhadap keyboard sampai didapat data adanya tombol yang
ditekan. Bila mikrokontroler mengakses program scanning dengan metode
ini, program counter akan terjebak dalam loop scanning terus, sampai ada
tombol ditekan. Metoda ini relatif lebih mudah direalisasikan karena
pemrogramannya lebih mudah dan perangkat keranya lebih sederhana.

2.5.1.2. Metode Interrupt


Dan untuk Metoda Interrupt, yaitu memanfaatkan interrupt sebagai
pemicu adanya tombol ditekan. Cara ini lebih efektif dalam hal
penghematan waktu akses dalam program keseluruhan. Bila tidak atau
belum ada tombol ditekan, meskipun program dalam proses scanning, ia
masih dapat dimanfaatkan untuk mengakses bagian-bagian program yang
lain.
26

Dan untuk aplikasi dalam proyek akhir ini, digunakan metode


polling, yaitu scanning terus-menerus terhadap keyboard sampai didapat
data adanya tombol yang ditekan. Pada gambar 2.21 ditunjukkan gambaran
tombol keypad yang digunakan dalam proyek akhir penulis yamg
digambarkan dalam blok diagram proses scanning keypad.

Kode Scan Kode Output

KOLOM BARIS
K1 K2 K3 K4 B1 B2 B3 B4

1 2 3 COR

4 5 6 MEN

7 8 9

CAN 0 ENT

Gambar 2.21. Blok diagram proses scanning keypad

Keypad yang digunakan dalam aplikasi ini adalah keypad matriks


4x4 (4 baris dan 4 kolom). Berisikan angka 0 sampai 9. dan 6 tombol tyang
tersisa dimanfaatkan untuk CAN, ENTER, SEND, UP, dan DOWN
sedangkan 1tombol lagi tidak dipakai. Untuk mengenali bagian kolom dan
baris yang aktif maka keypad ini dihubungkan dengan minimum sistem
ATmega32.
Kemudian dibuat program yang dapat mengenali tombol yang
ditekan. Program yang dibuat harus mampu mengenali setiap tombol yang
ditekan sesuai perencanaan. Flowchart scanning keypad dengan metode
polling dapat dilihat pada gambar 2.22, sedangkan pada gambar 2.23
ditunjukkan rangkaian schematic keypad dengan matriks 4x4 yang
digunakan dalam program.
27

Gambar 2.22. Flowchart scanning keypad metode polling

Gambar 2.17 Schematic Keypad 4x4

Gambar 2.23. Schematic keypad


28

HALAMAN INI SENGAJA DIKOSONGKAN


29

BAB 3
PERENCANAAN DAN PEMBUATAN ALAT
Pada perencanaan dan pembuatan alat pada proyek akhir kami
yang berjudul "Pemanfaatan Mikrokontroler Sebagai Pengatur Parameter
Pada Efek Gitar Digital" secara umum dapat dibagi menjadi dua bagian
pokok, yaitu pembuatan perangkat keras dan perangkat lunak.
Untuk perencanaan dan pembuatan perangkat keras elektronik
terdiri dari pembuatan rangkaian minimum sistem mikrokontroler
ATmega32 serta pembuatan downloadernya, hubungan mikrokontroler
dengan keypad dan lcd grafik. Sedangkan untuk softwarenya, yaitu
perencanaan dan pembuatan program pengiriman efek tunggal, efek
gabung, tampilan pada LCD grafik, serta pengiriman protokol data.

3.1. Perencanaan Proyek Akhir Keseluruhan

ADC
LCD

RS-232 DSP Flash


ATmega32 TMS320C5402 ROM

KEYPAD DAC SPEAKER

Gambar 3.1. Rancangan proyek akhir secara keseluruhan

Pada proyek akhir ini kami mencoba melakukan pengembangan


dari proyek yang pernah dibuat sebelumnya, yaitu kami akan menambahkan
nilai parameter pada masing-masing efek dapat diubah-ubah, pengabungan
efek dari dua proyek akhir sebelumnya, serta tiap-tiap efek dapat
digabungkan satu sama lainnya, dengan tetap mempertimbangkan realtime
DSP TMS320C5402. Pada gambar 3.1, bagian yang diberi garis putus-putus
adalah proyek akhir penulis, dimana penulis lebih spesifik pada pembuatan
rangkaian yang melibatkan mikrokontroler. Penulis menggunakan
mikrokontroler ATmega32 dengan bahasa pemrograman C yang dibangun
dalam program Code Vision AVR untuk melakukan pengubahan parameter
dan penggabungan efek pada DSP TMS320C5402. Dan untuk melakukan
pengiriman data ke board DSK TMS320C5402 digunakan serial RS-232.
29
30

3.2. Perancangan Perangkat Keras Downloader Mikrokontroler


ATmega32

Gambar 3.2. Rangkaian Downloader ISP Flash

Rangkaian ini digunakan untuk download program ke


Mikrokontroler. Selain itu dengan pemanfaatan IC jenis HCT ini
memungkinkan programmer untuk bekerja secara optimal dan akurat
dengan paralel port, jenis IC yang dipakai adalah IC 74HCT541.
Pemrograman secara In System Programming adalah programmer tidak
perlu melepas IC Mikrokontroler pada waktu akan di-download-kan.

Program yang digunakan untuk download ke mikrokontroler


ATmega32, yaitu menggunakan Code Vision AVR C Compiler. Konektor
DB25 digunakan untuk menghubungkan IC 74HCT541 dengan Port paralel
komputer, sedangkan rangkaian SPI port dihubungkan dengan port-port
yang ada pada minimum sistem mikrokontroler ATmega32, yang terdiri
dari SCK, MISO, MOSI, RST.

3.3. Perancangan Minimum Sistem Mikrokontroler AVR ATmega32


Fungsi dari mikrokontroler disini adalah untuk mengirimkan data
yang digunakan untuk mengubah-ubah efek, parameter, nilai parameter, dan
instruksi untuk menggabungkan efek. Mikrokontroler disini juga digunakan
untuk mengatur fungsi keypad dan menu tampilan pada LCD.

Pada gambar 3.3 menunjukkan bahwa rangkaian port - port yang


dihubungkan dengan rangkaian downloader adalah port B.7 adalah SCK,
port B.6 adalah MISO, port B.5 adalah MOSI, dan pin ke 9 adalah RESET.
Pada rangkaian minimum sistem mikrokontroler ATmega32 terdapat 7805
yang difungsikan sebagai regulator.
31

Gambar 3.3. Rangkaian Minimum Sistem Mikrokontroler

Pada gambar 3.3, antara mikrokontroler dengan IC MAX 232


dihubungkan Port D.1 sebagai Tx ke port nomor 11 dan Port D.0 sebagai
Rx ke port nomor 12 pada IC MAX 232. IC ini berfungsi untuk mengubah
level keluaran tegangan yang keluar dari komputer yaitu level RS232
menjadi level tegangan TTL. Pada rangkaian IC MAX 232 juga digunakan
untuk mengisolasi dan sebagai buffer data pada paralel port.

Pada RS232 level tegangan menjadi level logika ”1” yang


didefinisikan pada - 3V sampai -15V dan logika ”0” didefinisikan +3V
sampai +15V. Pada level TTL yang didefinisikan untuk kondisi ”0”
tegangannya 0 Volt sampai 0,4 Volt dan untuk kondisi ”1” tegangannya 2,4
V sampai 5 V. Pemasangannya dirangkaikan dengan 4 buah kapasitor
sebesar 1µF dengan tegangan catunya sebesar 5 volt 2.

Frekuensi osilator (XTAL) sebagai clock pada minimum sistem


menggunakan frekuensi sebesar 11.0592 MHz, dengan Port B, Port D
sebagai output, Port C sebagai input, serta mengaktifkan USART
transmitter.

2
Pitowarno, Endra. Mikroprosesor dan Interfacing. Penerbit Andi,
Yoyakarta, 2005.
32

Gambar 3.4. Pengaturan minimum sistem mikrokontroler AVR

3.4. Perancangan Minimum Sistem Mikrokontroler Dengan Keypad


dan LCD Grafik

Pada perancangan ini keypad berfungsi sebagai input, yang


berupa input nilai parameter, pengiriman data, dan mengatur tampilan pada
LCD grafik. Kemudian LCD grafik digunakan sebagai kemudahan untuk
tampilan mengakses data dan menunjukkan pada user tentang informasi
data yang diolah. Dibawah ini akan dijelaskan lebih detail mengenai fungsi-
fungsi dari keypad dan LCD Grafik gm24644.

3.4.1. Keypad
Fungsi-fungsi aplikasi dari tiap tombol pada keypad adalah:
■ Tombol ENT berfungsi untuk masuk pada menu program yang
dipilih dan untuk mengirimkan data.
■ Tombol angka 0 sampai 9 berfungsi menampilkan data berupa angka
yang akan dikirim ke DSP TMS320C5402
■ Tombol Up dan Down berfungsi untuk berpindah baris
■ Tombol CAN berfungsi sebagai tombol back
■ Tombol COR berfungsi untuk delete ke kiri untuk mengedit data
■ Tombol MEN tidak dipergunakan
33

Pada gambar 3.5 adalah contoh program keypad beserta inisialisasi


tombol keypad:

unsigned int keypad( )


{ unsigned char i,a;
unsigned int nilai;
for(i=0;i<4;i++) // scanning keypad
{
PORTC=~(1<<i);
a=PINC & 0xF0;
if (a!=0xF0) break;
}
a = a | i;
switch(a) // inisialisasi tombol keypad
{
case 0b11010000: nilai=0; break; // tombol 0
case 0b11100001: nilai=1; break; // tombol 1
case 0b11010001: nilai=2; break; // tombol 2
case 0b10110001: nilai=3; break; // tombol 3
case 0b11100010: nilai=4; break; // tombol 4
case 0b11010010: nilai=5; break; // tombol 5
case 0b10110010: nilai=6; break; // tombol 6
case 0b11100011: nilai=7; break; // tombol 7
case 0b11010011: nilai=8; break; // tombol 8
case 0b10110011: nilai=9; break; // tombol 9
case 0b01110001: nilai=10; break; // tombol COR
case 0b01110010: nilai=11; break; // tombol MEN
case 0b01110011: nilai=12; break; // tombol UP
case 0b01110000: nilai=13; break; // tombol DOWN
case 0b11100000: nilai=14; break; // tombol CAN
case 0b10110000: nilai=15; break; // tombol ENTER
default : nilai=100; break;
}
return(nilai);
}

Gambar 3.5. Program keypad beserta inisialisasi tombol keypad


34

Program pada gambar 3.5 dapat dibagi menjadi dua bagian utama
yaitu program scanning keypad dan inisialisasi tombol keypad. Scanning
keypad digunakan untuk mengecek apakah ada penekanan tombol, jika ada,
maka data yang diperoleh dari scanning dan penekanan tombol akan
disesuaikan dengan pilihan case, jika data dari scanning dan case sama,
maka data tersebut akan ditampung pada variabel nilai.

Dan pada setiap tombol keypad mempunyai variabel nilai sendiri-


sendiri. Kemudian data nilai tersebut oleh fungsi ”return” yang akan
dikembalikan/disimpan pada fungsi keypad( ) yang dapat dipanggil
sewaktu-waktu dengan memasukkan fungsi keypad() pada variabel tertentu.

3.4.2. Tampilan pada LCD Grafik


Dalam proyek akhir ini, kami menggunakan LCD grafik GM24644
yang mempunyai 32 jumlah kolom dan jumlah baris sebanyak 8, dengan
tampilan berupa huruf, angka, maupun karakter yang lainnya. Pada
tampilan LCD grafik sudah tersedia pilihan-pilihan untuk masuk pada
tampilan berikutnya dengan menggunakan tombol keypad. Setiap
penekanan tombol angka 0 sampai 9, hasil penekanan tersebut akan
ditampilkan pada LCD grafik, sedang untuk tombol lainnya bekerja sesuai
dengan fungsi yang telah diberikan.

Pada minimum sistem mikrokontroler terdapat tombol reset yang


berfungsi untuk kembali pada tampilan awal. Tombol reset ini diperlukan
apabila tampilan pada LCD grafik mengalami gangguan, tampilan tidak
sempurna, ataupun terjadi kemacetan pada sistem mikrokontroler.,
.
Berikut ini akan dijelaskan tampilan-tampilan yang ada pada LCD
grafik yang dikontrol oleh keypad :

Tampilan awal
Pilihan efek tunggal atau gabungan efek
• Tampilan menu efek tunggal dengan pilihan 11 efek
• Tampilan menu gabungan efek, dengan pilihan efek:
- Gabungan 2 Efek
- Gabungan 3 Efek
Tampilan fungsi tiap efek tunggal, dengan ketentuan parameter :
• Bernilai konstan
• Dapat diubah-ubah, yang terdiri atas batas minimal dan maksimal
nilai parameter yang dimasukkan.
Tampilan hasil data yang telah dimasukkan
35

Petunjuk-petunjuk pada LCD grafik melalui keypad.


Enter = masuk pada tampilan berikutnya
[“Angka”] = perintah untuk menekan tombol angka, untuk masuk
.........................pada tampilan berikutnya.
Misal, [ 5 ] perintah menekan tombol 5.
Back = kembali ke tampilan sebelumnya
DeL = menghapus ke kiri nilai yang dimasukkan

Berikut ini adalah contoh listing program untuk menampilkan karakter


pada LCD Grafik GM24644 :
LCD_TxtF(kolom,baris,"karakter");
Misal :
LCD_TxtF(20,4,"Efek Gitar Digital");

3.5. Perancangan Pengiriman Protokol Serial


Pemrograman pada Mikrokontroler harus mampu mengolah data
masukkan yang selanjutnya dikirim ke board DSK TMS320C5402 untuk
memberikan instruksi data. Berikut macam-macam metode protokol
pengiriman data melalui komunikasi serial.
Pada pengiriman data efek tunggal lebih menekankan pada
bagaimana cara agar nilai parameter dapat diubah-ubah melalui pengiriman
data serial, sedangkan pada efek gabung adalah memberikan data yang
mewakili untuk penggabungan efek yang ditentukan pada DSP
TMS320C5402. Batasan nilai parameter terbesar yang harus diubah adalah
32767 atau dalam range nilai 2 byte, maka muncul permasalahan bagaimana
pengiriman data serial dapat mencapai nilai 2 byte, padahal maksimal
pengiriman data pada komunikasi serial adalah 1 byte. Metode pengiriman
protokol serial yang digunakan untuk pengiriman data adalah dengan cara
pengiriman data sebanyak lima kali, yang berturut-turut pemberian nilai
pada start, alamat efek, nilai parameter yang terdiri dari data 1 byte dan data
2 byte, kemudian alamat parameter. Detail Instruksi nya sebagai berikut :

a. Instruksi Start
Pertama pengiriman protokol data berupa instruksi start, dimana
instruksi ini kami tetapkan mengirimkan data yang bernilai nol ”0”.
Nilai ini akan direspon oleh DSP TMS320C5402 yang telah
menyiapkan program interrupt untuk menerima instruksi start ini.
Fungsi pemberian dari instruksi start adalah digunakan untuk
memberikan isyarat pada DSP TMS320C5402 bahwa setelah
pemberian instruksi ini akan ada kiriman-kiriman berikutnya. Hal ini
diperlukan untuk mencegah ketidaksiapan DSP TMS320C5402
untuk menerima data, sehingga terjadi kecacatan data.
36

b. Instruksi Alamat Efek


Terdapat 11 alamat efek yang tersedia pada proyek akhir ini.
Ketiga belas alamat efek tersebut masing-masing mempunyai nilai
alamat yang berbeda-beda. Misal alamat efek Fuzz = 1, alamat efek
overdrive = 2 dst. Sehingga untuk menuju alamat efek yang akan
dihubungi harus disesuaikan dengan nilai alamat efek yang telah
ditentukan.

c. Instruksi nilai parameter


Instruksi nilai parameter dibedakan menjadi dua, yaitu
pengiriman protokol data 1 byte dan pengiriman protokol data 2 byte.
Letak perbedaan pada 2 protokol data ini adalah terdapat pada perintah
pengiriman data ”putchar()” yang ketiga dan kempat. Lebih detailnya
sebagai berikut.

• Pengiriman data 1 byte


Pengiriman protokol data yang ketiga adalah pengiriman
data 1 byte, yang kiriman datanya berupa data bertipe karakter,
yaitu karakter ’z’, dalam ASCII mempunyai nilai 122. Pemberian
karakter ini dimadsudkan untuk memberikan nilai pada variabel
digitX pada program interrupt DSP TMS320C5402.
Kemudian dilanjutkan pengiriman protokol data ke empat.
Data yang dikirim adalah bilangan 1 byte, dalam desimal 0 s/d
255. Nilai data yang akan dikirim di ’AND’kan dengan 0xFF
untuk memastikan bahwa data yang dikirim adalah dua digit
terakhir dari LSB.

• Pengiriman data 2 byte


Untuk pengiriman protokol data yang ketiga, data yang
dikirimkan adalah bilangan 1 byte. Kemudian dilanjutkan protokol
data keempat yang terdapat perintah pergeseran bit menuju LSB.
Pergeseran bit ini digunakan untuk mengambil dua digit, digit
ketiga dan keempat bilangan hexa desimal dari LSB. Setelah
digeser menuju LSB, kemudian data dikirim.

d. Instruksi alamat parameter


Terakhir sebagai protokol data kelima adalah pengiriman
alamat parameter yang mempunyai nilai tertentu, yang dikirimkan
untuk mengubah parameter efek pada DSP TMS320C5402.
Penempatan alamat parameter sebagai protokol data terakhir
disesuaikan dengan program counter pada DSP TMS320C5402 yang
memasukkan nilai parameter dahulu dilanjutkan alamat efek.
37

3.6. Perancangan Software Mikrokontroler ATmega32


Dalam perancangan ini akan dijelaskan bagaimana alur program
dapat berjalan secara keseluruhan. Pada menu tampilan awal terdapat judul
proyek akhir, jika ditekan enter terdapat dua pilihan efek, yaitu efek tunggal
dan gabungan efek.

3.6.1. Perancangan Efek Tunggal


Pada tampilan awal pada efek tunggal, terdapat 11 pilihan efek yang
tersedia. Untuk memilih efek dengan cara memasukkan angka sesuai pilihan
yang tersedia. Pada tampilan ini nilai yang dimasukkan dapat di edit
menggunakan tombol COR pada keypad. Pada tabel 3.1 ditunjukkan
perancangan efek tunggal pada efek gitar digital.

Tabel 3.1 Perancangan efek tunggal


Nama Efek Parameter Nilai parameter
Fuzz Limit 0-22937
Overdrive_E 0-32767
Overdrive
Overdrive_F 0-32767
Distorsi_A 0-32767
Distorsi Distorsi_B 0-32767
Distorsi_Gain 0-5
Attenuator 0-100
Echo
Feedback 0-9
Amplitudo 0-5
Tremolo Frekwensi 0-150
Modulasi 0-10
Compressor - 32767
Robot - 0.9
Valve_P 0-32767
Valve
Valve_Q 0-16383
Variabel 0-6
Modulasi
frekuensi 0-60
Attenuator 0-9
Chorus
Buffer 0-480
Attenuator 0-9
Flanger
Buffer 0-160
38

Pada efek tunggal terdapat 11 efek yang tersedia dan 19 alamat


parameter pada efek yang telah ditentukan. Masing-masing efek dan
parameter mempunyai alamat yang telah ditetapkan, sedangkan untuk nilai
parameter, terdapat efek yang nilai parameternya dapat diubah-ubah dengan
pemberian batas minimal dan batas maksimal dari masukkan data yang
diberikan. Pada efek tunggal juga terdapat efek yang nilai parameternya
tetap, tidak dapat diubah-ubah seperti efek lainnya, sehingga user hanya
tinggal memilih efek tersebut untuk dikirim.

• Pemilihan efek dan parameter


Pada gambar 3.6 adalah contoh program untuk pemilihan efek.

while(1)
{
pad=keypad();
if(pad==1)
{ for(i=0; i<=2; i++){
LCD_TxtF(1,5," "); delay_ms(150);
LCD_TxtF(1,5,"[1]Variable =_____(0-6)");
delay_ms(150);}
Variable=30; =1; y=5; break;
}
else if(pad==2)
{ for(i=0; i<=2; i++){
LCD_TxtF(1,6," "); delay_ms(150);
LCD_TxtF(1,6,"[2]Frekwensi =_____(0-60)");
delay_ms(150);}
Frekwensi=31; yy=1; y=6; break;
}
}

Gambar 3.6. Program pemilihan efek

Pemilihan efek dilakukan dengan cara penekanan tombol angka pada


keypad. Pada contoh diatas penekanan tombol dapat diketahui oleh program
pada variabel pad yang memperoleh nilai dari fungsi keypad(). Kemudian
nilai pad tersebut dibandingkan dengan nilai 1 yang mewakili tombol [1].
Pada saat penekanan tombol sekaligus memberikan nilai pada alamat
parameter.
39

• Memasukkan nilai parameter


Pada gambar 3.7 adalah contoh program untuk memasukkan nilai
parameter.

if( (xx==1) || (yy==1) )


{
while(1)
{
pad=keypad();
if( ((pad>=0) && (pad<=9) && (hop==1) &&
(yy==1|xx==1)) )
{
if ( ((x_ketik-15)<ketik_max) )
{
if(xx==1)
{ aa=1; bb=2;
bil=(bil*10)+pad;
if(bil>6)
{stop=1; LCD_TxtF(20,5,"(>>6)");}
}
else if(yy==1)
{ aa=1; bb=2;
bil=(bil*10)+pad;
LCD_TxtF(23,8,"Y_digit3");
if(bil>255&&bil<=16383)
{bb=1;aa=2; LCD_TxtF(23,8,"Y_digit5");}
else if(bil>16383)
{stop=1; LCD_TxtF(20,6,"(>>16383)");}
}

duo[0]=pad+0x30;
LCD_Txt(x_ketik,y,duo);
x_ketik++;
delay_ms(300);
}
}
}

Gambar 3.7. Program memasukkan nilai parameter.


40

Pada program 3.7 nilai xx dan yy menunjukkan pada baris mana


user memilih data, yang selanjutnya digunakan untuk menentukan apakah
bilangan yang dimasukkan dalam range 1 byte atau 2 byte. Untuk perintah
if ( (x_ketik-15)<(ketik_max) ) menunjukkan batasan maksimal angka yang
diproses. Nilai yang dimasukkan disimpan dalam variabel bil. Serta
LCD_TxtF(“") digunakan untuk menampilkan ke LCD grafik.

• Pengiriman data
Pada gambar 3.8 adalah contoh program untuk mengirimkan data,
dengan pengiriman data sebanyak lima kali.

else if( (pad==15)&& (xx==1||yy==1) && (aa==1||bb==1) )


{
putchar(start); delay_ms(200);
putchar(valve); delay_ms(200);

if(xx==1&&aa==1) // E-3 digit


{
putchar('z'); delay_ms(500);//122 // digitX
putchar(bil & 0xFF); delay_ms(200);
putchar(P); delay_ms(200);
LCD_TxtF(19,3,"1");
}

Gambar 3.8. Program pengiriman data.


Pada dasarnya perintah untuk mengirimkan data adalah
menggunakan perintah putchar(). Pada gambar 3.8, perencanaan yang kami
buat untuk pengiriman data yang bernilai 1 byte pada efek tunggal, yang
berturut-turut adalah pengiriman data berupa start, alamat efek, karakter ’z’,
nilai parameter, dan alamat parameter.

3.6.2. Perancangan Efek Gabung


Penggabungan efek pada pengujian ini berdasarkan pada batasan
realtime yang ternyata berbeda-beda pada setiap efek, jika hasil
gabungannya realtime yaitu antara 0 s/d 62.5 µs, maka kami ambil
gabungan efek tersebut, dan jika lebih besar dari 62,5 µs tidak kami
sertakan dalam pengujian, sehingga tidak semua efek kami gabungkan dan
nilai parameternya kami tetapkan. Juga mempertimbangkan hasil suara efek
yang dihasilkan dari penggabungan efek tersebut, serta mempertimbangkan
panggabungan efek yang umum dipakai.
41

Berdasarkan standart penggabungan efek diatas, kami mengambil


maksimal efek yang dapat digabung adalah 3 gabungan efek. Selanjutnya
akan kami bahas mengenai penggabungan 2 efek dan penggabungan 3 efek.
Serta efek -efek apa saja yang bisa digabung dalam perencanaan ini.

3.6.2.1. Penggabungan 2 efek


Macam-macam pilihan untuk penggabungan 2 efek, yaitu terdapat
efek 1 dan efek 2 yang digabung, dapat dilihat pada tabel 3.2 :

Tabel 3.2 . Pilihan gabungan 2 efek yang dapat digabung


No. EFEK 1 EFEK 2
1 Flanger Echo
2 Chorus Robot
3 Robot Echo
4 Flanger Valve
5 Compressor Robot
6 Compressor Valve

Dapat dilihat pada table 3.2 terdapat enam panggabungan efek


yang telah ditetapkan. Masing – masing efek mempunyai karakter suara
tersendiri, yang apabila pilihan efek tersebut digabungkan akan
menghasilkan karakter suara baru.

3.6.2.2. Penggabungan 3 efek


Macam-macam pilihan untuk penggabungan 3 efek, yaitu terdapat
efek 1, efek 2, dan efek 3, dapat dilihat pada tabel 3.3 :

Tabel 3.3 . Pilihan gabungan 3 efek yang dapat digabung


No. EFEK 1 EFEK 2 EFEK 3
1 Tremolo Echo Flanger
2 Echo Compressor Robot
3 Compressor Valve Echo

Pada table 3.3 dapat dilihat bahwa terdapat tiga panggabungan efek
yang telah ditetapkan. Masing – masing efek mempunyai karakter suara
tersendiri, yang apabila pilihan efek tersebut digabungkan akan
menghasilkan karakter suara baru. Penggabungan efek ini berdasarkan
waktu eksekusi real time yang dikerjakan oleh DSP TMS320C5402.
42

HALAMAN INI SENGAJA DIKOSONGKAN


43

BAB 4
PENGUJIAN DAN ANALISA
Dalam Bab ini akan dibahas tentang pengujian berdasarkan
perencanaan dari sistem yang dibuat. Pengujian ini dilaksanakan untuk
mengetahui kehandalan dari suatu sistem yang dibuat. Pengujian ini
dilaksanakan untuk mengetahui apakah sudah sesuai dengan perencanaan
yang dibuat. Pengujian pertama-tama dilakukan secara terpisah, dan
kemudian dilakukan kedalam sistem yang telah terintegrasi.

4.1. Pengujian Minimum Sistem dan Port ATmega32


Tujuan dari pengujian ini adalah untuk mengetahui apakah
rangkaian mikrokontroler dapat bekerja dengan baik sekaligus untuk
menguji apakah keluaran dari mikrokontroler sesuai dengan input program
yang telah diberikan.
Untuk melakukan pengujian serta analisa dibutuhkan beberapa
peralatan meliputi downloader minimum sistem, minimum sistem
mikrokontroler ATmega32, rangkaian led pada PORT A yang digunakan
sebagai sampel untuk melihat nyala LED, DC power suply + 5 volt, dan
program Code Vision AVR.

PC Minimum Sistem LED PORT


Downloader
Mikrokontroler

Gambar 4.1. Diagram blok dari rangkaian pengujian mikrokontroler

Pada gambar 4.1 ditunjukkan blok diagram untuk melakukan


pengujian. Program yang telah dibuat dari PC (personal komputer) akan
didownload ke minimum sistem pada mikrokontroler ATmega32, dan
hasilnya sebagai bahan analisa dilihat pada LED pada port A.

while (1)
{
PORTA = 0xFF; delay_ms(1000);
PORTA = 0x00; delay_ms(1000);
};
}

Gambar 4.2. Program pengujian minimum sistem dan port ATmega32

43
44

Berdasarkan program pada gambar 4.2, dapat dilihat bahwa


tampilan nyala LED pada port A akan menyala selama satu detik, dan
kemudian LED akan mati selama satu detik yang sama, satu detik
kemudian kembali lagi port A menyala kemudian mati, begitu seterusnya.
Dengan cara tersebut dapat diketahui bahwa minimum sistem dapat
bekerja dengan baik dan port tiap mikrokontroler dapat mengeluarkan
output sesuai perintah program. Untuk port yang lain di uji dengan cara
yang sama.

4.2. Pengujian Hubungan Minimum Sistem Dengan PC secara Serial


Pada komunikasi serial menggunakan IC RS232, pengujian
dilakukan untuk mengetahui apakah data yang dikirim pada komputer
sesuai dengan input yang diberikan oleh mikrokontroler. Peralatan untuk
melakukan pengujian adalah PC dengan fasilitas hyperterminal, minimum
sistem mikrokontroler, dan kabel serial RS232. Untuk port setting
hyperterminal dapat dilihat pada gambar 4.3 dan hasil dari komunikasi
serial RS232 pada hyperterminal dapat dilihat pada gambar 4.4.

Gambar 4.3. Port Settings Hyperterminal

Perintah yang digunakan untuk menampilkan angka adalah putsf().


Ketika perintah putsf() berisi angka 0-9 kemudian download, maka pada
hyperterminal muncul angka seperti gambar 4.4. Dari hasil pengamatan
tersebut diketahui bahwa data yang dikirim dapat diterima sepenuhnya
oleh PC melalui hyperterminal.
45

Gambar 4.4. Pengujian Komunikasi Serial pada Hyper Terminal

4.3. Pengujian Rangkaian Antara Keypad dengan LCD Grafik dan


Minimum Sistem

Pengujian Rangkaian antara Keypad dengan LCD grafik dan Minimum


Sistem bertujuan untuk mengetahui apakah hubungan rangkaian antara
Mikrokontroler, LCD grafik, dengan keypad dapat bekerja dengan baik.
Untuk mendukung pengujian ini diperlukan diperlukan peralatan antara
lain minimum sistem mikrokontroler ATmega32, LCD Grafik GM24644,
keypad 4x4, DC power suply +5 volt. Dengan program telah di download
pada mikrokontroler.

Minimum Sistem
KEYPAD LCD Grafik
Mikrokontroler

Gambar 4.5. Diagram blok pengujian mikrokontroler , LCD, dan Keypad

Langkah – langkah yang dilakukan untuk melakukan pengujian ini


agar dapat berjalan dengan baik, antara lain dengan mempersiapkan
peralatan dan membuat prosedur pengujian, yaitu :

1. Memasang rangkaian seperti yang ditunjukkan pada gambar 4.5.


2. Mengetik program pengujian
3. Mendownload program pada minimum sistem
4. Memasukkan data melalui keypad dan Pengiriman data
5. Melihat hasil pengujian pada LCD grafik
46

while(1)
{
pad=keypad();
if (pad == 0) LCD_TxtF( 1,1, "0");
else if (pad == 1) LCD_TxtF( 3,2, "1");
else if (pad == 2) LCD_TxtF( 5,3, "2");
else if (pad == 3) LCD_TxtF( 7,4, "3");
else if (pad == 4) LCD_TxtF( 9,5, "4");
else if (pad == 5) LCD_TxtF(11,6, "5");
else if (pad == 6) LCD_TxtF(13,7, "6");
else if (pad == 7) LCD_TxtF(15,8, "7");
else if (pad == 8) LCD_TxtF( 5,5, "8");
else if (pad == 9) LCD_TxtF( 7,6, "9");
}

Gambar 4.6 . Program Pengujian Rangkaian antara Keypad dengan LCD


.grafik dan Minimum Sistem

Gambar 4.7. Hasil pengujian rangkaian keypad, minimum sistem,


dan LCD grafik

Pada gambar 4.6 dapat dilihat bahwa nilai dari fungsi keypad( )
disimpan dalam variabel pad. Kemudian nilai pad tersebut dibandingkan
dengan nilai pada perintah ”if / else if”, jika sama akan tampilkan pada LCD
grafik. Pada gambar 4.7 menunjukkan tampilan LCD grafik dari hasil
penekanan tombol keypad. Sehingga pengujian fungsi keypad sebagai input,
LCD grafik sebagai output, dan minimum sistem sebagai pemroses data
semuanya dapat bekerja dengan baik.
47

4.4. Pengujian Pengubahan Nilai Parameter Secara Serial dari


Mikrokontroler ke DSP TMS320C5402 Sebanyak 2 byte.

Telah diketahui bahwa komunikasi serial RS-232 hanya mengijinkan


pengiriman data sebanyak 1 byte. Pada pengujian ini akan dicoba untuk
mengirimkan data sejumlah 2 byte dan untuk mengetahui apakah
pengiriman data dari mikrokontroler dapat mengubah-ubah nilai parameter
sampai 2 byte pada DSP TMS320C5402.

Peralatan yang digunakan antara lain, minimum sistem mikrokontroler


ATmega32, keypad 4x4, kabel serial RS-232, Board DSK TMS320C5402,
Code Composer Studio DSK Tools 2 ( software ), personal komputer ( PC )
dan DC power suply + 5 volt, gitar listrik sebagai input, dan sound untuk
melihat output suara. Gambaran pengujian keseluruhan dapat dilihat pada
blok diagram pada gambar 4.8.

LCD Grafik Gitar listrik

RS-232
Mikrokontroler DSP TMS320C5402 PC

Keypad

Gambar 4.8. Blok diagram pengujian Pengubahan Nilai Parameter


Secara Serial dari Mikrokontroler ke DSP TMS320C5402
Sebanyak 2 byte.

Pada gambar 4.9 adalah program yang dicoba untuk melakukan


pengujian pengubahan nilai parameter dari data yang bernilai 1 byte sampai
data 2 byte. Pengubahan ini dilakukan secara langsung ketika user
memasukan nilai desimal melebihi bilangan 255.

Agar nilai input dari keypad dapat dibaca sebagai bilangan bulat
keseluruhan, maka digunakan rumus ”bil=(bil*10)+pad”, dengan pad adalah
input keypad. Nilai yang dimasukkan melalui keypad akan dijadikan
bil_awal (bil paling kiri) dan jika ada penekanan tombol keypad sekali lagi,
nilai bil_awal akan dikalikan 10 kemudian ditambahkan dengan nilai pad
yang baru, sehingga menghasilkan bil_awal kedua sebanyak dua digit
sebagai satu bilangan bulat.
48
while(1)
{
pad=keypad();
if( ((pad>=0) && (pad<=9)) )
{
if ( ((x_ketik-10)<ketik_max) )
{
aa=1; bb=2;
bil=(bil*10)+pad;
LCD_TxtF(23,8,"digit3");
if(bil>255 && bil<=65535)
{bb=1; aa=2; }
else if(bil>65535)
{stop=1;}
str[0]=pad+0x30;
LCD_Txt(x_ketik,y,str);

x_ketik++;
delay_ms(300);
}
}
else if( ((pad==15) && (aa==1||bb==1) ) )
{
putchar(start); delay_ms(300);
putchar(efek); delay_ms(300);
if(aa==1)
{
putchar('z'); delay_ms(200);
putchar(bil & 0xFF);
delay_ms(200);
putchar(parameter); delay_ms(200);
}
else if(bb==1)
{
putchar(bil & 0xFF);
delay_ms(300);
putchar(bil >> 8); delay_ms(300);
putchar(parameter); delay_ms(300);
}
}
}

Gambar 4.9. Program Pengujian Pengubahan Parameter


49

(a) (b)

Gambar 4.10. Hasil Pengujian Pengubahan Nilai Parameter


a. Nilai Parameter 1 byte
b. Nilai Parameter 2 byte

Diketahui bahwa data maksimal yang bisa dikirim oleh komunikasi


serial adalah 0 s/d 255 atau 1 byte. Padahal nilai parameter maksimal yang
harus dikirim pada pengujian ini mencapai 32767 atau sebanyak 2 byte.
Untuk mengatasi keterbatasan tersebut, pengiriman nilai parameter
dilakukan dua kali, pertama pada byte LSB kemudian pengiriman byte
MSB yang digeser ke kanan sebanyak 8 bit.

Pada pengiriman protokol secara keseluruhan, dilakukan 5 kali


pengiriman data. Untuk nilai parameter 2 byte pengirimannya berturut-turut
start, efek, nilai parameter 1 byte LSB, nilai parameter 1byte MSB yang
telah digeser 8 bit ke LSB, kemudian parameter.

Pada gambar 4.10 menunjukkan hasil pengujian pengubahan nilai


parameter, dengan efek dan parameter sama, sedang untuk nilai parameter
mempunyai nilai yang berbeda-beda (a). Untuk Nilai Parameter 1 byte
yang bernilai 77 ( b). Nilai Parameter 2 byte bernilai 22937. Serta tabel 4.1
menunjukkan hasil pengujian efek tunggal pada keseluruhan efek. Hal ini
menunjukkan bahwa percobaan untuk pengubahan nilai parameter dari 1
byte sampai 2 byte dapat dilakukan sesuai dengan perencanaan yang dibuat.
50

Tabel 4.1. Hasil pengujian pengubahan nilai parameter


pada efek tunggal
Nama Efek Parameter Status
Fuzz Limit Terkirim-Berubah
Overdrive_E Terkirim-Berubah
Overdrive
Overdrive_F Terkirim-Berubah
Distorsi_A Terkirim-Berubah
Distorsi Distorsi_B Terkirim-Berubah
Distorsi_Gain Terkirim-Berubah
Attenuator Terkirim-Berubah
Echo
Feedback Terkirim-Berubah
Amplitudo Terkirim-Berubah
Tremolo Frekwensi Terkirim-Berubah
Modulasi Terkirim-Berubah
Compressor - Terkirim-Tetap
Robot - Terkirim-Tetap
Valve_P Terkirim-Berubah
Valve
Valve_Q Terkirim-Berubah
Variabel Terkirim-Berubah
Modulasi
frekuensi Terkirim-Berubah
Attenuator Terkirim-Berubah
Chorus
Buffer Terkirim-Berubah
Attenuator Terkirim-Berubah
Flanger
Buffer Terkirim-Berubah

4.5. Pengujian Gabungan Efek


Ditunjukkan pada standart penggabungan efek, bahwa tidak semua efek
dapat digabung karena pada DSP TMS320C5402 beberapa dari
penjumlahan waktu eksekusi program efek ada yang melebihi waktu real
time 62,5 µs, sehingga terdapat data yang hilang. Efek yang diuji sesuai
dengan daftar gabungan efek pada bab perencanaan. Pengujian ini bertujuan
untuk mengetahui apakah mikrokontroler dapat mengirimkan data untuk
menggabungkan efek pada DSP TMS320C5402.
51

Peralatan yang dibutuhkan untuk mendukung pengujian ini meliputi


minimum sistem mikrokontroler ATmega32, keypad 4x4, kabel serial RS
232, Board DSK TMS320C5402, Code Composer Studio DSK Tools 2,
Personal Komputer ( PC ), DC power suply + 5 volt

RS-232
Mikrokontroler DSP TMS320C5402 PC

LED DSK
Keypad LCD Grafik

Gambar 4.11. Blok diagram Pengujian Pengubahan Parameter oleh


Mikrokontroler ATmega32 pada DSP TMS320C5402

4.5.1. Pengujian Penggabungan 2 Efek


Hasil pengujian penggabungan 2 efek gitar dapat dilihat pada
tabel 4.1, yang terdiri atas efek 1 dan efek 2.

Tabel 4.2. Hasil pengujian gabungan 2 efek


No. Efek 1 Efek 2 Status
1 Flanger Echo Terkirim
2 Chorus Robot Terkirim
3 Robot Echo Terkirim
4 Flanger Valve Terkirim
5 Compressor Robot Terkirim
6 Compressor Valve Terkirim

Pada tabel hasil percobaan diatas, dapat dilihat bahwa pengiriman data
untuk penggabungan 2 efek dapat dilakukan dengan sempurna, ditunjukkan
pada kolom status terkirim. Dan format protokol untuk pengiriman datanya,
sama dengan cara pengiriman data pada efek tunggal, pembedanya adalah
pengiriman data cukup dilakukan dalam 1 byte, pengirimannya secara
berturut-turut yaitu start, dan efek yang digabung.
52

4.5.2. Pengujian Penggabungan 3 Efek


Hasil pengujian penggabungan 3 efek gitar, yaitu efek 1, efek 2,
efek 3, dapat dilihat pada tabel 4.1 :

Tabel 4.3. Hasil pengujian gabungan 3 efek


No. Efek 1 Efek 2 Efek 3 Status
1 Tremolo Echo Flanger Terkirim
2 Echo Compressor Robot Terkirim
3 Compressor Valve Echo Terkirim

Untuk penggabungan 3 efek, pengiriman datanya hampir sama dengan


pengiriman data pada gabungan 2 efek. Tabel diatas menunjukkan status
pengiriman data, dapat dilihat seluruh pengiriman data untuk penggabungan
efek berhasil dikirim. Dan format protokol untuk pengiriman penggabungan
3 efek secara berturut-turut, yaitu start, efek yang digabung. Setiap
pengiriman diselingi delay untuk menunggu pangiriman sebelumnya telah
diterima board DSK TMS320C5402.
53

BAB V
PENUTUP

Dalam proses pengerjaan tugas akhir, mulai dari perencanaan,


pembuatan alat serta dilakukan pengujian dan analisa, maka dapat diambil
kesimpulan dan saran- saran sebagai berikut :

5.1. KESIMPULAN
Dari beberapa tahap perencanaan dan pengujian data dapat diambil
beberapa kesimpulan yaitu :

1. Komunikasi yang berupa pengiriman data antara mikrokontroler


ATmega32 dengan DSP TMS320C5402 dapat dilakukan menggunakan
protokol serial RS-232 dengan menyesuaikan port pada DSK
TMS320C5402.
2. Waktu tunggu yang proporsional antara pengiriman data satu dengan
pengiriman data selanjutnya adalah 300 ms.
3. Pengubahan nilai parameter dapat dilakukan sampai 2 byte pengiriman
data, dengan cara dilakukan lima kali pengiriman data.
4. Untuk memberikan nilai dari bilangan satuan sampai dengan bilangan
puluhan ribu digunakan rumus ”bil=(bil*10)+pad”, pad adalah
penekanan tombol dari keypad.
5. Pada tampilan LCD grafik diperlukan pengcopy-an file ber-extension
.lib pada folder lib dan .h pada folder inc dari cvavr. Dan perintah
untuk menampilkan ke layar adalah LCD_TxtF( kolom,baris, " ").

5.2. SARAN
Pada pembuatan proyek akhir ini masih banyak kekurangannya,
maka pada waktu yang akan datang perlu dilakukan pengembangan lebih
lanjut untuk hasil yang lebih baik. Adapun saran-saran untuk proyek akhir
ini adalah:

1. Pada proyek akhir berikutnya hendaknya pada penggabungan efek,


nilai parameternya juga dapat diubah-ubah seperti pada efek
tunggal.
2. Selain dapat mengubah-ubah nilai parameter melalui keypad,
rangkaian juga dapat di setting agar nilai parameternya dapat
diubah-ubah menggunakan ADC.

53
54

HALAMAN INI SENGAJA DIKOSONGKAN


55

DAFTAR PUSTAKA
[1]. Http://www.atmel.com/dyn/resources/prod_ documents/pdf

[2]. Pitowarno, Endra. Mikroprosesor dan Interfacing. Penerbit Andi,


Yoyakarta, 2005.

[3]. Http://digilib.itb.ac.id/go.php?id=itb-s2-ik-1999-Agus-posis.

[4]. Rizqi Firmansyah, Robot Pengelasan (Hardware). Tugas Akhir


PENS-ITS, 2003.

[5]. Budiharto Widodo,S.Si,M.Kom, Interfacing Komputer dan


Mikrokontroler, Elex Media Komputindo, Jakarta, 2004.

[6]. Code Vision AVR, help.


LAMPIRAN

/*********************************************
This program was produced by the
CodeWizardAVR V1.24.0 Standard
Automatic Program Generator
© Copyright 1998-2003 HP InfoTech s.r.l.
http://www.hpinfotech.ro
e-mail:office@hpinfotech.ro

Project :
Version :
Date : 7/28/2007
Author : bag's.dat
Company :
Comments:

Chip type : ATmega32


Program type : Application
Clock frequency : 11.059200 MHz
Memory model :-
External SRAM size : 0
Data Stack size : 512
*********************************************/

#include <mega32.h>
#include <delay.h>
#include <gm24644.h>
#include <stdio.h>
#define ketik_tunggal 2
#define ketik_max 5
//*********************** ======== INI SIAL ========
**************************
unsigned char
a1=0,a4=0,a3=0,a5=0,a6=0,a2=0,a7=0,a8=0,b,/*x_ketik=7,y=7*/;
unsigned int keypad();
unsigned int stop,aa,bb,jus,buah,back,hop,pad; //
unsigned int start=0,xx=0,yy=0,zz=0,i=0,bil=0;
unsigned char str[4];
//unsigned int digitX, digit3, digit5;
//unsigned char
Decho,Dfuzz,Dreverb,Doverdrive,Ddistorsi,Drobot,Dtremolo;
//unsigned char
Dcompressor,Dslapback,Dflanger,Dvalve,Dmodulasi,Dchorus;

unsigned int
fuzz=1,overdrive=2,distorsi=3,echo=4,tremolo=5,compressor=6;
unsigned int robot=7,valve=8,modulasi=9,chorus=10,flanger=11,posisi=0;

unsigned int
limit=21,multiple_E=25,multiple_F=26,distorsi_A=22,distorsi_B=23,gain=
24,attenuator_4=34;
unsigned int
feedback=35,amplitudo=27,frekwensi_5=28,modulasi_5=29,multiple_P=32
,multiple_Q=33;
unsigned int
variable=30,frekwensi_9=31,buffer10=36,attenuator10=37,buffer11=38,atte
nuator11=39;

void daftar_keypad();
void hapus_layar();
void kirim ();
void efek_tunggal();
void efek_gabung();
void efek_2gabung();
void efek_3gabung();

void efek_tersedia();
void efek_tunggal_distorsi();
void efek_tunggal_overdrive();

void efek_tunggal_flanger();
void efek_tunggal_overdrive();
void efek_tunggal_fuzz();
void efek_tunggal_compressor();
void efek_tunggal_robot();
void efek_tunggal_echo();
void efek_tunggal_chorus();
void efek_tunggal_valve();
void efek_tunggal_modulasi();
void efek_tunggal_tremolo();
void efek_tunggal_distorsi();
#define RXB8 1
#define TXB8 0
#define UPE 2
#define OVR 3
#define FE 4
#define UDRE 5
#define RXC 7

#define FRAMING_ERROR (1<<FE)


#define PARITY_ERROR (1<<UPE)
#define DATA_OVERRUN (1<<OVR)
#define DATA_REGISTER_EMPTY (1<<UDRE)
#define RX_COMPLETE (1<<RXC)

// USART Transmitter buffer


#define TX_BUFFER_SIZE 8
char tx_buffer[TX_BUFFER_SIZE];
unsigned char tx_wr_index,tx_rd_index,tx_counter;

// USART Transmitter interrupt service routine


#pragma savereg-
interrupt [USART_TXC] void usart_tx_isr(void)
{
#asm
push r26
push r27
push r30
push r31
in r26,sreg
push r26
#endasm
if (tx_counter)
{
--tx_counter;
UDR=tx_buffer[tx_rd_index];
if (++tx_rd_index == TX_BUFFER_SIZE) tx_rd_index=0;
};
#asm
pop r26
out sreg,r26
pop r31
pop r30
pop r27
pop r26
#endasm
}
#pragma savereg+

#ifndef _DEBUG_TERMINAL_IO_
// Write a character to the USART Transmitter buffer
#define _ALTERNATE_PUTCHAR_
#pragma used+
void putchar(char c)
{
while (tx_counter == TX_BUFFER_SIZE);
#asm("cli")
if (tx_counter || ((UCSRA & DATA_REGISTER_EMPTY)==0))
{
tx_buffer[tx_wr_index]=c;
if (++tx_wr_index == TX_BUFFER_SIZE) tx_wr_index=0;
++tx_counter;
}
else
UDR=c;
#asm("sei")
}
#pragma used-
#endif

void main(void)
{
// Declare your local variables here

// Input/Output Ports initialization


// Port A initialization
// Func0=In Func1=In Func2=In Func3=In Func4=In Func5=In Func6=In
Func7=In
// State0=T State1=T State2=T State3=T State4=T State5=T State6=T
State7=T
PORTA=0x00;
DDRA=0x00;

// Port B initialization
// Func0=Out Func1=Out Func2=Out Func3=Out Func4=Out Func5=Out
Func6=Out Func7=Out
// State0=0 State1=0 State2=0 State3=0 State4=0 State5=0 State6=0
State7=0
PORTB=0x00;
DDRB=0xFF;

// Port C initialization
// Func0=In Func1=In Func2=In Func3=In Func4=In Func5=In Func6=In
Func7=In
// State0=P State1=P State2=P State3=P State4=P State5=P State6=P
State7=P
PORTC=0xFF;
DDRC=0x00;

// Port D initialization
// Func0=Out Func1=Out Func2=Out Func3=Out Func4=Out Func5=Out
Func6=Out Func7=Out
// State0=0 State1=0 State2=0 State3=0 State4=0 State5=0 State6=0
State7=0
PORTD=0x00;
DDRD=0xFF;

// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: Timer 0 Stopped
// Mode: Normal top=FFh
// OC0 output: Disconnected
TCCR0=0x00;
TCNT0=0x00;
OCR0=0x00;

// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: Timer 1 Stopped
// Mode: Normal top=FFFFh
// OC1A output: Discon.
// OC1B output: Discon.
// Noise Canceler: Off
// Input Capture on Falling Edge
TCCR1A=0x00;
TCCR1B=0x00;
TCNT1H=0x00;
TCNT1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;

// Timer/Counter 2 initialization
// Clock source: System Clock
// Clock value: Timer 2 Stopped
// Mode: Normal top=FFh
// OC2 output: Disconnected
ASSR=0x00;
TCCR2=0x00;
TCNT2=0x00;
OCR2=0x00;

// External Interrupt(s) initialization


// INT0: Off
// INT1: Off
// INT2: Off
MCUCR=0x00;
MCUCSR=0x00;

// Timer(s)/Counter(s) Interrupt(s) initialization


TIMSK=0x00;

// USART initialization
// Communication Parameters: 8 Data, 1 Stop, No Parity
// USART Receiver: Off
// USART Transmitter: On
// USART Mode: Asynchronous
// USART Baud rate: 9600
UCSRA=0x00;
UCSRB=0x08;
UCSRC=0x86;
UBRRH=0x00;
UBRRL=0x47;

// Analog Comparator initialization


// Analog Comparator: Off
// Analog Comparator Input Capture by Timer/Counter 1: Off
// Analog Comparator Output: Off
ACSR=0x80;
SFIOR=0x00;
daftar_keypad();
//inisialisasi LCD Grafik
LCDG_init();
LCDG_RAMBlank(TextHomeAddr,0xF0);LCDG_RAMBlank(Te
xtAttrAddr,0xF0);
LCDG_RAMBlank(Grp1HomeAddr,TotalGrpByte);SetAttrMode(
TxtAttrIntCGROM);
DisplayMode(DispMode|TextOn|GraphicOn);
//-----------------------

LCD_TxtF(1,1," *FINAL PROJECT 2007* ");


LCD_TxtF(1,2," ----------------------------");
LCD_TxtF(1,3," Pemanfaatan Mikrokontroler ");
LCD_TxtF(1,4," Sebagai Pengatur Parameter ");
LCD_TxtF(1,5," pada efek gitar digital ");
LCD_TxtF(1,6," ----------------------------");
LCD_TxtF(1,7," By:Bag$_B@ch ");
LCD_TxtF(1,8," Press ENTER ");

delay_ms(500);
while (1)
{
pad = keypad();
if(pad == 15)
{ efek_tersedia(); }
};
}

void efek_tersedia()
{
unsigned int pad=0;
delay_ms(300);
hapus_layar();

LCD_TxtF(1,1," *EFEK GITAR DIGITAL* ");


//LCD_TxtF(1,2," -------------------- ");
LCD_TxtF(1,3," Pilihan Efek:");
LCD_TxtF(1,5," [1] Tunggal");
LCD_TxtF(1,7," [2] Gabungan");
LCD_AttrF(9,5,"0000000000000");
LCD_AttrF(1,1,"000000000000000000000000000");
LCD_AttrF(7,2,"00000000000000000000");
while(1)
{
delay_ms(200);
posisi=7;
for (posisi>=7;posisi<=26;posisi++)
{
pad = keypad();
if(pad==1||pad==2)
{
if(pad == 1)
{efek_tunggal(); }
else if(pad == 2)
{ efek_gabung();} }
LCD_TxtF(posisi,2,".");delay_ms(60);
if(posisi==26)
{ delay_ms(200);
for (posisi=26;posisi>=7;posisi--)
{
pad = keypad();
if(pad==1||pad==2)
{
if(pad == 1)
{efek_tunggal(); }
else if(pad == 2)
{ efek_gabung();}
}
LCD_TxtF(posisi,2,"-");delay_ms(60);
if(posisi==7)
{ delay_ms(200);
for (posisi>=7;posisi<=26;posisi++)
{
pad = keypad();
if(pad==1||pad==2)
{
if(pad == 1)
{efek_tunggal(); }
else if(pad == 2)
{ efek_gabung();} }

LCD_TxtF(posisi,2,"=");delay_ms(60);
if(posisi==26)
{ delay_ms(200);
for (posisi=26;posisi>=7;posisi--)
{
pad = keypad();

if(pad==1||pad==2)
{
if(pad == 1)
{efek_tunggal(); }
else if(pad == 2)
{ efek_gabung();} }
LCD_TxtF(posisi,2,"%");delay_ms(60);
LCD_TxtF(27,2," ");
}posisi=7;break;
}
}
}
}
}
}break;
}// while

void efek_gabung()
{
unsigned int pad=0;
delay_ms(500);
hapus_layar();

LCD_TxtF(1,1," *EFEK GITAR DIGITAL* ");


LCD_TxtF(1,2," ==================== ");
LCD_TxtF(1,3," Pilihan Gabungan:");
LCD_TxtF(1,5," [1] Dua (2) EFEK");
LCD_TxtF(1,7," [2] Tiga (3) EFEK");
LCD_AttrF(9,5,"0000000000000");
LCD_AttrF(7,2,"22222222222222222222");
while(1)
{
pad = keypad();
if(pad == 1)
{efek_2gabung();
}
else if(pad == 2)
{efek_3gabung();
}
else if(pad==14)
{efek_tersedia();}
}
}

//
======================================================
// =================== * GABUNG 2 EFEK * ================
void efek_2gabung()
{
unsigned char pad=0;
unsigned int
gab2a=12,gab2b=13,gab2c=14,gab2d=15,gab2e=16,gab2f=17;
delay_ms(500);
hapus_layar();

LCD_TxtF(1,1," #MENU GABUNGAN 2 EFEK# ");


LCD_TxtF(1,2,"[1]Flanger+Echo");
LCD_TxtF(1,3,"[2]Chorus +Robot");
LCD_TxtF(1,4,"[3]Robot +Echo");
LCD_TxtF(1,5,"[4]Flanger+Valve");
LCD_TxtF(1,6,"[5]Cmpresr+Robot");
LCD_TxtF(1,7,"[6]Cmpresr+Valve");

LCD_TxtF(23,7,"COR=Del");
LCD_TxtF(23,8,"CAN=Back");
LCD_AttrF(7,2,"00000000000000000000");
hop=0;
while(1)
{
pad=keypad();
if((pad>=0) && (pad<=6))
{
if(pad==1) //gab2a=12,
{
putchar(start); delay_ms(200);
putchar(gab2a); delay_ms(200);
putchar('x'); delay_ms(200);
for(i=0; i<=1; i++){
LCD_TxtF(1, 2," ");delay_ms(200);
LCD_TxtF(1, 2,"[1]Flanger+Echo");delay_ms(200);}

}
else if(pad==2) //gab2b=13
{
putchar(start); delay_ms(200);
putchar(gab2b); delay_ms(200);
putchar('x'); delay_ms(200);
for(i=0; i<=1; i++){
LCD_TxtF(1, 3," ");delay_ms(200);
LCD_TxtF(1, 3,"[2]Chorus +Robot");delay_ms(200);}
}
else if(pad==3) //,gab2c=14
{
putchar(start); delay_ms(200);
putchar(gab2c); delay_ms(200);
putchar('x'); delay_ms(200);
for(i=0; i<=1; i++){
LCD_TxtF(1, 4," ");delay_ms(200);
LCD_TxtF(1, 4,"[3]Robot +Echo");delay_ms(200);}
}
else if(pad==4) //,gab2d=15
{
putchar(start); delay_ms(200);
putchar(gab2d); delay_ms(200);
putchar('x'); delay_ms(200);
for(i=0; i<=1; i++){
LCD_TxtF(1, 5," ");delay_ms(200);
LCD_TxtF(1, 5,"[4]Flanger+Valve");delay_ms(200);}

}
else if(pad==5) //,gab2e=16
{
putchar(start); delay_ms(200);
putchar(gab2e); delay_ms(200);
putchar('x'); delay_ms(200);
for(i=0; i<=1; i++){
LCD_TxtF(1,6," ");delay_ms(200);
LCD_TxtF(1,6,"[5]Cmpresr+Robot");delay_ms(200);}

}
else if(pad==6) //,gab2f=17
{
putchar(start); delay_ms(200);
putchar(gab2f); delay_ms(200);
putchar('x'); delay_ms(200);
for(i=0; i<=1; i++){
LCD_TxtF(1,7," ");delay_ms(200);
LCD_TxtF(1,7,"[6]Cmpresr+Valve");delay_ms(200);}
}

LCD_TxtF(1,8," ");
LCD_TxtF(1,8,"SENDING:");
while(1)
{
for (posisi=9;posisi<30;posisi++)
{
LCD_AttrF(posisi,8,"1");
delay_ms(40);
}delay_ms(150);break;
}

LCD_AttrF(9,8,"0000000000000000000000000");
LCD_TxtF(1,8," ");
LCD_TxtF(6,8,"DATA TELAH TERKIRIM");
delay_ms(1500);
LCD_TxtF(1,8," ");
LCD_TxtF(23,8,"CAN=Back");
//kirim();
}
else if(pad==14)
{efek_gabung();}
}
}
// ====================================================
// ================== * GABUNG 3 EFEK * ================
void efek_3gabung()
{
unsigned char pad=0;
unsigned int gab3a=18, gab3b=19, gab3c=20;
delay_ms(400);
hapus_layar();

LCD_TxtF(1,1," #MENU GABUNGAN 3 EFEK # ");


LCD_TxtF(1,3, "[1]Tremolo + Flanger+Echo ");
LCD_TxtF(1,4, "[2]Compresor+ Echo +Robot");
LCD_TxtF(1,5 ,"[3]Chorus + Flanger+Echo ");

LCD_TxtF(2,8,"CAN=Back");
LCD_AttrF(7,2,"00000000000000000000");
hop=0;

while(1)
{
pad=keypad();
if((pad>=0) && (pad<=3))
{
if(pad==1)
{
putchar(start); delay_ms(200);
putchar(gab3a); delay_ms(200);
putchar('x'); delay_ms(200);
for(i=0; i<=1; i++){
LCD_TxtF(1,3," ");delay_ms(200);
LCD_TxtF(1,3, "[1]Tremolo + Flanger+Echo");

}
else if(pad==2)
{
for(i=0; i<=1; i++){
LCD_TxtF(1,4," ");delay_ms(200);
LCD_TxtF(1,4, "[2]Compresor+ Echo +Robot");
putchar(start); delay_ms(200);
putchar(gab3b); delay_ms(200);
putchar('x'); delay_ms(200);

}
else if(pad==3)
{
putchar(start); delay_ms(200);
putchar(gab3c); delay_ms(200);
putchar('x'); delay_ms(200);
for(i=0; i<=1; i++){
LCD_TxtF(1,5," ");delay_ms(200);
LCD_TxtF(1,5 ,"[3]Chorus + Flanger+Echo ");
}
LCD_TxtF(1,8," ");
LCD_TxtF(1,8,"SENDING:");
while(1)
{
for (posisi=9;posisi<30;posisi++)
{
LCD_AttrF(posisi,8,"1");
delay_ms(40);
}break;
}

LCD_AttrF(9,8,"0000000000000000000000000");
LCD_TxtF(1,8," ");
LCD_TxtF(6,8,"DATA TELAH TERKIRIM");
delay_ms(1500);
LCD_TxtF(1,8," ");
LCD_TxtF(2,8,"CAN=Back");
//kirim();
}
else if(pad==14)
{efek_gabung();}
}
}

unsigned int keypad()


{ unsigned char i,a;
unsigned int nilai;
for(i=0;i<4;i++)
{
PORTC=~(1<<i);
a=PINC & 0xF0; // perintah "PINC" u/ input &
"PORTC" u/ output
if (a!=0xF0) break;
}
a = a | i;
switch(a)
{
case 0b11010000: nilai=0; break; // tombol 0
case 0b11100001: nilai=1; break; // tombol 1
case 0b11010001: nilai=2; break; // tombol 2
case 0b10110001: nilai=3; break; // tombol 3
case 0b11100010: nilai=4; break; // tombol 4
case 0b11010010: nilai=5; break; // tombol 5
case 0b10110010: nilai=6; break; // tombol 6
case 0b11100011: nilai=7; break; // tombol 7
case 0b11010011: nilai=8; break; // tombol 8
case 0b10110011: nilai=9; break; // tombol 9
case 0b01110001: nilai=10; break; // tombol COR
case 0b01110010: nilai=11; break; // tombol MEN
case 0b01110011: nilai=12; break; // tombol UP
case 0b01110000: nilai=13; break; // tombol DOWN
case 0b11100000: nilai=14; break; // tombol CAN

case 0b10110000: nilai=15; break; // tombol ENTER


default : nilai=100; break;
}
return(nilai);
}

void hapus_layar()
{
for(b=1;b<9;b++)
LCD_TxtF(1,b," ");
a1=0,a4=0,a3=0,a5=0,a6=0,a2=0,a7=0,a8=0;
}

void daftar_keypad()
{
//siapkan PORTC untuk keypad
//4MSB input, 4LSB output
//DDRC = 0000 1111
DDRC=0x0f;
// input output
//aktifkan pull-up di 4MSB input 1111 xxxx
//nyalakan scan xxxx
PORTC=0xff;
}
// ====================================================
// ***************** # EFEK TUNGGAL # **********************
void efek_tunggal()
{
unsigned char x_ketik=7, y=7;
unsigned char pad=0;
LCD_AttrF(9,5,"0000000000000");
LCD_AttrF(8,1,"000000000000000000");
hapus_layar();
delay_ms(400);
LCD_TxtF(1,1, " #MENU EFEK TUNGGAL#");
LCD_AttrF(1,1," 3333333333333333333");
LCD_TxtF(1,2, "[1]Fuzz");
LCD_TxtF(1,3, "[2]OverD");
LCD_TxtF(1,4, "[3]Dstrsi");
LCD_TxtF(1,5, "[4]Echo");
LCD_TxtF(10,2,"[5]Tremolo");
LCD_TxtF(10,3,"[6]Cmpresr");
LCD_TxtF(10,4,"[7]Robot");
LCD_TxtF(10,5,"[8]Valve");
LCD_TxtF(20,2,"[9]MdLasi");
LCD_TxtF(20,3,"[10]Chorus");
LCD_TxtF(20,4,"[11]Flanger");
LCD_TxtF(1,7,"Pilih=__");
LCD_TxtF(1,8,"[1-11]");

LCD_TxtF(14,8,"CAN=Back|COR=DeL");
hop=0;

while(1)
{
pad=keypad();
if ((pad>=0)&&(pad<=9)) // input nilai
{
if ((x_ketik-7)<ketik_tunggal)
{
str[0]=pad+0x30;
LCD_Txt(x_ketik,y,str);
if((x_ketik-7)<1)
{jus=str[0];}
else if((x_ketik-7)<2)
{buah=str[0];}
x_ketik++;
delay_ms(300);
LCD_TxtF(x_ketik,7,"[Ent]");
}
}

if (pad==10) // DELETE ke Kiri


{ if ((x_ketik-7)>0)
{ x_ketik--;
LCD_TxtF(x_ketik,y," ");
LCD_TxtF(x_ketik,7,"[Ent] ");
delay_ms(300); }
}
================================================

if(jus==0x31 && x_ketik==8 && pad==15)


{ for(i=0; i<=2; i++){
LCD_TxtF(1,2," ");delay_ms(200);
LCD_TxtF(1,2,"[1]Fuzz");delay_ms(200);}
hop=1;efek_tunggal_fuzz(); }
else if(jus==(0x32) && x_ketik==8 && pad==15)
{ for(i=0; i<=2; i++){
LCD_TxtF(1,3," ");delay_ms(200);
LCD_TxtF(1,3,"[2]OverD");delay_ms(200);}
hop=1;efek_tunggal_overdrive();}
else if(jus==0x33 && x_ketik==8 && pad==15)
{ for(i=0; i<=2; i++){
LCD_TxtF(1,4," ");delay_ms(200);
LCD_TxtF(1,4,"[3]Dstrsi");delay_ms(200);}
hop=1;efek_tunggal_distorsi();}
else if(jus==(0x34) && x_ketik==8 && pad==15)
{ for(i=0; i<=2; i++){
LCD_TxtF(1,5," ");delay_ms(200);
LCD_TxtF(1,5,"[4]Echo");delay_ms(200);}
hop=1;efek_tunggal_echo();}
else if(jus==(0x35) && x_ketik==8 && pad==15)
{ for(i=0; i<=2; i++){
LCD_TxtF(10,2," ");delay_ms(200);
LCD_TxtF(10,2,"[5]Tremolo");delay_ms(200);}
hop=1;efek_tunggal_tremolo();}
else if(jus==(0x36) && x_ketik==8 && pad==15)
{ for(i=0; i<=2; i++){
LCD_TxtF(10,3," ");delay_ms(200);
LCD_TxtF(10,3,"[6]Cmpresr");delay_ms(200);}
hop=1;efek_tunggal_compressor();}

else if(jus==(0x37) && x_ketik==8 && pad==15)


{ for(i=0; i<=2; i++){
LCD_TxtF(10,4," ");delay_ms(200);
LCD_TxtF(10,4,"[7]Robot");delay_ms(200);}
hop=1;efek_tunggal_robot();}

else if(jus==(0x38) && x_ketik==8 && pad==15)


{ for(i=0; i<=2; i++){
LCD_TxtF(10,5," ");delay_ms(200);
LCD_TxtF(10,5,"[8]Valve");delay_ms(200);}
hop=1;efek_tunggal_valve();}
else if(jus==(0x39) && pad==15)
{ hop=1;
for(i=0; i<=2; i++){
LCD_TxtF(20,2,"
");delay_ms(200);

LCD_TxtF(20,2,"[9]MdLasi");delay_ms(200);}
efek_tunggal_modulasi();}
else if(jus==(0x31) && buah==(0x30) && pad==15)
{ hop=1;
for(i=0; i<=2; i++){
LCD_TxtF(20,3," ");

LCD_TxtF(20,3,"[10]Chorus");delay_ms(200);}
efek_tunggal_chorus();}
else if(jus==(0x31) && buah==(0x31) && pad==15)
{ hop=1;
for(i=0; i<=2; i++){
LCD_TxtF(20,4," ");delay_ms(200);

LCD_TxtF(20,4,"[11]Flanger");delay_ms(200);}
efek_tunggal_flanger();}

if(pad == 14)
{back = 1; break;}
}
if(back == 1)
efek_tersedia();
}
// =================_EFEK FUZZ _========================
void efek_tunggal_fuzz()
{
// unsigned str[3]="";
unsigned char x_ketik=10,y=5;

hapus_layar();
delay_ms(150);
LCD_AttrF(1,1," 0000000000000000000");
LCD_TxtF(9,1," |Efek FUZZ|");
LCD_TxtF(1,3,"Pilih Parameter");
LCD_TxtF(1,5," >>LIMIT=_____(0-22937)");
LCD_TxtF(24,8,"DEL=COR");
LCD_TxtF(1,8,"Back=CAN");
LCD_AttrF(9,1,"222222222222");

while(1)
{
pad=keypad();

if( ((pad>=0) && (pad<=9)) )


{
if ( ((x_ketik-10)<ketik_max) )
{
bil=(bil*10)+pad;
if(bil<=255)
{ aa=1; bb=2; }
if(bil>255 && bil<=22937)
{ bb=1; aa=2; }
else if(bil>22937)
{stop=1; LCD_TxtF(15,5,"(>>22937)");}

str[0]=pad+0x30;
LCD_Txt(x_ketik,y,str);
x_ketik++;
delay_ms(300);
//LCD_TxtF(20,5,"[Ent]");
}
}
else if (pad==10) // DELETE ke Kiri
{
if ((x_ketik-10)>0)
{ x_ketik--;
bil=(bil/10); stop=2;

LCD_TxtF(x_ketik,y," ");
if(bil<22937)
{LCD_TxtF(15,5,"(0-22937)");}
delay_ms(300);
}
}
else if( ((pad==15) && (stop!=1) && (aa==1||bb==1)) )
{
//Dflanger=1;
putchar(start); delay_ms(200);
putchar(fuzz); delay_ms(200);
if(aa==1)
{
putchar('z'); delay_ms(200);

putchar(bil & 0xFF); delay_ms(200);

putchar(limit);
//LCD_TxtF(19,3,"21");delay_ms(200);

}
else if(bb==1)
{
putchar(bil & 0xFF); delay_ms(200);
putchar(bil >> 8); delay_ms(200);
putchar(limit);
//LCD_TxtF(19,3,"21");delay_ms(200);
}

LCD_TxtF(1,8," ");
LCD_TxtF(1,8,"SENDING:");

while(1)
{
for (posisi=9;posisi<30;posisi++)
{
LCD_AttrF(posisi,8,"1");
delay_ms(50);
}break;
}delay_ms(150);

LCD_AttrF(9,8,"0000000000000000000000000");
LCD_TxtF(1,8, " ");
LCD_TxtF(6,8,"DATA TELAH TERKIRIM");
delay_ms(1500);
LCD_TxtF(1,8," ");
LCD_TxtF(24,8,"DEL=COR");
LCD_TxtF(1,8,"Back=CAN");

//kirim();
}
else if(pad==14)
{bil=0; efek_tunggal();}
}// while punya
}// void punya
// ================= OVER DRIVE =====================
void efek_tunggal_overdrive()
{
// unsigned str[4]="";
unsigned char x_ketik=15;
unsigned char y=0,hop;

hapus_layar();
delay_ms(150);
LCD_AttrF(1,1," 0000000000000000000");
LCD_TxtF(8,1,"|Efek OVERDRIVE|");
LCD_TxtF(1,3,"Pilih Parameter");
LCD_TxtF(1,5,"[1]Multiple E=_____"); // batas 0-32767 // 25
LCD_TxtF(1,6,"[2]Multiple F=_____"); // batas 0-32767 // 26
LCD_TxtF(24,8,"DEL=COR");
LCD_TxtF(1,8,"Back=CAN");
LCD_AttrF(8,1,"2222222222222222");

while(1)
{
pad=keypad();
if(pad==1) // 32767
{ for(i=0; i<=2; i++){
LCD_TxtF(1,5," "); delay_ms(150);
LCD_TxtF(1,5,"[1]Multiple E=_____(0-
32767)"); delay_ms(150);}
xx=1; yy=2; y=5; hop=1; break;}

if(pad==2)
{ for(i=0; i<=2; i++){
LCD_TxtF(1,6," "); delay_ms(150);
LCD_TxtF(1,6,"[2]Multiple F=_____(0-32767)");
delay_ms(150);}
xx=2; yy=1; y=6; hop=1; break;}

if(pad==14)
{ bil=0; efek_tunggal(); }
}

if( (xx==1) || (yy==1) ) // Menentukan nilai Parameter: 3 Digit/


5 Digit
{
while(1)
{
pad=keypad();

if( ((pad>=0) && (pad<=9) && (hop==1) &&


(yy==1||xx==1)) )
{
if ( ((x_ketik-15)<ketik_max) )
{
bil=(bil*10)+pad;
if(bil<255)
{ aa=1; bb=2; }
if(bil>255&&bil<=32767)
{ bb=1; aa=2; }
else if(bil>32767)
{stop=1;
LCD_TxtF(20,5,"(>>32767)");}

str[0]=pad+0x30;
LCD_Txt(x_ketik,y,str);
x_ketik++;
delay_ms(300);
//LCD_TxtF(20,5,"[Ent]");
}
}
else if (pad==10) //
COR_DELETE ke Kiri
{
if ((x_ketik-15)>0)
{ x_ketik--;
bil=(bil/10); stop=2;

LCD_TxtF(x_ketik,y," ");
if(xx==1)
{LCD_TxtF(20,5,"(0-32767)");}
else if(yy==1)
{LCD_TxtF(20,6,"(0-32767)");}
delay_ms(300);
}
}

else if( ((pad==15)&& (xx==1||yy==1) &&


(aa==1||bb==1) &&(stop!=1)) )
{
//Dflanger=1;
putchar(start); delay_ms(200); //
send start:1
putchar(overdrive); delay_ms(200); //
send efek :2

if(xx==1&&aa==1) // E-3 digit


{
putchar('z'); delay_ms(500);//122 //
digitX :122
putchar(bil & 0xFF); delay_ms(200);
// digit3 :(0-255)
putchar(multiple_E); //
parameter :25

//LCD_TxtF(19,3,"25");delay_ms(200);
}

else if(xx==1&&bb==1) // E-5 digit

{ putchar(bil & 0xFF); delay_ms(300);


// digit3 :_ _
putchar(bil >> 8); delay_ms(300); //
putchar(multiple_E); // parameter
//LCD_TxtF(19,3,"25");delay_ms(300);
}

else if(yy==1&&aa==1) // F-3 digit


{
putchar('z'); delay_ms(500);//122 //
putchar(bil & 0xFF); delay_ms(200);
putchar(multiple_F); //

//LCD_TxtF(19,3,"26");delay_ms(200);
}
else if(yy==1&&bb==1) // F-5 digit

{ putchar(bil & 0xFF); delay_ms(300);


putchar(bil >> 8); delay_ms(300); //
putchar(multiple_F); // parameter

}
LCD_TxtF(1,8," ");
LCD_TxtF(1,8,"SENDING:");

while(1)
{
for (posisi=9;posisi<30;posisi++)
{
LCD_AttrF(posisi,8,"1");
delay_ms(50);
}break;
}delay_ms(150);
LCD_AttrF(9,8,"0000000000000000000000000");
LCD_TxtF(1,8," ");
LCD_TxtF(6,8,"DATA TELAH TERKIRIM");
LCD_TxtF(1,8," ");
LCD_TxtF(24,8,"DEL=COR");
D_TxtF(1,8,"Back=CAN");
}
if(pad==14)
{ bil=0; efek_tunggal(); }
}// while punya
}// if (X Y)
}// void punya
// ====================== DISTORSI ====================
void efek_tunggal_distorsi()
{
// unsigned str[2]="";
unsigned char x_ketik=15;
unsigned char y=0,hop;

hapus_layar();
delay_ms(150);
LCD_AttrF(1,1," 0000000000000000000");
LCD_TxtF(8,1,"|Efek DISTORSI|");
LCD_TxtF(1,3,"Pilih Parameter");
LCD_TxtF(1,5,"[1]Distorsi_A=_____"); // batas 0-32767 // 22
LCD_TxtF(1,6,"[2]Distorsi_B=_____"); // batas 0-32767 // 23
LCD_TxtF(1,7,"[3]Gain =_____"); // batas 0-5 // 24
LCD_TxtF(24,8,"DEL=COR");
LCD_TxtF(1,8,"Back=CAN");
LCD_AttrF(8,1,"2222222222222222");

while(1)
{
pad=keypad();
if(pad==1) // 32767
{ for(i=0; i<=2; i++){
LCD_TxtF(1,5," ");
delay_ms(150);
LCD_TxtF(1,5,"[1]Distorsi_A=_____(0-
32767)"); delay_ms(150);}
xx=1; yy=2; y=5;
hop=1; break;
}
if(pad==2)
{ for(i=0; i<=2; i++){
LCD_TxtF(1,6," ");
delay_ms(150);
LCD_TxtF(1,6,"[2]Distorsi_B=_____(0-
32767)"); delay_ms(150);}
xx=2; yy=1; y=6;
hop=1; break;
}
if(pad==3)
{ for(i=0; i<=2; i++){
LCD_TxtF(1,7," ");
delay_ms(150);
LCD_TxtF(1,7,"[3]Gain =_____(0-5)");
delay_ms(150);}
xx=2; yy=2; zz=1;
y=7; hop=1; break;
}
else if(pad==14)
{ bil=0; efek_tunggal(); }
}

if( (xx==1) || (yy==1) ||(zz==1) ) {


while(1)
{
pad=keypad();
if( ((pad>=0) && (pad<=9) && (hop==1) &&
(yy==1||xx==1||zz==1)) )
{

if ( ((x_ketik-15)<ketik_max) )
{
if(xx==1) // Amplitudo
{
bil=(bil*10)+pad;
if(bil<255)
{ aa=1; bb=2; }
if(bil>255&&bil<=32767)
{ bb=1; aa=2; }
else if(bil>32767)
{stop=1;
LCD_TxtF(20,5,"(>>32767)");}
}
else if(yy==1) // frekwensi
{
bil=(bil*10)+pad;
if(bil<255)
{ aa=1; bb=2; }
if(bil>255&&bil<=32767)
{ bb=1; aa=2; }
else if(bil>32767)
{stop=1;
LCD_TxtF(20,5,"(>>32767)");}
}
else if(zz==1) // Modulasi
{ bil=(bil*10)+pad;
if(bil<=5)
{ aa=1; }
if(bil>5)
{stop=1;
LCD_TxtF(20,7,"(>>5)");}
}

str[0]=pad+0x30;
LCD_Txt(x_ketik,y,str);
x_ketik++;
delay_ms(300);
//LCD_TxtF(20,5,"[Ent]");
}
}

else if (pad==10)
{
if ((x_ketik-15)>0)
{ x_ketik--;
bil=(bil/10); stop=2;

LCD_TxtF(x_ketik,y," ");
if(bil==1)
{LCD_TxtF(20,5,"(0-32767)");}
else if(yy==1)
{LCD_TxtF(20,6,"(0-32767)");}
else if(zz==1)
{LCD_TxtF(20,7,"(0-5)");}
delay_ms(300);
}
}
else if(pad==14)
{bil=0; efek_tunggal(); }
else if(
((pad==15)&&(xx==1||yy==1||zz==1)&&(aa==1||bb==1)&&(stop!=1)) )

{
//Dflanger=1;
putchar(start); delay_ms(200);
putchar(distorsi); delay_ms(200);
if(xx==1&&aa==1)
{
putchar('z'); delay_ms(200);//122
putchar(bil & 0xFF); delay_ms(200);
// digit3 :(0-255)
putchar(distorsi_A);
//LCD_TxtF(19,3,"22");
}

else if(xx==1&&bb==1) // F-5 digit

{ putchar(bil & 0xFF); delay_ms(200);


putchar(bil >> 8); delay_ms(200);
putchar(distorsi_A);
//LCD_TxtF(19,3,"22");delay_ms(300);
}
else if(yy==1&&aa==1)
{
putchar('z'); delay_ms(200);//122
putchar(bil & 0xFF); delay_ms(200);
putchar(distorsi_B); ;

//LCD_TxtF(19,3,"23");delay_ms(200);
}

else if(yy==1&&bb==1) // F-5 digit

putchar(bil & 0xFF); delay_ms(200);


// digit3 :_ _
putchar(bil >> 8); delay_ms(200);
utchar(distorsi_B);
//LCD_TxtF(19,3,"23");delay_ms(300);
}
else if(zz==1&&aa==1)
{
putchar('z'); delay_ms(200
putchar(bil & 0xFF); delay_ms(200);
putchar(gain);
//LCD_TxtF(19,3,"24");delay_ms(200);
}

LCD_TxtF(1,8," ");
LCD_TxtF(1,8,"SENDING:");

while(1)
{
for (posisi=9;posisi<30;posisi++)
{
LCD_AttrF(posisi,8,"1");
delay_ms(50);
}break;
}delay_ms(150);
LCD_AttrF(9,8,"0000000000000000000000000");
LCD_TxtF(1,8," ");
LCD_TxtF(6,8,"DATA TELAH TERKIRIM");
LCD_TxtF(1,8," ");

LCD_TxtF(24,8,"DEL=COR");
D_TxtF(1,8,"Back=CAN");

//kirim();
}
}// while punya
}// if (X Y)
}// void punya

// ======================= ECHO =======================


void efek_tunggal_echo()
{
// unsigned str[2]="";
unsigned char x_ketik=15;
unsigned char y=0,hop;

hapus_layar();
delay_ms(150);
LCD_AttrF(1,1," 0000000000000000000");
LCD_TxtF(9,1," |Efek ECHO|");
LCD_TxtF(1,3,"Pilih Parameter");
LCD_TxtF(1,5,"[1]Attenuator=_____"); // batas 0-100 // 34
LCD_TxtF(1,6,"[2]Feedback =_____"); // batas 0-9 // 35
LCD_TxtF(24,8,"DEL=COR");
LCD_TxtF(1,8,"Back=CAN");
LCD_AttrF(9,1,"2222222222222222");

while(1)
{
pad=keypad();
if(pad==1)
{ for(i=0; i<=2; i++){
LCD_TxtF(1,5," "); delay_ms(150);
LCD_TxtF(1,5,"[1]Attenuator=_____(0-100 )
xx=1; yy=2; y=5; hop=1; break;

}
if(pad==2)
{ for(i=0; i<=2; i++){
LCD_TxtF(1,6," "); delay_ms(150);
LCD_TxtF(1,6,"[2]Feedback =_____(0-9)");
xx=2; yy=1; y=6; hop=1; break;
}
else if(pad==14)
{ efek_tunggal(); }
}

if( (xx==1) || (yy==1) )


{
while(1)
{
pad=keypad();
if( ((pad>=0) && (pad<=9) && (hop==1) &&
(yy==1||xx==1)) )
{
if ( ((x_ketik-15)<ketik_max) )
{
if(xx==1)
{ bil=(bil*10)+pad;
if(bil<=100)
{ aa=1; bb=2; }
if(bil>100)
{stop=1; LCD_TxtF(20,5,"(>>100)");}
}
else if(yy==1) //Feedback
{ bil=(bil*10)+pad;
if(bil<=9)
{ aa=1; bb=2; }
if(bil>9)

{stop=1; LCD_TxtF(20,6,"(>>9)");}
}
str[0]=pad+0x30;
LCD_Txt(x_ketik,y,str);
x_ketik++;
delay_ms(300);
//LCD_TxtF(20,5,"[Ent]");
}
}

else if (pad==10) {
if ((x_ketik-15)>0)
{ x_ketik--;
bil=(bil/10); stop=2;

LCD_TxtF(x_ketik,y," "); if(xx==1)


{LCD_TxtF(20,5,"(0-100)");}
else if(yy==1)
{LCD_TxtF(20,6,"(0-9)");}
delay_ms(300);
}
}
else if(pad==14)
{ bil=0; efek_tunggal(); }

else if( ((pad==15)&& (xx==1||yy==1) &&


(aa==1||bb==1) &&(stop!=1)) )
{
//Dflanger=1;
putchar(start); delay_ms(200);
putchar(echo); delay_ms(200); // send efek :2

if(xx==1&&aa==1) // E-3 digit


{
putchar('z');
delay_ms(300); // digitX :122
putchar(bil & 0xFF);
delay_ms(200); // digit3 :(0-255)
putchar(attenuator_4);
}
else if(yy==1&&aa==1) // F-3 digit
{
putchar('z');
delay_ms(500); // digitX :122
putchar(bil & 0xFF);
delay_ms(200); // digit3 :(1-9)
putchar(feedback); //

}
LCD_TxtF(1,8," ");
LCD_TxtF(1,8,"SENDING:");
while(1)
{
for (posisi=9;posisi<30;posisi++)
{
LCD_AttrF(posisi,8,"1");
delay_ms(50);
}break;
}delay_ms(150);

LCD_AttrF(9,8,"0000000000000000000000000");
LCD_TxtF(1,8," ");
LCD_TxtF(6,8,"DATA TELAH TERKIRIM");
LCD_TxtF(1,8," ");
LCD_TxtF(24,8,"DEL=COR");
LCD_TxtF(1,8,"Back=CAN");

//kirim();
}
}// while punya
}// if (X Y)
}// void punya
// =============== TREMOLO ========================
void efek_tunggal_tremolo()
{// unsigned str[2]="";
unsigned char x_ketik=15;
unsigned char y=0,hop;

hapus_layar();
delay_ms(150);
LCD_AttrF(1,1," 0000000000000000000");
LCD_TxtF(9,1,"|Efek TREMOLO|");
LCD_TxtF(1,3,"Pilih Parameter");
LCD_TxtF(1,5,"[1]Amplitudo =_____"); // batas 0-5 ;// 27
LCD_TxtF(1,6,"[2]Frekwensi =_____"); // batas 0-150 // 28
LCD_TxtF(1,7,"[3]Modulasi =_____"); // batas 0-10 // 29
LCD_TxtF(24,8,"DEL=COR");
LCD_TxtF(1,8,"Back=CAN");
LCD_AttrF(9,1,"2222222222222222");

while(1)
{
pad=keypad();
if(pad==1) // 32767
{ for(i=0; i<=2; i++){
LCD_TxtF(1,5," "); delay_ms(150);
LCD_TxtF(1,5,"[1]Amplitudo =_____(0-5)");
delay_ms(150);}
xx=1; yy=2; y=5; hop=1; break;
}
if(pad==2)
{ for(i=0; i<=2; i++){
LCD_TxtF(1,6," ");
LCD_TxtF(1,6,"[2]Frekwensi =_____(0-150)");
delay_ms(150);}
xx=2; yy=1; y=6; hop=1; break;
}
if(pad==3)
{ for(i=0; i<=2; i++){
LCD_TxtF(1,7," ");
delay_ms(150);
LCD_TxtF(1,7,"[3]Modulasi =_____(0-10)");
delay_ms(150);}
xx=2; yy=2; zz=1; y=7; hop=1; break;
}
else if(pad==14)
{ efek_tunggal(); }
}

if( (xx==1) || (yy==1) ||(zz==1) )


{
while(1)
{
pad=keypad();
if( ((pad>=0) && (pad<=9) && (hop==1) &&
(yy==1||xx==1||zz==1)) )
{
if ( ((x_ketik-15)<ketik_max) )
{
if(xx==1) // Amplitudo
{
bil=(bil*10)+pad;
if(bil<=5)
{ aa=1; bb=2; }
if(bil>5)

{stop=1; LCD_TxtF(20,5,"(>>5)");}
}
else if(yy==1) // frekwensi
{
bil=(bil*10)+pad;
if(bil<=150)
{ aa=1; bb=2; }
if(bil>150)

{stop=1; LCD_TxtF(20,6,"(>>150)");}
}
else if(zz==1) // Modulasi
{
bil=(bil*10)+pad;
if(bil<=10)
{ aa=1; bb=2; }
if(bil>10)

{stop=1; LCD_TxtF(20,7,"(>>10)");}
}
str[0]=pad+0x30;
LCD_Txt(x_ketik,y,str);
x_ketik++;
delay_ms(300);
//LCD_TxtF(20,5,"[Ent]");
}
}
else if (pad==10)
{
if ((x_ketik-15)>0)
{ x_ketik--;
bil=(bil/10); stop=2;

LCD_TxtF(x_ketik,y," ");
//if(xx==1||yy==1)
//{LCD_TxtF(20,5,"(0-32767)");}
delay_ms(300);
}
}
else if( ((pad==15)&& (xx==1||yy==1||zz==1) && (aa==1||bb==1)
&&(stop!=1)) )
{
//Dflanger=1;
putchar(start); delay_ms(200); //
putchar(tremolo); delay_ms(200); // send efek

if(xx==1&&aa==1)
{
putchar('z'); delay_ms(500);//122 //
putchar(bil & 0xFF); delay_ms(200);
putchar(amplitudo); delay_ms(200);
}

else if(yy==1&&aa==1)
{
putchar('z'); delay_ms(500);//122 //
putchar(bil & 0xFF); delay_ms(200);
putchar(frekwensi_5); delay_ms(200);
}

else if(zz==1&&aa==1)
{
putchar('z'); delay_ms(500);//122 //
putchar(bil & 0xFF); delay_ms(200);
putchar(modulasi_5); delay_ms(200);
//LCD_TxtF(19,3,"29");
}

LCD_TxtF(1,8," ");
LCD_TxtF(1,8,"SENDING:");

while(1)
{
for (posisi=9;posisi<30;posisi++)
{
LCD_AttrF(posisi,8,"1");
delay_ms(50);
}break;
}delay_ms(150);

LCD_AttrF(9,8,"0000000000000000000000000");

LCD_TxtF(1,8," ");
LCD_TxtF(6,8,"DATA TELAH TERKIRIM");
delay_ms(1500);
LCD_TxtF(1,8," ");
LCD_TxtF(24,8,"DEL=COR");
LCD_TxtF(1,8,"Back=CAN");

//kirim();
}
else if(pad==14)
{ bil=0; efek_tunggal(); }

}// while punya


}// if (X Y)
}// void

// ======================= COMPRESSOR ================


void efek_tunggal_compressor()
{
hapus_layar();
delay_ms(150);
LCD_AttrF(1,1," 0000000000000000000");
LCD_TxtF(7,1,"|Efek COMPRESSOR|");
LCD_TxtF(6,3," Parameter Konstan");
LCD_TxtF(9,5," Tekan ENTER!"); // batas 0-32767 // 21
LCD_TxtF(1,8,"Back=CAN");
LCD_AttrF(9,5,"2222222222222");

while(1)
{
pad=keypad();
if( pad==15 )
{
//Dflanger=1;
putchar(start); delay_ms(300);
// send start:1
putchar(compressor); delay_ms(300); //
putchar('x'); delay_ms(300);
LCD_TxtF(1,8," ");
LCD_TxtF(1,8,"SENDING:");

while(1)
{
for (posisi=9;posisi<30;posisi++)
{
LCD_AttrF(posisi,8,"1");
delay_ms(50);
}break;
}delay_ms(150);

LCD_AttrF(9,8,"0000000000000000000000000");
LCD_TxtF(1,8," ");
LCD_TxtF(6,8,"DATA TELAH TERKIRIM");
delay_ms(1500);
LCD_TxtF(1,8," ");
LCD_TxtF(24,8,"DEL=COR");
LCD_TxtF(1,8,"Back=CAN");
}

else if(pad==14)
{ efek_tunggal(); }

}// while punya


}// void punya
// ==================== ROBOT =======================
void efek_tunggal_robot()
{
hapus_layar();
delay_ms(150);
LCD_AttrF(1,1," 0000000000000000000");
LCD_TxtF(9,1,"|Efek ROBOT|");
LCD_TxtF(6,3,"Parameter Konstan");
LCD_TxtF(9,5,"Tekan ENTER!"); // batas<32 && '*0.9 // 21
LCD_TxtF(1,8,"Back=CAN");
LCD_AttrF(9,5,"222222222222");

while(1)
{
pad=keypad();
if( pad==15 )
{
putchar(start); delay_ms(300);
putchar(robot); delay_ms(300);
putchar('x'); delay_ms(300);
LCD_TxtF(1,8," ");
LCD_TxtF(1,8,"SENDING:");
while(1)
{
for (posisi=9;posisi<30;posisi++)
{
LCD_AttrF(posisi,8,"1");
delay_ms(50);
}break;
}delay_ms(150);

LCD_AttrF(9,8,"0000000000000000000000000");
LCD_TxtF(1,8," ");
LCD_TxtF(6,8,"DATA TELAH TERKIRIM");
delay_ms(1500);
LCD_TxtF(1,8," ");
//LCD_TxtF(10,8,"DEL=COR");
LCD_TxtF(1,8,"Back=CAN");

}
else if(pad==14)
{ bil=0; efek_tunggal(); }

}// while punya


}// void punya

// ==================== VALVE =====================


void efek_tunggal_valve()
{
unsigned char x_ketik=15;
unsigned char y=0,hop;

hapus_layar();
delay_ms(150);
LCD_AttrF(1,1," 0000000000000000000");
LCD_TxtF(9,1,"|Efek VALVE|");
LCD_TxtF(1,3,"Pilih Parameter");
LCD_TxtF(1,5,"[1]Multiple P=_____"); // batas 0-32767 // 32
LCD_TxtF(1,6,"[2]Multiple Q=_____"); // batas 0-16383 // 33
LCD_TxtF(24,8,"DEL=COR");
LCD_TxtF(1,8,"Back=CAN");
LCD_AttrF(9,1,"2222222222222222");

while(1)
{
pad=keypad();
if(pad==1) // 32767
{ for(i=0; i<=2; i++){
LCD_TxtF(1,5," "); delay_ms(150);
LCD_TxtF(1,5,"[1]Multiple P=_____(0-
32767)"); delay_ms(150);}
xx=1; yy=2; y=5;
hop=1; break;
}
if(pad==2)
{ for(i=0; i<=2; i++){
LCD_TxtF(1,6," "); delay_ms(150);
LCD_TxtF(1,6,"[2]Multiple Q=_____(0-
16383)"); delay_ms(150);}
xx=2; yy=1; y=6;
hop=1; break;
}
else if(pad==14)
{ efek_tunggal(); }

if( (xx==1) || (yy==1) ) // Menentukan nilai Parameter: 3 Digit/


5 Digit
{
while(1)
{
pad=keypad();
if( ((pad>=0) && (pad<=9) && (hop==1) &&
(yy==1||xx==1)) )
{
if ( ((x_ketik-15)<ketik_max) )
{

if(xx==1)
{ // aa1=digit3 bb1=digit5
bil=(bil*10)+pad;
if(bil<255)
{ aa=1; bb=2; }
if(bil>255&&bil<=32767)
{ bb=1; aa=2; }
else if(bil>32767)
{stop=1;
LCD_TxtF(20,5,"(>>32767)");}
}
else if(yy==1)
{
bil=(bil*10)+pad;
if(bil<255)
{ aa=1; bb=2; }
if(bil>255&&bil<=16383)
{ bb=1; aa=2; }
else if(bil>16383)
{stop=1;
LCD_TxtF(20,6,"(>>16383)");}
}

str[0]=pad+0x30;
LCD_Txt(x_ketik,y,str);
x_ketik++;
delay_ms(300);
//LCD_TxtF(20,5,"[Ent]");
}
}
else if (pad==10) //
COR_DELETE ke Kiri
{
if ((x_ketik-15)>0)
{ x_ketik--;
bil=(bil/10); stop=2;

LCD_TxtF(x_ketik,y," ");
//if(xx==1||yy==1)
//{LCD_TxtF(20,5,"(0-32767)");}
delay_ms(300);
}
}

else if( ((pad==15)&& (xx==1||yy==1) &&


(aa==1||bb==1) &&(stop!=1)) )
{
//Dflanger=1;
putchar(start); delay_ms(200); //
putchar(valve); delay_ms(200); // send efek

if(xx==1&&aa==1) // E-3 digit


{
putchar('z'); delay_ms(200);//122 //
putchar(bil & 0xFF); delay_ms(200);
putchar(multiple_P); delay_ms(200);
//LCD_TxtF(19,3,"32");
}

else if(xx==1&&bb==1) // E-5 digit

{ putchar(bil & 0xFF); delay_ms(300);


putchar(bil >> 8); delay_ms(300); //
putchar(multiple_P); delay_ms(300);
//LCD_TxtF(19,3,"32");
}
else if(yy==1&&aa==1) // F-3 digit
{
putchar('z'); delay_ms(500);//122 //
putchar(bil & 0xFF); delay_ms(200);
putchar(multiple_Q); delay_ms(200);
//LCD_TxtF(19,3,"32");
}
else if(yy==1&&bb==1) // F-5 digit

{
putchar(bil & 0xFF); delay_ms(300);
// digit3 :_ _
putchar(bil >> 8); delay_ms(300); //
ptchar(multiple_Q); delay_ms(300);
}

LCD_TxtF(1,8," ");
LCD_TxtF(1,8,"SENDING:");

while(1)
{
for (posisi=9;posisi<30;posisi++)
{
LCD_AttrF(posisi,8,"1");
delay_ms(50);
}break;
}delay_ms(150);

LCD_AttrF(9,8,"0000000000000000000000000");
LCD_TxtF(1,8," ");
LCD_TxtF(6,8,"DATA TELAH TERKIRIM");
delay_ms(1500);
LCD_TxtF(1,8," ");
LCD_TxtF(24,8,"DEL=COR");
LCD_TxtF(1,8,"Back=CAN");

//kirim();
}
else if(pad==14)
{ bil=0; efek_tunggal(); }
}// while punya
}// if (X Y)
}// void punya

// ==================== MODULASI ======================


void efek_tunggal_modulasi()
{
// unsigned str[2]="";
unsigned char x_ketik=15;
unsigned char y=0,hop;

hapus_layar();
delay_ms(150);
LCD_AttrF(1,1," 0000000000000000000");
LCD_TxtF(9,1,"|Efek MODULASI|");
LCD_TxtF(1,3,"Pilih Parameter");
LCD_TxtF(1,5,"[1]Variable =_____"); // batas 0-6 // 30
LCD_TxtF(1,6,"[2]Frekwensi =_____"); // batas 0-60 // 31
LCD_TxtF(24,8,"DEL=COR");
LCD_TxtF(1,8,"Back=CAN");
LCD_AttrF(9,1,"2222222222222222");

while(1)
{
pad=keypad();
if(pad==1)
{
for(i=0; i<=2; i++){
LCD_TxtF(1,5," "); delay_ms(150);

LCD_TxtF(1,5,"[1]Variable =_____(0-6)"); delay_ms(150);}


xx=1; yy=2; y=5; hop=1; break;
}

else if(pad==2)
{
for(i=0; i<=2; i++){
LCD_TxtF(1,6," "); delay_ms(150);

LCD_TxtF(1,6,"[2]Frekwensi =_____(0-60)"); delay_ms(150);}


xx=2; yy=1; y=6; hop=1; break;
}
else if(pad==14)
{ efek_tunggal(); }

if( (xx==1) || (yy==1) ) // Menentukan nilai Parameter: 3 Digit/


{
while(1)
{
pad=keypad();
if( ((pad>=0) && (pad<=9) && (hop==1) && (yy==1||xx==1)) )
{
if ( ((x_ketik-15)<ketik_max) )
{

if(xx==1) // variable
{ bil=(bil*10)+pad;
if(bil<=6)
{ aa=1; }
else if(bil>6)
{stop=1;
LCD_TxtF(20,5,"(>>6)");}
}
else if(yy==1) // frekwensi
{ bil=(bil*10)+pad;
if(bil<=60)
{ aa=1; }
if(bil>60)
{stop=1;
LCD_TxtF(20,6,"(>>60)");}
}

str[0]=pad+0x30;
LCD_Txt(x_ketik,y,str);
x_ketik++;
delay_ms(300);
//LCD_TxtF(20,5,"[Ent]");
}
}
else if (pad==10) //
{
if ((x_ketik-15)>0)
{ x_ketik--;
bil=(bil/10); stop=2;

LCD_TxtF(x_ketik,y," ");
//if(xx==1||yy==1)
//{LCD_TxtF(20,5,"(0-32767)");}
delay_ms(300);
}
}

else if( ((pad==15)&& (xx==1||yy==1) &&


(aa==1||bb==1) &&(stop!=1)) )
{
//Dflanger=1;
putchar(start); delay_ms(200); //
putchar(modulasi); delay_ms(200); //

if(xx==1&&aa==1)
{
putchar('z'); delay_ms(300);//122 //
putchar(bil & 0xFF); delay_ms(200);
putchar(variable); delay_ms(200);
//LCD_TxtF(19,3,"30");

else if(yy==1&&aa==1)
{
putchar('z'); delay_ms(300);//122 //
putchar(bil & 0xFF); delay_ms(200);
putchar(frekwensi_9); delay_ms(200);
//LCD_TxtF(19,3,"31");
}
LCD_TxtF(1,8," ");
LCD_TxtF(1,8,"SENDING:");

while(1)
{
for (posisi=9;posisi<30;posisi++)
{
LCD_AttrF(posisi,8,"1");
delay_ms(50);
}break;
}delay_ms(150);

LCD_AttrF(9,8,"0000000000000000000000000");
LCD_TxtF(1,8," ");
LCD_TxtF(6,8,"DATA TELAH TERKIRIM");
delay_ms(1500);
LCD_TxtF(1,8," ");
LCD_TxtF(24,8,"DEL=COR");
LCD_TxtF(1,8,"Back=CAN");

//kirim();
}
else if(pad==14)
{ bil=0; efek_tunggal(); }

}// while punya


}// if (X Y)
}// void punya

// ================= CHORUS =======================


void efek_tunggal_chorus()
{
// unsigned str[2]="";
unsigned char x_ketik=15;
unsigned char y=0,hop;

hapus_layar();
delay_ms(150);
LCD_AttrF(1,1," 0000000000000000000");
LCD_TxtF(9,1,"|Efek CHORUS|");
LCD_TxtF(1,3,"Pilih Parameter");
LCD_TxtF(1,5,"[1]Attenuator=_____"); // batas 0-9 // 34
LCD_TxtF(1,6,"[2]Buffer =_____"); // batas 0-480 // 35
LCD_TxtF(24,8,"DEL=COR");
LCD_TxtF(1,8,"Back=CAN");
LCD_AttrF(9,1,"2222222222222222");

while(1)
{
pad=keypad();
if(pad==1)
{ for(i=0; i<=2; i++){
LCD_TxtF(1,5," "); delay_ms(150);
LCD_TxtF(1,5,"[1]Attenuator=_____(0-9)");
xx=1; yy=2; y=5; hop=1; break;
}
if(pad==2)
{ for(i=0; i<=2; i++){
LCD_TxtF(1,6," "); delay_ms(150);
LCD_TxtF(1,6,"[2]Buffer =_____(0-480)");
xx=2; yy=1; y=6; hop=1; break;
}
else if(pad==14)
{ efek_tunggal(); }

if( (xx==1) || (yy==1) )


{
while(1)
{
pad=keypad();
if( ((pad>=0) && (pad<=9) && (hop==1) &&
(yy==1||xx==1)) )
{
if ( ((x_ketik-15)<ketik_max) )
{

if(xx==1) //Attenuator
{ bil=(bil*10)+pad;
if(bil<=9)
{ aa=1; bb=2; }
if(bil>9)

{stop=1; LCD_TxtF(20,5,"(>>9)");}
}
else if(yy==1) //Buffer
{
bil=(bil*10)+pad;
if(bil<=255)
{ aa=1; bb=2; }
else if(bil>255 && bil<=480)
{ bb=1; aa=2; }
else if(bil>480)

{stop=1; LCD_TxtF(20,6,"(>>480)");}
}

str[0]=pad+0x30;
LCD_Txt(x_ketik,y,str);
x_ketik++;
delay_ms(300);
//LCD_TxtF(20,5,"[Ent]");
}
}

else if (pad==10) //
{
if ((x_ketik-15)>0)
{ x_ketik--;
bil=(bil/10); stop=2;

LCD_TxtF(x_ketik,y," ");
//if(xx==1||yy==1)
//{LCD_TxtF(20,5,"(0-9)");}
delay_ms(300);
}
}

else if( ((pad==15)&& (xx==1||yy==1) && (aa==1||bb==1)


&&(stop!=1)) )
{
//Dflanger=1;
putchar(start); delay_ms(200); //
putchar(chorus); delay_ms(200); // send efek

if(xx==1&&aa==1) // E-3 digit


{
putchar('z');delay_ms(300); // digitX :122
putchar(bil & 0xFF); delay_ms(200);
putchar(attenuator10); delay_ms(200);
//LCD_TxtF(19,3,"37");
}

else if(yy==1&&aa==1) // F-3 digit


{
putchar('z'); delay_ms(500);
putchar(bil & 0xFF); delay_ms(200);
putchar(buffer10);delay_ms(200);
}
else if(yy==1&&bb==1)
{
putchar(bil & 0xFF);
putchar(bil >> 8);
putchar(buffer10);
}
LCD_TxtF(1,8," ");
LCD_TxtF(1,8,"SENDING:");

while(1)
{
for (posisi=9;posisi<30;posisi++)
{
LCD_AttrF(posisi,8,"1");
delay_ms(50);
}break;
}delay_ms(150);

LCD_AttrF(9,8,"0000000000000000000000000");
LCD_TxtF(1,8," ");
LCD_TxtF(6,8,"DATA TELAH TERKIRIM");
delay_ms(1500);
LCD_TxtF(1,8," ");
LCD_TxtF(24,8,"DEL=COR");
LCD_TxtF(1,8,"Back=CAN");

//kirim();
}
else if(pad==14)
{ bil=0; efek_tunggal(); }
}// while punya
}// if (X Y)
}// void punya

// ========================= FLANGER =================


void efek_tunggal_flanger()
{
unsigned char x_ketik=15;
unsigned char pad, y, hop;
hapus_layar();
delay_ms(150);
LCD_AttrF(1,1," 0000000000000000000");
LCD_TxtF(8,1,"|Efek FLANGER|");
LCD_TxtF(1,3,"Pilih Parameter");
LCD_TxtF(1,5,"[1]Buffers =_____"); // batas 160 // 38
LCD_TxtF(1,6,"[2]Attenuator=_____"); // batas 0-9 // 39
LCD_TxtF(24,8,"DEL=COR");
LCD_TxtF(1,8,"Back=CAN");
LCD_AttrF(8,1,"2222222222222222");

while(1)
{
pad=keypad();
if(pad==1) // 32767
{
] (i=0; i<=2; i++){
LCD_TxtF(1,5," "); delay_ms(150);
LCD_TxtF(1,5,"[1]Buffers =_____(0-160)");
xx=1; yy=2; y=5; hop=1; break;
}
if(pad==2)
{
for(i=0; i<=2; i++){
LCD_TxtF(1,6," "); delay_ms(150);
LCD_TxtF(1,6,"[2]Attenuator=_____(0-9)");
x=2; yy=1; y=6; hop=1; break;
}
else if(pad==14)
{ efek_tunggal(); }

}
if( ((xx==1) || (yy==1)) )
{
while(1)
{
pad=keypad();
if(pad>=0 && pad<=9 && hop==1)
{
if ((x_ketik-15)<ketik_max)
{
if(xx==1)
{ bil=(bil*10)+pad;
if(bil<=160)
{ aa=1; }
else if(bil>160)
{stop=1;
}
else if(yy==1)
{ bil=(bil*10)+pad;
if(bil<=9)
{ aa=1; }
else if(bil>9)
{stop=1;
}
str[0]=pad+0x30;
LCD_Txt(x_ketik,y,str);
x_ketik++;
delay_ms(300);
}
}
else if (pad==10) //
{
if ((x_ketik-15)>0)
{ x_ketik--;
bil=(bil/10);
LCD_TxtF(x_ketik,y," ");
delay_ms(300);
}
}
else if( ((pad==15)&& (xx==1 || yy==1) && (aa==1 ||
bb==1)&&(stop!=1)&&(bil!=0)) )
{
putchar(start); delay_ms(300);
putchar(flanger); delay_ms(300);
if( ((xx==1)||(yy==1))&& (aa==1 || bb==1) )
{
if(xx==1 && aa==1)
{
putchar('z'); delay_ms(200);//0x34
putchar(bil & 0xFF);delay_ms(200);
putchar(buffer11); delay_ms(200);
}

else if(yy==1 && aa==1)


{
putchar('z'); delay_ms(200);
putchar(bil & 0xFF); delay_ms(200);
putchar(attenuator11); delay_ms(200);
}

LCD_TxtF(1,8," ");
LCD_TxtF(1,8,"SENDING:");
while(1)
{
for (posisi=9;posisi<30;posisi++)
{
LCD_AttrF(posisi,8,"1");
delay_ms(50);
}break;
}delay_ms(150); 1

LCD_AttrF(9,8,"0000000000000000000000000");
LCD_TxtF(1,8," ");
LCD_TxtF(6,8,"DATA TELAH TERKIRIM");
LCD_TxtF(1,8," ");
LCD_TxtF(24,8,"DEL=COR");
D_TxtF(1,8,"Back=CAN");
}
}
else if(pad==14)
{ bil=0; efek_tunggal(); }

}
}
}
RIWAYAT HIDUP PENULIS

Nama : Bagus Rijalul Haq


TTL : Jombang, 18 Desember 1986
Alamat : Jl. Anjasmoro 01/01 Mojowarno, Jombang
Telepon : (0321) 494413
Email : rh_sugab@plasa.com

Riwayat Pendidikan:
• SDN Japanan II mojowarno, tahun 1992-1998
• SMPN I Mojojejer, Mojowarno, tahun 1998-2001
• SMAN I Mojoagung, tahun 2001-2004
• Politeknik Elektronika Negeri Surabaya
Institut Teknologi Sepuluh Nopomber Surabaya,
Jurusan Teknik Elektronika, tahun 2004-2007

Penulis telah mengikuti Seminar Proyek Akhir pada


tanggal 24 juli, sebagai salah satu persyaratan untuk
memperoleh gelar Ahli Madya (A.Md.), dan berhasil
meraih Juara 1 dalam ”Final Project Competition 2007”
untuk Jurusan Elektronika.

Anda mungkin juga menyukai