Anda di halaman 1dari 16

LAPORAN PRAKTIKUM

MIKROKONTROLLER DAN PLC

“PARALEL INPUT OUTPUT (PIO)“


Disusun untuk memenuhi tugas mata kuliah Praktikum Mikrokontroller & PLC
yang diampu oleh : Dr. Muhtadan, M. Eng

Oleh :
Lukman Mubarak
021700013

PRODI ELEKTRONIKA INSTRUMETASI


JURUSAN TEKNOFISIKA NUKLIR
SEKOLAH TINGGI TEKNOLOGI NUKLIR
BADAN TENAGA NUKLIR NASIONAL
YOGYAKARTA
2019
I. PENDAHULUAN

IC modul Atmel AT Mega8535/16/32 dilengkapi dengan empat buah input output


(I/O) digital 8-bit multiguna yaitu PORTA, PORTB, PORTC, dan PORTD. Praktikum ini
akan dibahas mengenai fungsi dasar port I/O digital beserta penggunaan port I/O dalam
penerapan output berupa LED.

Register Port
Setiap port dalam AT Mega8535 memiliki tiga buah register yang berkaitan yaitu :
1. Data Register (PORTx), digunakan untuk menulis data keluaran port.
2. Data Direction Register (DDRx), digunakan untuk menentukan pin port spesifik sebagai
output (bernilai 1) atau sebagai input (bernilai 0).
3. Input Pin Address (PINx) digunakan untuk membaca data input dari port.

Gambar 1. Register-register yang dimiliki setiap port

Port mikrokontroler AVR dapat dikonfigurasi sebagai input atau output, dengan
cara mengubah isi I/O register DDRx. Bit-bit pada DDRx menentukan arah pin. Setiap pin
pada AVR juga memiliki internal pull-up, untuk mengaktifkannya dilakukan dengan
memberikan nilai 0xFF pada register PORTx. Untuk membaca data pada salah satu port,
dapat digunakan fungsi PINx, sedangkan membaca data per pin pada suatu port maka
ditentukan bit pin-nya yaitu PINx.bit. [1]
Pengenalan CV AVR
Code Vision AVR, selanjutnya disebut CVAVR adalah aplikasi pemrogram
Mikrokontroler AVR dengan bahasa C. Bahasa C merupakan standar bahasa pemrograman
yang cukup akrab di telinga para programmer. Bahasa C adalah bahasa pemrograman
komputer multi-fungsi yang dibuat pada tahun 1972 oleh Dennis Ritchie di Bell Telephone
Laboratories untuk digunakan dengan sistem operasi UNIX. Bahasa C merupakan bahasa
pemrograman yang Sangat populer sehingga sedikit sekali arsitektur komputer
tanpakompiler bahasa C didalamnya. Bahasa C telah mempengaruhi banyak bahasa
pemrogramanyang popular. Salah satunya C++, dimana bahasa tersebut adalah permulaan
dari pengembangan Bahasa C.

Struktur Bahasa C
Instruksi-instruksi bahasa pemrograman yang ada pada bahasa C tidak semuanya
digunakan dalam pemrograman mikrokontroler. Struktur dan urutan penulisan program
hampir sama untuk keduanya. Struktur bahasa C memiliki kepala program, dan tubuh
program, sedangkan tubuh program bisa terdiri dari induk program dan anak program.

Gambar 1.2. Struktur sederhana program bahasa C

Penggunaan struktur penulisan bahasa pemrograman bahasa C dapat terusun dari


sebuah tubuh program yang dapat terdiri dari sebuah induk program dan satu atau lebih
anak program. Anak program memiliki fungsi untuk mengerjakan satu blok program yang
sering digunakan secara berulang-ulang. Anak program akan diakses oleh induk program
sesuai dengan kebutuhan akan sub bagian program tersebut. Sedangkan kepala program
berfungsi untuk menyertakan file acuan/library guna mengolah (Compile/Build) program
yang telah dibuat.
Gambar 1.3. Struktur bahasa C dalam program CVAVR

Deklarasi sebuah variable dapat digolongkan menjadi dua, yaitu local variable dan
global variable. Local variable dipakai dan hanya dapat diakses pada sub program tempat
mendeklarasikannya, sedangkan global variable dipakai dan dapat diakses seluruh bagian
program. Inisialisasi PORT digunakan untuk memfungsikan PORT yang dituju sebagai
masukan/keluaran serta nilai defaultnya. Sedangkan bagian sub rutin adalah blok program
yang akan selalu dikerjakan terus-menerus oleh mikroprosesor selama mikrokontroler
hidup.
Beberapa Instruksi-instruksi dalam bahasa C yang sering digunakan dapat ditulis sebagai
berikut :
II. PELAKSANAAN
1. Hubungkan port PIO pada AVR ATMega dengan modul penampil led.
2. Hubungkan port PIO yang lain pada AVR ATMega dengan modul switch.
3. Buatlah program-program berikut, kemudian download kedalam chip AVR.
4. Ubahlah beberapa variable pada program dengan nilai yang bervariasi, kemudian amati
hasilnya dan simpulkan dalam pembahasan.
5. Buatlah program sesuai tugas yang diberikan pada saat praktikum.
III. HASIL PRAKTIKUM
3.1. Percobaan I, Variasi Input Dan Pengamatan Output Program.
 Program

Gambar 3.1. Program I, Variasi input dan pengamatan output program

Untuk percobaan pertama praktikan mempelajari bagaimana memberikan


variasi data input pada salah satu port Atmel AT Mega8535 serta melihat output dari
variasi input tersebut melalui media LED yang ada pada Modul AT Mega8535.
Adapun software yang digunakan pada PC adalah program CVAVR yang mana
dihubungkan dengan Modul AT Mega8535 melalui port COM3 yang ada pada
konfigurasi “device manager”.
Adapun program yang dipakai pada percobaan pertama ini adalah seperti
yang ada pada gambar 3.1. dimana pada kepala program dituliskan #include
<mega8535.h> , dengan maksud untuk menginisialisai modul AT Mega8535 yang
digunakan. Kemudian, pada tubuh program dituliskan DDRD=0xFF; dengan
maksud PORTD diberi masukan 0xFF sehingga PORTD aktif sebagai output
(diaktifkan sebagai output). Lalu dilanjutkan dengan program PORTD=0xFF;
memberikan nilai awal low pada PORTD sekaligus mengaktifkannya dengan sistem
Common Anoda, yaitu output akan aktif bila diberi masukan sama dengan nol (0).
Kedua program tersebut berguna untuk menginisialisasi PORTD.
Selanjutnya, masuk ke program subrutin yang berisi instruksi input yang akan
dimasukkan pada PORTD. Input dari PORTD 0 sampai 7 (8-bit) berturut turut : 0 1
1 1 dan 0 1 1 1. Dengan menghubungkan PORTD ke Port LED yang ada pada modul
dan kemudian program di-flash ke chip programmer didapatkan hasil percobaan
seperti pada gambar 3.2. menunjukkan nyala lampu LED hanya pada LED bit ke 0
dan bit ke 4 karena jika dilihat pada program yang sebelumnya dibuat (Gambar 3.1.)
diketahui bahwa memang nilai input dari PORTD0 dan PORTD4 dibuat nol (0).
Hasil tersebut telah sesuai dengan program yang diinstruksikan.
Gambar 3.2. Hasil program percobaan 1 (hanya LED Port D0 dan Port D4 yang
menyala).

3.2. Percobaan II, Penggunaan Switch pada Modul AT Mega8535


 Program

Gambar 3.3. Program II, Penggunaan Switch pada Modul AT Mega8535

Kali ini pada percobaan kedua, praktikan mencoba untuk menggunakan 2 port
yaitu PORTA dan PORTD. Dimana PORTA dihubungkan ke switch 8-bit,
sedangkan PORTD tetap sebagai output yang dihubungkan ke LED. Seperti
sebelumnya, pada kepala program tetap diawali dengan inisialisasi dengan program
#include <mega8535.h>.
Pada tubuh program dilakukan inisialisasi PORTA sebagai input dengan
memasukkan data 0X00. Program PORTA=0XFF; digunakan untuk mengambil
nilai dari switch dan disalin sebagai keluaran pada port D (pull up).
Inisialisasi PORTD sebagai output dengan memasukkan data 0xFF. Program
PORTD=0XFF ; memberikan nilai awal high pada PORTD. Ketika switch bernilai
1 (pada kondisi awal) maka LED akan bernilai 0 atau mati. Sebaliknya, jika switch
ditekan (bernilai 0), maka LED akan bernilai 1 atau hidup.
Adapun seperti gambar 3.4. hasil percobaan setelah program dimasukkan ke
Modul AT Mega8535, didapatkan hasil bahwa setiap praktikan menekan switch,
maka LED akan hidup sesuai pada switch bit keberapa yang ditekan.

Gambar 3.5. Hasil program percobaan 2 (hanya LED yang switch-nya ditekan
saja yang menyala).

3.3. Percobann III


 Program, Membuat Pergeseran Nyala Lampu LED

Gambar 3.6. Program III, Membuat Pergeseran Nyala Lampu LED

Pada percobaan ketiga praktikan membuat program CV AVR di mana


nantinya akan memunculkan nyala lampu LED yang berurutan dari bit ke-0 sampai
ke-8 secara otomatis (bergeser ke bit yang lebih tinggi satu-persatu), sehingga
ketika program ini diamati hasilnya hampir mirip dengan sebuah program counter
up.
Dapat dijelaskan dari gambar 3.6. mengenai program yang dibuat pada
percobaan ketiga ini bahwa pada kepala program tetap diawali dengan inisialisasi
dengan program #include <mega8535.h>. Selanjutnya, pada tubuh program
dilakukan inisialisasi PORTD sebagai output, dengan memasukkan DDRD=0xFF;
dengan maksud PORTD diberi masukan 0xFF sehingga PORTD aktif sebagai
output (diaktifkan sebagai output). Lalu dilanjutkan dengan program
PORTD=0x00; memberikan nilai awal low (0) pada PORTD. Serta output dari
PORTD dipengaruhi oleh besarnya nilai A.
Keluaran PORTD harus di invers dari nilai A karena keluaran LED tidak
langsung dimasukkan dalam port melainkan memalui variabel A, nilai A pada
program diatas diset=1. Kemudian, program ini menggunakan delay time dengan
nilai 250ms dengan perintah delay_ms(250); dilanjut A=A*2; artinya kondisi nilai
A=1 bertahan/tertunda selama 250 ms. Setelah 250ms, maka nilai 1 akan
dikalikan dengan nilai 2 (decimal = 0000 00102) dan diinverskan kembali menjadi
0100 0000. Karena nilai A setelah diinvers belum > 128 maka kondisi bertahan
/tertunda 250ms, sehingga LED yang menyala adalah nomor 2 dari kiri. Lalu
dikalikan lagi nilai 2 dengan 2 menjadi 4. Dan seterusnya hingga dikalikan
kembali nilai 64 dengan 2 menjadi 128 (1000 0002). Maka diinverskan menjadi
0000 0001 sehingga LED yang menyala adalah nomor 1 dari kanan. Waktu delay
disini berfungsi untuk mengatur lamanya LED menyala. Setelah itu program
kembali lagi dari A=1 apabila nilai bitnya sudah >128.
Di dalam percobaan ini lampu LED yang meyala adalah apabila bernilai nol
(0), karena program ini menggunakan prinsip Common Anoda. Hasil yang
didapatkan ialah, nyala LED berurutan pada LED bit ke-0, lbit ke-1 begitu
seterusnya hingga bit ke-8 (nilai A=128) dan kembali lagi berulang nyalanya dari
LED bit ke-0.

Gambar 3.7. Hasil program percobaan 3 (LED menyala berurutan dari bit ke-0
menuju bit ke -7 dan kembali mengulang).
3.4. Percobaan IV, Membuat Pergeseran Nyala Lampu LED Dengan Lompatan 2 bit
 Program

Gambar 3.8. Program IV, Membuat Pergeseran Nyala Lampu LED dengan
Lompatan 2 bit
Untuk percobaan keempat kali ini praktikan menetapkan PORTD sebagai
output dengan nilai val = 1 dengan program val=1<<7; artinya output akhir (bit ke
7) diisi nilai=1, selain itu 0 pada kondisi awal. Sehingga data pada output dari bit
ke-7 sampai ke-0 ialah : 1000 0000. Selanjutya, data itu diinvers menjadi 0111
1111. LED akan nyala jika masukannya nol (0) karena Common Anoda sehingga
nantinya LED akan menyala dimulai dari bit ke-7 terlebih dahulu. Lalu, praktikan
mengatur arah pergeseran ‘n’ dengan pergeseram 2 bit ke kanan dengan perintah
val>>=n; (nilai bit menurun, 7-6-5,dst sampai bit ke-0). Program tersebut
dijalankan dengan delay waktu selama 200ms. Kemudian, setelah program tiba
pada bit ke-0, makan program otomatis mengeset bit ke-7 bernilai satu lagi.
Sehingga program tersebut berulang dari awal, dengan perintah val=1<<7;.
Didapatkan hasil urutan nyala led sebagai berikut (nyala LED dari bit ke-7
sampai bit ke-0):
LED bit 0 LED bit 1 LED bit 2 LED bit 3 LED bit 4 LED bit 5 LED bit 6 LED bit 7

ON ON ON ON
begitu seterusnya, program berulang-ulang dengan LED yang menyala hanya pada
bit ke-7, 5,3,dan 1 serta berurutan dari bit yang tinggi ke rendah.
Gambar 3.9. Hasil program percobaan 4 (LED menyala berurutan dari bit ke-7
menuju bit ke -0 dan kembali mengulang dengan lompatan 2 bit nyalanya).

C.5. Percobaan V, Variasi Pergeseran Nyala Lampu LED


 Program

Gambar 3.10. Program V, Variasi Nyala Lampu LED


Sama seperti percobaan sebelumnya, program kelima ini juga menggunakan
PORTD sebagai output, dengan nilai awal high (1). Kemudian dalam percobaan ini
ada menggunakan PORTB sebagai input, namun dengan dua kondisi yang berbeda.
Dimana PINB 0, digunakan untuk running LED yang gambarannya nanti LED akan
menyala dari masing-masing LED bit atas dan bit bawah lalu menuju ke tengah
sebelum akhirnya mati. Sedangkan kondisi kedua yakni PINB 1 dingunakan
sebagai pengatur flip flop (nyala bersama). Adapun perangkaian modulnya,
PORTB ini disambungkan dengan switch dan PORTD disambung dengan LED.
PORTB 0, menjalakan running LED sebanyak 3 kali dimulai dari bit ke nol,
bertambah hingga bit ketiga saja dengan program (a=0;a<3;a++). Pada saat
program dijalankan pada PORTB 0 dimulai dari n=0, maka dimulai biner 1000
0001 (129) kemudian nilai biner tersebut di inverskan menjadi 0111 1110
sehingga nyala LED dimulai dari bit ke-7 dan bit ke-0 lalu didelay selama 500 ms
sehingga memanggil n selanjutnya sampai n=4.
No n Biner yang di panggil Biner invers
1 0 1000 0001 (129) 0111 1110
2 1 0100 0010 (66) 1011 1101
3 2 0010 0100 (36) 1101 1011
4 3 0001 1000 (24) 1110 0111
5 4 1111 1111 (255) 0000 0000

Kemudian untuk PORTB 1 di sini akan menjalankan flip flop sebanyak 2 kali
pengulangan. Flip flop ini menyala secara serentak dan mati secara serentak juga.
Ketika PORTB 1 ditekan switchnya maka program akan berjalan dan PORTD
bernilai 0000 0000 maka LED akan menyala semua dan didelay selama 500 ms.
Jika mati port D akan bernilai 1111 1111.
No Desimal Biner
1 255 1111 1111
2 0 0000 0000
3 255 1111 1111
4 0 0000 0000

Hasil yang didapatkan ketika menekan switch bit-0 yang terhubung pada
PORTB 0 ialah nyala lampu LED yang berjalan dari kanan dan kiri kemudian
bertemu dititik tengah.
LED bit 0 LED bit 1 LED bit 2 LED bit 3 LED bit 4 LED bit 5 LED bit 6 LED bit 7

ON ON
LED bit 0 LED bit 1 LED bit 2 LED bit 3 LED bit 4 LED bit 5 LED bit 6 LED bit 7

ON ON
LED bit 0 LED bit 1 LED bit 2 LED bit 3 LED bit 4 LED bit 5 LED bit 6 LED bit 7

ON ON
LED bit 0 LED bit 1 LED bit 2 LED bit 3 LED bit 4 LED bit 5 LED bit 6 LED bit 7

ON ON
Gambar 3.11. Hasil program percobaan 5 (pada saat PORTB 0 ditekan switch-
nya maka LED akan menyala dari masing-masing LED bit atas dan bit bawah lalu
menuju ke tengah sebelum akhirnya mati).
Sedangkan hasil yang didapat ketika menekan switch bit-2 yang terhubung
dengan PORTB 1 ialah nyala LED di semua bit (dari 0-7) serentak sebanyak 2x
loop.
LED bit 0 LED bit 1 LED bit 2 LED bit 3 LED bit 4 LED bit 5 LED bit 6 LED bit 7

ON ON ON ON ON ON ON ON

Gambar 3.12. Hasil program percobaan 5 (pada saat PORTB 1 ditekan switch-
nya maka LED akan menyala bersamaan dua kali).
IV. KESIMPULAN
Dari hasil beberapa percobaan pada Praktikum Mikrokontroller dan PLC “Paralel Input
Output (PIO)“ yang telah dilaksanakan dapat disimpulkan beberapa hal sebagai berikut :
1. Pada Modul AT Mega8535 memiliki 4 PORT (PORT A, PORT B, PORT C, PORT D)
yang sama sama dapat difungsikan sebagai input / output dengan memberi instruksi
0xFF (sebagai output) atau 0x00 (sebagai input).
2. Program C pada CVAVR minimal terdiri dari kepala program yang berisi inisialisasi
port I/O dan tubuh program yang berupa main program yang akan dieksekusi berurutan.
3. Main program yang dapat dijalankan pada program CVAVR diantaranya adalah :
program counter, program loop, delay time, dengan penggunaan program if, while,dll.
4. Dari penggunaan fungsi Paralel Input Output yang dipercobakan, praktikan telah
mampu membuat dan mensimulasikan program variasi input dan pengamatan output,
program penggunaan Switch pada Modul AT Mega8535, program pergeseran nyala
lampu LED, program pergeseran nyala lampu LED dengan lompatan 2 bit serta
program untuk membuat variasi nyala lampu LED flip-flop.

V. DAFTAR PUSTAKA
[1]Abidin, Zainal.2015. Modul Pengenalan Dasar Cvavr & Isis Proteus. Bangkalan
[2]Muhtadan. 2018. Modul1-PIO AVR cvavr. Yogyakarta :STTN-BATAN
[3]staffnew.uny.ac.id/upload/.../praktik-pemrograman-mikrokontroller-1-3.pdf. Panduan
01 Mikrokontroller : Pengenalan Bahasan C dan Software CVAVR.

Yogyakarta, 7 Oktober 2019


Praktikan

Lukman Mubarak

Anda mungkin juga menyukai