“paralel input output” · laporan praktikum mikrokontroler “paralel input output” disusun...
TRANSCRIPT
-
LAPORAN PRAKTIKUM
MIKROKONTROLER
“Paralel Input Output”
Disusun Oleh
Nama : Yudi Irwanto
NIM : 021500456
Prodi : Elektronika Instrumentasi
Jurusan : Teknofisika Nuklir
SEKOLAH TINGGI TEKNOLOGI NUKLIR
BADAN TENAGA NUKLIR NASIONAL
YOGYAKARTA
2017
-
PARALEL INPUT OUTPUT
I. TUJUAN
1. Praktikan mampu memahami Input output mikrokontroler AVR AT Mega.
2. Praktikan mampu memahami Input output AVR AT Mega.
3. Praktikan mampu membuata program dalam bahasa C untuk input output
Port mikrokontroler dan penerapannya.
II. PERALATAN PRAKTIKUM
1. K-125R USB AVR Programmer
2. Minimum System AVR
3. BASCOM AVR sebagai Compiler.
III. DASAR TEORI
Atmel AT Mega8535/16/32 dilengkapi dengan empat buah 8-bit input output (I/O)
digital multiguna yaitu PORTA, PORTB, PORTC, dan PORTD. Semua port ini juga
memiliki fungsi alternatif yang akan dijelaskan kemudian. Pada bab ini akan dibahas
mengenai fungsi dasar port I/O digital. Selanjutnya pada subbab berikut akan dibahas
mengenai penggunaan port I/O dalam aplikasi led, seven segmen, keypad, dan LCD.
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 5.1 merupakan gambaran register-register yang dimiliki setiap port.
-
Gambar 1. Register-register 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.
IV. LANGKAH PERCOBAAN
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.
-
V. Listing Program
Program 1
Program 2
-
Program 3
Program 4
-
Program 5
-
VI. Pembahasan
Percobaan 1:
Dari program yang telah disajikan, dapat dianalisa bahwa pada Bagian awal
program #include digunakan untuk memberitahu kepada compiler bahwa
program yang kita buat menggunakan Atmega 8535. Selanjutnya pada program utama,
disetting DDRD sebelum PortD digunakan. Dengan menuliskan program DDRD=0xFF,
maka portD difungsikan sebagai output. DDR bernilai FF(hexa). Apabila diubah menjadi
bilangan biner, maka menjadi 1111 1111. Bit-bit DDRD saat berisi 1, maka pin-pin pada
port D difungsikan sebagai output.
Selanjutnya, program PORTD=0xFF; digunakan untuk memberikan masukan
HIGH pada kondisi awal setiap Port di D. Karena Kit ini terdapat common catoda, maka
apabila diberi masukan HIGH setiap portnya maka output tidak akan mengeluarkan
keluaran. PortD hanya mengeluarkan keluaran apabila diberi masukan LOW.
Pernyataan While digunakan untuk loop. Pada program selanjutnya berisikan nilai
masukan untuk PortD dari pin 0 hingga pin 7. Dimana, akan dihasilkan keluaran jika
masukan untuk pin D adalah 0 (Low), sedangkan jika masukan untuk pin D adalah 1
(HIGH) maka tidak akan dihasilkan keluaran. Hal ini terbukti dengan hasil pada
percobaan 1.
Percobaan 2:
#include digunakan untuk memberitahu kepada compiler bahwa
program yang kita buat menggunakan Atmega 8535. Selanjutnya pada program utama
dideklarasikan A menggunakan tipe data unsigned char . Artinya, A memiliki jangkauan
nilai 0 hingga 255. Kemudian, sebelum Port A digunakan, maka DDRA harus disetting
terlebih dahulu. DDRA bernilai 00(hexa). Apabila diubah menjadi bilangan biner, maka
menjadi 0000 0000. Dimana, bit-bit DDRA saat berisi 0, maka pin-pin pada port A
difungsikan sebagai input.
Pada percobaan ini, selanjutnya ditulis program PORTA=0XFF; yang apabila
dijadikan bilangan biner menjadi 1111 1111. Sehingga dapat ditetapkan bahwa Port A
menggunakan Pull-Up karena bernilai 1 untuk setiap Pin pada PortA. Pull-Up hanya akan
menghasilkan keluaran jika terjadi perubahan nilai 1 ke 0.
-
DDRD bernialai FF(hexa), maka pin-pin pada port D difungsikan sebagai output.
Selanjutnya, program PORTD=0xFF; digunakan untuk memberikan masukan HIGH
pada kondisi awal setiap Port di D. Karena Kit ini terdapat common catoda, maka apabila
diberi masukan HIGH setiap portnya maka output tidak akan mengeluarkan keluaran.
PortD hanya mengeluarkan keluaran apabila diberi masukan LOW.
Pada program utama, dituliskan A=PINA; yang artinya memasukan program
PINA ke A. Seanjutnya dituliskan PORTD=A; yang artinya memasukkan program pada
A ke PORTD. Shingga maksud dari program ini adalah keluaran tergantung dari
masukannya. Masukannya sendiri berdasarkan pada tombol. Karena Pull-Up, maka hanya
aktif ketika terjadi perubahan dari nilai 1 ke 0 (tombol ditekan, lalu dilepas). Saat terjadi
perubahan nilai dari 1 ke 0 inilah, LED akan menyala. Mengindikasikan adanya keluaran
pada pin-pin di PORTD. Hal ini sesuai dengan prakteknya saat praktikum.
Percobaan 3:
Pada percobaan 3, yakni program PortD sebagai keluaran, dengan fungsi
jeda/delay. #include digunakan untuk memberitahu kepada compiler
bahwa program yang kita buat menggunakan Atmega 8535. Kemudian juga dituliskan
#include sebagai library untuk program delay.
Pada pada program utama dideklarasikan A menggunakan tipe data unsigned int .
Artinya, A memiliki jangkauan nilai 0 hingga 65.353. Kemudian, sebelum Port D
digunakan, maka DDRD harus disetting terlebih dahulu. DDRD bernialai FF(hexa), maka
pin-pin pada port D difungsikan sebagai OUTPUT.
Program PORTD=0x00; digunakan untuk memberikan masukan/nilai awal LOW
pada kondisi awal setiap Port di D. Selanjutnya program A=1; ditulis untuk memasukkan
nilai 1 ke A. pernyataan While digunakan untuk pengulangan atau loop-ing.
Kemudian ditulis program PORTD=~A; ditulis untuk menghasilkan keluaran dari
invers A. maksdunya adalah nilai awal adalah 0000 0000, kemudian menjadi 0000 0001.
Namun karena diinvers, maka keluarannya dibalik dari MSB ke LSB, menjadi 1000 0000.
Sehingga LED yang menyala adalah LED paling kiri. Dan kondisi seperti ini
bertahan/tertunda selama 250 ms. Setelah 250ms, maka nilai 1 akan dikalikan dengan
nilai 2(desimal) dan diinverskan kembali menjadi 0100 0000. Karena nilai A 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. 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 karena nilai
bitnya sudah >128. Hal ini sudah dibuktikan pada saat praktikum, dan sesuai.
Percobaan 4:
Percobaan 4 adalah percobaan geser bit. #include digunakan untuk
memberitahu kepada compiler bahwa program yang kita buat menggunakan Atmega
8535. Kemudian juga dituliskan #include sebagai library untuk program delay.
Selanjutnya dideklarasikan Val dan n menggunakan tipe data unsigned char. Artinya, Val
dan n memiliki jangkauan nilai 0 hingga 255.
Pada program utama, dimasukan nilai 2 ke n sebagai nilai awalan. Lalu, sebelum
Port D digunakan, maka DDRD harus disetting terlebih dahulu. DDRD bernilai FF(hexa),
maka pin-pin pada port D difungsikan sebagai output.
Program val=1
-
Percobaan 5:
Program 5 adalah program untuk membaca input port dan dikeluarkan pada port
yang lain. #include digunakan untuk memberitahu kepada compiler bahwa
program yang kita buat menggunakan Atmega 8535. Kemudian juga dituliskan
#include sebagai library untuk program delay.
Karena kita memiliki 5 buah data dengan nilai 129, 66, 36, 24, 255 dengan tipe
data yang sama (unsigned int), maka digunakan array untuk mengefektifkan program.
Yakni menyimpan 5 data tersebut dengan tipe data yang sama ke variabel D1.
Pada program awal, dideklarasikan variabel n dan a memiliki tipe data unsigned
char. Artinya, variabel n dan a memiliki jangkauan nilai 0 hingga 255. Selanjutnya
disetting DDRD bernilai FF (hexa) sehingga portD digunakan sebagai output. Lalu,
PortD diberi masukan awal 1, sehingga portD hanya akan menghasilkan keluaran jika
terdapat masukan 0.
Kemudian program DDRB=0x00; digunakan untuk pemilihan fungsi port. Bit-bit
DDRB berisi 0, maka pin-pin pada port B difungsikan sebagai input. Selanjutnya
PORTB=0XFF; artinya Port B menggunakan Pull-Up karena bernilai 1 untuk setiap Pin
pada PortB.
Pernyataan While untuk perulangan atau looping. Pada proses perulangan ini, jika
pin B.0 diberi masukan 0 dengan kondisi pull-up (tombol ditekan, lalu dilepas) maka
variabel a akan bertambah 1, yang menyebabkan pertambahan juga pada variabel n.
karena variabel n bertambah menjadi [1], maka keluaran pada portD akan bernilai 129
(hexa) atau 1000 0001. Artinya LED yang nyala hanyalah led nomor 1 dari kiri dan kanan
bersamaan selama 500ms.
Selanjutnya, akan terjadi looping variabel n jika variabel n belum bernilai 6. Saat
variabel n bernilai 2, maka keluarannya adalah 66(hexa) atau 0100 0010 (biner) selama
500ms. Begitu juga saat variabel n bernilai 3, maka keluarannya menjadi 36(hexa) atau
0010 0100 (biner) selama 500ms. Saat variabel n bernilai 4, maka keluarannya adalah
24(hexa) atau 0001 1000 (biner) selama 500ms. Saat variabel n bernilai 5, maka
keluarannya adalah 255(hexa), sehingga semua LED menyala selama 500ms. Intruksi ini
-
akan mengalami pengulangan sebanyak 2x dikarenakan variabel a disetting akan terus
bertambah nilainya sampai nilai variabel a
-
Lampiran:
Program 1:
Program 2:
-
Program 3:
Program 4:
-
Program 5: