Laporan Praktikum - Laboratorium Dasar Teknik Elektro – STEI ITB 1
MODUL 01 MODUL I/O DASAR
Tsaqif Alfatan Nugraha (13214036) Asisten: Adinda Rana T.
Tanggal Percobaan: 07/02/2017 EL3124-Praktikum Sistem Mikroprosessor
Laboratorium Dasar Teknik Elektro - Sekolah Teknik Elektro dan Informatika ITB
Abstrak
Praktikum modul 1 praktikum sistem mikroprosesor akan
membahas lebih dalam mengenai komponen input output
dasar pada board ATMega 8535. Praktikan akan
mempelajari bagaimana cara port untuk dijadikan sebagai
input ataupun output. Aplikasi input output akan dibuat
dengan menggunakan software WinAVR dalam bahasa C.
Selain itu praktikum juga bertujuan untuk memahami
pengesetan Ude yang berkaitan dengan penggunakan besar
dan jenis kristal.
Kata kunci: ATMega 8535, Input, Output, Fuse,
WinAVR
1. P
ENDAHULUANPraktikum terdiri dari beberapa sub percobaan. Percobaan pertama berkaitan dengan penggunaan Port A sebagai output. Program akan dibuat sedemikian rupa sehingga menghasilkan konfigurasi output port A yang telah ditentukan. Kemudian port A akan dihubungkan ke LED sebagai representasi biner dari port A.
Kedua, praktikan akan mengamati penggunaan delay pada AVR gcc. Delay bertujuan untuk mengatur seberapa cepat lampu LED hidup dan mati. Sama seperti percobaan sebelumnya, port A akan digunakan sebagai output. Nilai biner port A akan berubah dari kondisi satu ke kondisi dua dalam selang delay yang telah ditentukan. Kemudian representasi biner bisa dilihat pada nyala dan matinya LED.
Ketiga, praktikan akan mulai menggunakan sebuah port sebagai input. Port D akan digunakan sebagai input di mana port D akan dihubungkan langsung dengan toggle/switch. Konfigurasi dari toggle yang nyala atau mati akan merepresentasikan biner dari port D. Port A akan juga digunakan kembali sebagai output dan dihubungkan ke LED untuk mengamati keluaran program. Program akan diatur sedemikian rupa sehingga untuk konfigurasi input tertentu akan menghasilkan konfigurasi output yang sesuai dengan apa yang telah ditentukan.
2. S
TUDIP
USTAKA2.1
S
KEMATIKI/O
Semua register dan referensi bit pada bagian ini ditulis dalam bentuk umum. Huruf ”x” merepresentasikan nomor untuk port dan huruf ”n” merepresentasikan nomor bit nya. Bagaimanapun, ketika menggunakan register atau bit yang ditetapkan di program, maka bentuk tepatnya harus digunakan. Sebagai contoh, PORTB3 untuk nomor 3 di Port B, ditulis secara general sebagai PORTxn. I/O Registers dan lokasi bit secara fisik terdaftar di ”Register Description for I/O-Ports” di halaman 66.
Tiga lokasi alamat memori I/O dialokasikan untuk tiap port, satu untuk tiap Data Register – PORTx, Data Direction Register – DDRx, dan Port Input Pins – PINx. I/O Port Input Pins adalah read only, sedangkan Data Register dan Data Direction Register adalah read/write. Sebagai tambahan, bit Pull-up Disable – PUD pada SFIOR menonaktifkan fungsi pull-up untuk semua pin di semua port saat diaktifkan.
Laporan Praktikum - Laboratorium Dasar Teknik Elektro – STEI ITB 2
2.3
PUD
PADASFIOR
Rekomendasi untuk inisialisasi pada pin input Jika ada pin yang tidak terpakai, direkomendasikan agar tiap pin ini terdefinisikan. Walaupun kebanyakan input digital dinonaktifkan dalam mode deep sleep seperti yang dideskripsikan diatas, input yang mengambang harus dihindari untuk mengurangi konsumsi arus pada semua mode lain di mana input digital diaktifkan (Reset, Active mode, and Idle mode).
Metode paling sederhana untuk mendefinisikan suatu pin yang tidak digunakan adalah untuk mengaktifkan pull-up internal pada kasus ini, pull-up akan dinonaktifkan saat reset. Jika konsumsi daya rendah ketika reset itu penting, maka disarankan untuk menggunakan pull-up atau pull-down eksternal. Menghubungkan pin-pin yang tidak digunakan ke Vcc atau GND langsung tidak disarankan karena dapat mengakibatkan kelebihan arus jika pin secara tidak sengaja dikonfigurasikan sebagai output.
2.4
D
ESKRIPSI REGISTER(
UNTUKP
ORTA)
3. M
ETODOLOGI3.1 L
ANGKAH UMUMP
RAKTIKUM3.2 P
ERCOBAAN1.A
P
ORTA
SEBAGAI OUTPUT3.3 P
ERCOBAAN1.B
F
ASILITASD
ELAY PADAAVR
GCC
3.4 P
ERCOBAAN1.C
P
ORTA
SEBAGAI OUTPUT DAN PORTD
SEBAGAI INPUTPeng-install-an WinAVR , Driver
give IO, dan Driver USBasp
Membuat New Project pada WinAVR dan Add program untuk
masing-masing percobaan Membuat Makefile dengan pengesetan : MCU :ATMega8535 F_CPU : 7372800 Hz AVRDUDE Programmer : USBasp Target : disesuaikan untuk tiap percobaan Lakukan pengesetan
fuse sesuai pengesetan yang ada
di modul. Hubungkan port input ke toggle port
ouptut ke LED. Hubungkan board ke komputer Buat program seperti yang tertera di modul. Atur target makefile sesuai nama file percobaan
Jalankan program dan amati keluaran pada
LED. Analisa kode program dan catat hasil
pada BCL
Ubah kode program sehingga keluaran LED sesuai dengan representasi biner dari
kelompok praktikan.
Buat program seperti yang tertera di modul.
Atur target makefile sesuai nama file
percobaan
Jalankan program dan amati keluaran pada
LED. Analisa kode program dan catat hasil
pada BCL
Modifikasi kode program sehingga keluaran LED secara
bergantian sesuai dengan representasi biner dari tiga angka terakhir. Catat hasil pada
BCL Untuk tugas 1.B.3 buat
kembari program seperti yang tertera di
modul. Jalankan program dan amati keluaran pada LED. Analisa kode program
dan catat hasil pada BCL
Modifikasi kode program 1.B.3 sehingga
keluaran LED nyala dari kiri ke kanan kemudian kembali lagi
ke kiri.Catat hasil keluaran pada BCL
Buat program seperti yang tertera di modul.
Atur target makefile sesuai nama file
percobaan
Jalankan program dan amati keluaran pada
LED. Analisa kode program dan catat hasil
Laporan Praktikum - Laboratorium Dasar Teknik Elektro – STEI ITB 3
4. H
ASIL DANA
NALISIS4.1
T
UGAS1.A
P
ORTA
SEBGAI OUTPUT Tugas 1.A.1Tugas 1.A.1 akan menggunakan Port A sebagai output dari program yang sudah dibuat pada WinAVR. Flow chart dari program dapat dilihat sebagai berikut.
Port A akan di set sebagai input. Oleh karena itu kita harus mengatur register DDR pada port tersebut. Nilai DDRA harus diisi nilai untuk seluruh bitnya, artinya diisi 0xFF. Pengisian nilai ini pada register DDR sebuah port maka akan menjadikan port tersebut sebagai input. Namun, jika nilai register DDR diset nol atau 0x00 maka akan menjadikan port tersebut sebagai input. Nilai representasi biner dari port A akan merepresentasikan keluaran pada LED. Oleh karena itu kita harus terlebih dahulu mengeset nilai masing-masing bit pada port A. Pengesetan bit bisa dilakukan dengan operasi bitwise OR. Jika port A diset sebagai berikut
PORTA = (1<<PA6)|(1<<PA4)|(1<<PA2)|(1<<PA0) Ini menunjukkan bahwa untuk bit ke-6, 4, 2, dan bit ke-0 dari port A bernilai satu sementara bit lainnya bernilai nol. Pengesetan bit juga dapat dilakukan dengan cara memberi nilai untuk
semua bit port A secara langsung. Misalnya sebagai berikut.
PORTA = 0b01010101
Pengesetan cara ini menunjukkan hal serupa dengan pengesetan sebelumnya di mana nilai bit ke-6, 4, 2, dan bit ke-0 dari port A bernilai satu sementara bit lainnya bernilai nol.
Selanjutnya, setelah terhubung dengan board ATMega 8535 maka akan dihasilkan konfigurasi output pada LED sebagai berikut.
LED 7 6 5 4 3 2 1 0 Kotak hitam menunjukkan LED mati dan kotak merah menunjukkan LED nyala.
Hasil konfigurasi LED sudah sesuai dengan perintah pada program di mana LED yang hidup hanya LED nomor ke 6, 4, 2, dan nol.
Tugas 1.A.2
Flow chart program dapat dilihat sebagai berikut.
Sama seperti sebelumnya, untuk mengeset port A sebagai output maka register DDR port A akan diset bernilai satu atau 0xFF. Selanjutnya port A akan diset bernilai 0b00000110. Representasi biner ini menunjukkan angka 6 di mana merupakan nomor kelompok praktikan. Selanjutnya akan ditampilkan output sebagai berikut.
LED 7 6 5 4 3 2 1 0 Keluaran LED sudah menunjukkan hal yang sesuai dengan apa yang diperintah pada program di mana nilai bit yang ON hanya bit ke-2 dan bit pertama LED.
4.2
T
UGAS1.B
F
ASILITASD
ELAY PADAAVR
GCC
Pada percobaan ini, seluruh kode program memanfaatkan fasilitas delay yang ada pada ATMega8535. Pada dasarnya, di dalam Modifikasi kode program sehingga kondisi
berikut terpenuhi :
1. Jika input sama dengan representasi biner tiga angka NIM Anda, maka kondisi LED sama seperti tugas 1.B.2
2. Jika input sama dengan representasi biner tiga angka NIM terakhir teman sekelompok, maka kondisi les seperti tugas 1.B.A 3. Jika input tidak sama dengan kedua representasi di atas, maka kondisi les seperti tugas 1.A.2
Catat hasil keluaran LED pada BCL.
START DDRA = 0xFF PORTA= (1<<PA2)|(1<<PA1) END START DDRA = 0xFF PORTA = (1<<PA6)|(1<<PA4)|(1<<PA2)|(1<<PA0) END
Laporan Praktikum - Laboratorium Dasar Teknik Elektro – STEI ITB 4 ATMega8535 sudah terdapat clock internal
dengan frekuensi clock 1 MHz. Namun, pada sistem minimum yang digunakan, clock yang ingin digunakan adalah clock eksternal dengan frekuensi clock 7572800 Hz. Untuk mengubah clock yang digunakan menjadi clock eksternal, maka perlu dilakukan pengubahan pada nilai-nlai bit dari fuse ATMega8535.
Secara default, ketika clock yang digunakan adalah clock internal, maka nilai high fuse dan low fuse adalah 0b11011001 (0xD9) dan 0b11100001 (0xE1). Untuk mengubah clock menjadi clock eksternal, maka nilai high fuse dan low fuse perlu diubah menjadi 0xD9 dan 0xEF. Pengubahan ini dilakukan menggunakan avrdude melalui command prompt. Setelah nilai fuse diatur demikian, maka clock yang digunakan selama proses penggunakan sistem minimum adalah clock eksternal. Dengan demikian, semua kode program pada tugas-tugas di bawah ini akan selalu mendefinisikan clock sebesar 7372800 Hz, bukan lagi 1 MHz.
Tugas 1.B.1
Flowchart program dapat dilihat sebagai berikut.
Sama seperti sebelumnya, register DDR akan diset bernilai 0xFF sehingga port A bisa digunakan sebagai output. Kemudian program akan masuk ke looping dengan while-loop. Loop akan berlangsung selama tak hingga kali karena variabel syarat looping selalu bernilai satu. Loop akan berguna untuk mengulangi tiap siklus nyala matinya LED. Selanjutnya, pada awal loop, port A akan bernilai 0b00110011. Ini akan membuat lampu LED ke 0,1,4,5 menyala. Setelah itu
program akan mengalami delay selama 5s (5000ms) di mana lampu LED akan mati pada saat ini. Setelah delay, port A akan diset bernilai 0b11001100. Ini akan membuat lampu LED ke 2,3,6,7 menyala. Setelah itu program akan delta kembali selama 5 detik dan melajutkan langkah looping seperti sebelumnya. Jadi, program ini akan membuat lampu LED akan menyala bergantian dari konfigurasi satu (0b00110011) ke konfigurasi dua (0b11001100) dan seterusnya sampai tak hingga looping.
Selanjutnya, output yang ditampilkan LED akan nampak seperti berikut.
LED 7 6 5 4 3 2 1 0 LED 7 6 5 4 3 2 1 0 LED 7 6 5 4 3 2 1 0 LED 7 6 5 4 3 2 1 0 Keluaran ini akan berlangsung terus menerus. Output yang dikeluarkan sudah sesuai dengan apa yang diminta pada program
Tugas 1.B.2
Flowchart program dapat dilihat sebagai berikut.
Flowchart program tugas 1.B.2 menyerupai dengan tugas 1.B.1 hanya saja port A akan diset bergantian bernilai 0b00100100 dan 0b00100111. Kedua representasi biner ini bernilai 03610 dan
03910 yang mana merupakan tiga angka terakhir
dari NIM praktikan.
Selanjutnya, output yang ditampilkan LED akan
nampak seperti berikut.START DDRA = 0xFF 1 PORTA = 0b00110011 Delay_ms(5000) PORTA = 0b11001100 Delay_ms(5000) END START DDRA = 0xFF 1 PORTA = 0b00100100 Delay_ms(5000) PORTA = 0b00100111 Delay_ms(5000) END
Laporan Praktikum - Laboratorium Dasar Teknik Elektro – STEI ITB 5 LED 7 6 5 4 3 2 1 0
LED 7 6 5 4 3 2 1 0 LED 7 6 5 4 3 2 1 0 LED 7 6 5 4 3 2 1 0 Keluaran ini akan berlangsung terus menerus. Output yang dikeluarkan sudah sesuai dengan apa yang diminta pada program
Tugas 1.B.3
Flowchart program dapat dilihat sebagai berikut.
(Garis merah menyimbolkan alur FALSE pada proses decission sementara garis oranye menyimbolkan alur TRUE pada proses decission) Pertama-tama jelas bahwa kita harus mengeset nilai register DDR bernilai satu agar port A dapat digunakan sebagai output. Selanjutnya kita mengeset nilai i bernilai 0xFE atau 0b11111110. Variabel i akan berguna sebagai variabel di dalam looping yang mengubah-ubah nilai biner dari port A. Pertama diset bernilai 0b11111110 agar pada mula-mula LED yang mati hanya LED pada bit ke nol dan yang lainnya hidup. Kemudian masuk ke dalam looping dan terlihat bahwa nilai biner port A akan sama dengan variabel i. Selanjutnya , program akan mengalami delay selama 5 detik. Kemudian variabel i akan diset dengan operasi.
i = (i<<1)|(i>>7)
operasi ini bertujuan untuk menggeser bit bernilai nol dari satu posisi ke kekiri posisi bit tersebut. Misal tadinya i bernilai 0b11111110 maka setelah dilakukan operasi ini nilai bit bernilai 0b11111101.
Jika operasi ini mengalami overflow, maka nilai bit port A kembali ke nilai awal bernilai 0b11111110. Proses ini akan dilakukan selama looping yang tak hingga karena syarat loop selalu bernilai satu. Jadi, program ini bertujuan untuk menunjukkan nyala-mati LED yang memutar dari kiri ke kanan.
Selanjutnya, output yang ditampilkan LED akan nampak seperti berikut.
LED 7 6 5 4 3 2 1 0 LED 7 6 5 4 3 2 1 0 LED 7 6 5 4 3 2 1 0 LED 7 6 5 4 3 2 1 0 LED 7 6 5 4 3 2 1 0 LED 7 6 5 4 3 2 1 0 LED 7 6 5 4 3 2 1 0 LED 7 6 5 4 3 2 1 0 LED 7 6 5 4 3 2 1 0 LED 7 6 5 4 3 2 1 0 LED 7 6 5 4 3 2 1 0
Keluaran ini akan berlangsung terus menerus. Output yang dikeluarkan sudah sesuai dengan apa yang diminta pada program.
Tugas 1.B.4 START DDRA = 0xFF i = 0xFE 1 PORTA = i Delay_ms(5000) i = (i<<1)|(i>>7) END START DDRA = 0xFF END i = 0xFE 1 i != 0b01111111 PORTA = i Delay_ms(5000) i = (i<<1)|(i>>7) i != 0b01111111 PORTA = i Delay_ms(5000) i = (i>>1)|(i<<7)
Laporan Praktikum - Laboratorium Dasar Teknik Elektro – STEI ITB 6 Program ini lebih sulit daripada tugas 1.B.3 karena
nyala mata lampu tidak memutar satu arah saja namun bolak-balik.Jadi pertama lampu yang mati ialah lampu ke-0 dan menerus kekiri hingga ke-7 setelah itu tidak kembali ke-0 namun lampu mati ialah lampu ke-6 terus ke kanan hingga kembali ke lampu ke-0. Oleh karena itu pada loop besar program terdapat dua sub loop di mana satu untuk mengatur nyala-mati ke kiri dan nyala-mati ke kanan. Untuk yang kekiri, loop ini akan berlangsung hingga kondisi lampu ke 7 saja mati atau di dalam representasi biner ialah 0b011111111 maka dari itu jika syarat ini tidak terpenuhi maka program masuk ke loop kedua. Untuk loop pertama pengesetan nilai i sama seperti tugas 1.B.3 yakni i = (i<<1)|(i>>7) yang berguna agar mengatur nyala mati lampu ke arah kiri. Sedangkan untuk loop kedua, looping hanya dilakukan jika kondisi lampu tidak bernilai 0b11111110 dengan kata lain jika bernilai tersebut maka program akan keluar dari loop.
Selanjutnya, output yang ditampilkan LED akan nampak seperti berikut.
LED 7 6 5 4 3 2 1 0 LED 7 6 5 4 3 2 1 0 LED 7 6 5 4 3 2 1 0 LED 7 6 5 4 3 2 1 0 LED 7 6 5 4 3 2 1 0 LED 7 6 5 4 3 2 1 0 LED 7 6 5 4 3 2 1 0 LED 7 6 5 4 3 2 1 0 LED 7 6 5 4 3 2 1 0 LED 7 6 5 4 3 2 1 0 LED 7 6 5 4 3 2 1 0 LED 7 6 5 4 3 2 1 0 LED 7 6 5 4 3 2 1 0 LED 7 6 5 4 3 2 1 0 LED 7 6 5 4 3 2 1 0
Keluaran ini akan berlangsung terus menerus. Output yang dikeluarkan sudah sesuai dengan apa yang diminta pada program.
4.3
T
UGAS1.C
P
ORTA
SEBAGAI OUTPUTP
ORT D SEBAGAI INPUTTugas 1.C.1
Flowchart program bisa dilihat sebagai berikut.
PORT A akan digunakan sebagai output oleh karena itu register DDRA akan di set 0xFF. Sementara, port D akan digunakan sebagai input sehingga register DDRD akan di set 0x00. Langkah berikutnya adalah mengaktifkan resistor pull up. Resistor pull up berfungsi untuk memaksa nilai pin selalu ‘1’ atau HIGH ketika tidak ada input yang masuk. Hal ini berkaitan dengan kondisi melayang yang telah dijelaskan pada jawaban pertanyaan sebelumnya. Cara mengaktifkan resistor pull up adalah dengan memberikan instruksi SFIOR = 0<<PUD. PUD adalah pull up disable. Ketika nilai PUD dijadikan nol, maka resistor pull up menjadi aktif. Pin input sangat tidak dianjurkan untuk dihubungkan secara langsung ke sumber tegangan atau ke ground untuk menghindari adanya arus berlebihan mengalir melalui pin tersebut. Bila ada arus yang melebihi kapasitas pin mengalir, maka pin akan rusak.
Pin input hendaknya selalu diberi nilai awal (initial value) meskipun pada akhirnya belum tentu setiap bit pada port input digunakan. Ketika seluruh bit diberi nilai awal, maka ia memiliki nilai yang pasti. Bila ada beberapa bit yang tidak diberi nilai awal, maka pada saat program berjalan nilainya menjadi melayang (floating). Nilai
START DDRA = 0xFF DDRD = 0x00 1 i = PIND PORT A = i END PORTA = 0xFF SFIOR = 0 << PUD
Laporan Praktikum - Laboratorium Dasar Teknik Elektro – STEI ITB 7 melayang perlu dihindari untuk menghindari
adanya konsumsi daya yang berlebihan dalam setiap keadaan.
Berikut ini hasil pengamatan yang dilakukan untuk tiap konfigurasi output yang diberikan terhadap konfigurasi input yang diberikan. Kondisi 1
LED 7 6 5 4 3 2 1 0 Switch 7 6 5 4 3 2 1 0 Untuk switch, biru menyimbolkan switch yang aktif sementara putih menyimbolkan switch yang mati.
Kondisi 2
LED 7 6 5 4 3 2 1 0 Switch 7 6 5 4 3 2 1 0 Output LED memiliki konfigurasi yang sudah sesuai dengan switch yang diberikan sehingga program sudah berjalan dengan benar.
Tugas 1.C.2
Flowchart program bisa dilihat sebagai berikut.
Pada tugas 1.C.2 ada tiga konfigurasi input yang akan memiliki output yang berbeda. Hal ini dapat dinyatakan sebagai berikut.
. Jika input sama dengan representasi biner angka 36 (0b00100100) , maka kondisi LED sama seperti tugas 1.B.2
2. Jika input sama dengan representasi biner 39 (0b00100111), maka kondisi LED seperti tugas 1.B.A
3. Jika input tidak sama dengan kedua representasi di atas, maka kondisi LED seperti tugas 1.A.2
Berikut ini output yang dihasilkan untuk tiap konfigurasi input. Kondisi 1 Switch 7 6 5 4 3 2 1 0 LED 7 6 5 4 3 2 1 0 LED 7 6 5 4 3 2 1 0 LED 7 6 5 4 3 2 1 0 LED 7 6 5 4 3 2 1 0 Keluaran ini akan berlangsung terus menerus. Output yang dikeluarkan sudah sesuai dengan apa yang diminta pada program
Kondisi 2 Switch 7 6 5 4 3 2 1 0 LED 7 6 5 4 3 2 1 0 LED 7 6 5 4 3 2 1 0 LED 7 6 5 4 3 2 1 0 LED 7 6 5 4 3 2 1 0 LED 7 6 5 4 3 2 1 0 LED 7 6 5 4 3 2 1 0 LED 7 6 5 4 3 2 1 0 LED 7 6 5 4 3 2 1 0 LED 7 6 5 4 3 2 1 0 LED 7 6 5 4 3 2 1 0 LED 7 6 5 4 3 2 1 0 LED 7 6 5 4 3 2 1 0 LED 7 6 5 4 3 2 1 0 START DDRA = 0xFF DDRD = 0x00 1 i = PIND END PORTA = 0xFF SFIOR = 0 << PUD i= 0b00100100 Tugas 1.B.2 i= 0b00100100 Tugas 1.B.2 Tugas 1.B.2
Laporan Praktikum - Laboratorium Dasar Teknik Elektro – STEI ITB 8 LED 7 6 5 4 3 2 1 0 LED 7 6 5 4 3 2 1 0 Kondisi 3 Switch 7 6 5 4 3 2 1 0 LED 7 6 5 4 3 2 1 0 Keluaran LED sudah menunjukkan hal yang sesuai dengan apa yang diperintah pada program di mana nilai bit yang ON hanya bit ke-2 dan bit pertama LED.
5. K
ESIMPULAN ATMega 8535 memiliki 4 port (A,B,C,D) yang memiliki 8 pin tiap portnya. Keempat port pada ATMega 8535 bisa digunakan sebagai input atau output.
AVR GCC memiliki syntax delay untuk membantu pemrograman yang membutuhkan fungsi waktu.
Untuk membuat port berfungsi sebagai input dengan cara mengeset DDRx nya dengan 0x00 (semua pin jadi pin input). Switch digunakan sebagai input dari user di Port D.
Untuk membuat port berfungsi sebagai output dengan cara mengeset DDRx nya dengan 0xFF (semua pin jadi pin output). LED digunakan sebagai output di Port A.
Pengesetan fuse dilakukan dengan AVRdude dengan mengeset frekuensi clock sesuai dengan clock eksternal
D
AFTARP
USTAKA[1]
Jackstar H. S., Panduan Penulisan Laporan, Jacks
Publishing, Bandung, 2008.
[2]
Waskita Adijarto dkk. , Petujuk Praktikum
Sistem Mikroprosessor, ITB, Bandung, 2016.
Laporan Praktikum - Laboratorium Dasar Teknik Elektro – STEI ITB 9
Lampiran
Kode tugas I.A.1:
#include <avr/io.h>
int main (void) {
DDRA = 0XFF ; //inisialisasi PORTA sebagai OUTPUT
PORTA = (1 << PA6) | (1 << PA4) | (1 << PA2) | (1 << PA0); // nilai OUTPUT
return 0; }
Kode tugas I.A.2:
#include <avr/io.h>
int main (void) {
DDRA = 0XFF ; //inisialisasi PORTA sebagai OUTPUT
PORTA = 0b00001100; // nilai OUTPUT
return 0; }
Kode tugas I.B.1:
#include <avr/io.h> #define F_CPU 7372800UL #include <util/delay.h>
int main (void) { DDRA = 0XFF; PORTA = 0XFF; while (1) { PORTA = 0b00110011; _delay_ms(500); PORTA = 0b11001100; _delay_ms(500); } return 0; }
Kode tugas I.B.2:
#include <avr/io.h> #define F_CPU 7372800UL #include <util/delay.h>
int main (void) {
DDRA = 0XFF;
PORTA = 0XFF;
while (1) {
PORTA = 0b00100100; //representasi biner menunjukkan angka 036
_delay_ms(500);
Laporan Praktikum - Laboratorium Dasar Teknik Elektro – STEI ITB 1 0 _delay_ms(500); } return 0; }
Kode tugas I.B.3:
#include <avr/io.h> #define F_CPU 7372800UL #include <util/delay.h>
int main (void) {
unsigned char i=0xFE;
DDRA = 0xFF; PORTA = i; while (1) { PORTA = i; _delay_ms(120); i = (i<<1) | (i>>7); } return 0; }
Kode tugas I.B.4:
#include <avr/io.h> #define F_CPU 7372800UL #include <util/delay.h>
int main (void) {
unsigned char i=0xFE; //inisialisasi nyala LED
DDRA = 0xFF; //PORT A output
PORTA = i; //Inisialisasi nilai PORT A
while (1) {
while (i != 0b01111111) //gerakan ke kiri
{
PORTA = i;
_delay_ms(120);
i = (i<<1) | (i>>7);
}
while (i != 0b11111110) //gerakan ke kanan
{ PORTA = i; _delay_ms(120); i = (i>>1) | (i<<7); } return 0; }
Kode tugas I.C.1:
Laporan Praktikum - Laboratorium Dasar Teknik Elektro – STEI ITB 11
int main (void) {
unsigned char i;
DDRA = 0xFF;//inisialisasi PORTA sebagai output
DDRD = 0x00;//inisialisasi PORTD sebagai input
SFIOR = 0 << PUD; // aktivasi resistor pull-up internal
PORTA = 0xFF; while (1) { i=PIND; PORTA = i; } return 0; }
Kode tugas I.C.2:
#include <avr/io.h> #define F_CPU 7372800UL #include <util/delay.h>
int main (void) {
unsigned char masukan; //variabel penampung input dari switch
unsigned char i = 0XFE;//inisialisasi i
DDRA = 0xFF; DDRD = 0x00; SFIOR = 0 << PUD; PORTA = 0xFF; while (1) { masukan = PIND;
if (masukan == 0b00100100) //saat input nim 036
{ PORTA = 0b00100100; _delay_ms(500); PORTA = 0b00100111; _delay_ms(500); }
else if (masukan == 0b00100111) //saat input nim 039
{
while (i != 0b01111111 && masukan == 0b01110111) {
PORTA = i;
_delay_ms(120);
i = (i<<1) | (i>>7);
}
while (i != 0b11111110 && masukan == 0b01110111) {
PORTA = i;
_delay_ms(120);
i = (i>>1) | (i<<7);
}
else //saat input lainnya
{ PORTA = 0b00001100; } } return 0; }