Anda di halaman 1dari 28

LAPORAN PRAKTIKUM

MIKROKONTROLLER

OLEH :
AGUNG TRI PUTRA
16130061

PROGRAM STUDI TEKNIK ELEKTRO INDUSTRI


JURUSAN ELEKTRO FAKULTAS TEKNIK
UNIVERSITAS NEGERI PADANG
2018
Tujuan

1. Mengimplementasikan bilangan heksa desimal pada pemrograman mikrokontroler


2. Menyusun rancangan berbagai aplikasi mikrokontroler berbasis LED
3. Mengimplementasikan rancangan pemrograman pada peralatan mikrokontroler.

I. Teori Singkat

Praktek mikrokontroler yang paling mendasar adalah pengendalian nyala lampu LED.
Praktikan diminta untuk mengendalikan nyala lampu LED dengan berbagai cara dan trik
pemrograman. Pemahaman tentang konversi bilangan sangat menentukan dalam
mencapai tujuan praktikum. Terutama terkait dengan dengan bilangan biner dan bilangan
heksadesimal. Konversi bilangan desimal ke bilangan heksadesimal dapat diperhatikan
tabel 1.1 berikut ini.
Tabel.1.1
Konversi Hexadesimal ke binner
No Hex Bin
1 0 0000
2 1 0001
3 2 0010
4 3 0011
5 4 0100
6 5 0101
7 6 0110
8 7 0111
9 8 1000
10 9 1001
11 A 1010
12 B 1011
13 C 1100
14 D 1101
15 E 1110
16 F 1111

Berdasarkan konversi bilangan hexsadesimal, dapat dimudahkan dalam


mengendalikan nyala lampu LED. Sesuai dengan struktur pemrograman C, maka
penentuan alamat, input dan output dari port semuanya dengan mudah menggunakan
bilangan hexadesimal. Pemahaman digit input yang dimasukkan kedalam port MC
(mikrokontroler) dan output yang keluar dari port MC dapat dipahami melalui bilangan
binner.
Gambar 1.1. Vcc dan Ground

Ada dua jenis sumber yang masuk ke dalam kaki-kaki port mikrokontroler. Baik kaki-
kaki port tersebut sebagai input ataupun output. Vcc adalah sumber yang bertegangan positif
yang bernilai antara 3,3 volt hingga 5 volt, sedangkan GND (ground) tegangan yang berkisar
negatif hingga nol. Ada empat kemungkinan yang terjadi yaitu apabila salah satu kaki port
mikrokontroler dihubungkan langsung ke Vcc, maka apabila kaki port tersebut bernilai
positif yaitu sekitar 5 volt maka tidak ada beda potensial antara kaki port dengan Vcc. Jika
kaki port bernilai negatif atau 0 volt maka terjadi perbedaan potensial. Jika ada beban antara
kedua beda potensial pada beban tersebut terdapat tegangan jepit. Demikian juga terjadi pada
salah salah satu kaki port MC dihubungkan ke GND maka jika pada kaki port MC bernilai
negatif atau nol tidak terjadi beda potensial. Demikian juga bila kaki port MC bernilai positif
atau 5 volt maka terjadi beda potensial, dan apabila ada beban pada keduanya maka akan
terdapat tegangan jepit pada beban tersebut.

Kondisi yang sama terjadi pada rangkaian LED pada MC, seperti pada gambar 1.2.
Posisi LED yang terpasang juga berbeda karena arus yang melewati LED hanya satu arah
(baca teori dioda). Pada gambar 1.2 (a), rangkaian LED menunjukkan arah arus dari
posisi satu (1) menuju posisi dua

(2). Pada gambar 1.2 (b), rangkaian LED menunjukkan arah arus mengalir dari posisi dua
(2) menuju posisi satu (1). Pada kedua gambar menunjukkan LED menyala. Jadi proses
menyala LED tergantung dari jenis rangkaian dan perintah program.
Gambar. 1.2. Rangkaian terhubung ke PORT MC

Struktur pemrograman AVR menggunakan bahasa pemrograman C, yang terdiri dari


kepala program dan badan program. Kepala program terdiri dari include-include. Badan
program terdiri dari deklarasi variabel dan tipe data, serta perintah-perintah program.
Secara singkatnya perhatikan list program 1.1.
List program 1.1
#include <atmega16.h> //include ke
header program
Void main(void){ //badan progran
berupa fungsi
char a=0x000; //deklarasi variabel
DDRC=0xFF; //mendeklarasikan port C
sebagai output
While (1){ //pengulangan
PORTC=a; //perintah program
}
} // penutup program

Perhatikan list program 1.1. yaitu proses penyalaan lampu LED pada port C MC. Port
C dijadikan output dengan menggunakan perintah DDRC=0xFF, apabila menjadikan port
A sebagai output maka DDRA=0xFF. Bisa saja tidak semua port A yang dijadikan input
bisa saja port A.1 yaitu port A pada pin 1 saja yang dijadikan output maka DDRA=0x
II. Gambar Kerja

Gambar 1.2. Gambar Kerja Pertama


Gambar 1.3. Gambar Kerja Kedua

III. Alat dan Bahan

1. Rangkaian downloader
2. Rangkaian minimal
3. Rangkaian LED gambar pertama atau kedua
4. Komputer/Laptop
5. Aplikasi CV-AVR
6. Aplikasi driver downloader
7. Konektor
IV. Langkah Kerja

1. Perhatikan gambar kerja pertama dan gambar kerja kedua! Jelaskan perbedaan dan
fungsinya? (buat dalam lembaran kerja anda)

2. Buatlah program dengan list program 1.2 dan program 1.3, dengan membuat projek
baru dengan mengguna code vision AVR, dengan memilih nama mikrokontroler yang
digunakan. Silahkan pilih sesuai degan jenis MC yang anda gunakan. Pilih pula berapa
besar frekuensi yang digunakan, sesuaikan dengan frekuensi kapasitor kristal yang
digunakan. Pada saat menyimpan file dengan nama program LED 1.2. dengan nama
LED1 nantinya akan ada 3 tipe file yaitu (c, obj, hex). Simpan dengan nama LED1.c,
LED1.obj, LED1.hex dan program LED1.3.c, dengan nama program LED2. List
program 1.2 untuk rangkaian gambar 1.2 dan list program 1.3 untuk rangkaian pada
gambar 1.3.

List program 1.2 List program 1.3


#include <mega32.h> #include <mega32.h>
void main(void){ void main(void){
char a=0x00; char a=0xff;
DDRA=0xff; DDRA=0xff;
while (1) while (1)
{ {
PORTA=a; PORTA=a;
} }
} }

3. Lanjutkan kompilasi program tersebut dan uploadkan program 1.2 ke mikrokontroler


yang telah disipakan. Kemudian amati apa yang terjadi dengan lampu LED. Catat lampu
mana saja yang nyala. Analisislah, kenapa itu terjadi?

4. Kemudian amati apa yang terjadi pada pada lampu LED teman/kelompok lain apakah
sama kejadiannya? Kalau tidak analisis dan apa penyebabnya?

5. Selanjutnya apa perbedaan antara program 1.2 dengan program 1.3? catat perbedaanya
kaitkan dengan rangkian yang digunakan. Selanjutnya coba ganti program 1.2 menjadi
program 1.3 dan beri nama program LED3, sebaliknya program 1.3 menjadi program 1.2.
dan beri nama LED4, lakukan seperti langkah 3. Berikan komentar perbedaannya!!!
6. Selanjutnya silahkan menggunakan list program 1.2 atau 1.3 yang sesuai dengan
rangkaian yang anda miliki untuk dimodifikasi. Dan beri nama program LED5, cobalah
mengganti perintah deklarasi variabel a menjadi dua digit bilangan heksadesimal contoh,
char a=0x00 menjadi char a=0x01, atau char a=0xFF menjadi char a=0xF1.

7. Lakukan kembali seperti langkah 3

8. Pastikan apakah yang terjadi, amati dengan seksama dan catat apa yang terjadi pada
rangkaian LED-LED tersebut!! Kaki-kaki port berapa yang lampu LED-nya nyala?

9. Modifikasi kembali program list 1.2 atau 1.3 sesuai dengan rangkaian LED anda,
sesuai dengan tabel1.2. dan beri nama program LEDtabel1.2.

No Variable a Posisi LED menyala (Nomor


kaki port yang menyala
1 F2
2 A5
3 33
4 81
5 B3
6 CA
7 D4
8 6E
9 79
10 46

Tabel 1.2
Konversi variabel A dan Nyala Lampu LED

10. Selanjutnya mari kita lakukan langkah pratikum berikut, pindahkan output LED ke port C
Modifikasi list program 1.2 dan 13 apakah yang anda lakukan? Catatlah modifikasi program.
1.2 dan satu 1.3 menjadi list program 1.4. dan beri nama program LED6 Anda jelaskan setiap
perubahan yang anda lakukan!!
11. Kembali lakukan langkah 3, Kemudian kembali buat seperti tabel 1.2 , berikan nama
program
LED7 ganti semua nilai variabel a menurut kehendak anda sendiri kemudian amati apa yang
terjadi pada LED? Dan catat serta berikan alasan yang jelas!!!
12. Pastikan anda rangkaian anda masih terhubung pada posisi Port C, Kemudia ketik list
program1.5
List program 1.5
#include <mega32.h>
#include <delay.h>
void main(void){
char a=0x00, b=0xFF;
DDRC=0xFF;
While (1){
PORTC=a;
delay_ms(500);
PORTC=b;
delay_ms(500);
}

13. Simpan list program 1.5 dengan nama LED8 kemudian dikompilasi. Upload kembali
ke rangkaian rangkaian MC anda. Amati kembali apa yang terjadi? Catat semua
kejadian tersebut? Berikan juga alasan dan komentar anda?
14. Anda modifikasi list program 1.5 bagian deklarasi variabel menjdai char a=0xF0,
b=0x0F, simpan kembali dan lakukan seperti langakah 13 dengan nama LED9.
Lakukan pengamatan, catat dan berikan comentar anda dengan alasan yang tepat!!!
15. Modifikasi kembali list program 1.5 , pada bagian delay_ms(500) ganti dengan data
pada tabel 1.3. dan beri nama program LED10.
Tabel 1.3
Konversi variabel A dan Nyala Lampu
LED
Delay_ms(......
No ) Lama pergantian nyala LED (detik)
1 1000
2 900
3 800
4 700
5 600
6 500
7 400
8 300
9 200
10 100
11 50
12 10

16. Amati seluruh kejadian yang diakibatkan perubahan waktu pada tabel 1.3. dan berikan
kesimpulan anda!!!
17. Selanjutnya lakukan modifikasi list program1.5 sesuai dengan tabel 1.4 dan simpan
dengan
nama program LED11.
Tabel 1.4
Konversi variabel A dan Nyala Lampu LED
No Variabel Variabel Delay() Pengamatan
a B
1
2
3
4
5
6
7
8
9
10
11
12
V. Hasil Percobaan

A. Dengan menggunakan VCC


No Variable a Posisi LED menyala (Nomor kaki port yang menyala

1 F2

2 A5
3 33

4 81

5 B3
6 CA

7 D4

8 6E
9 79

10 46
B. Dengan menggunakan GROUND
No Variable a Posisi LED menyala (Nomor kaki port yang menyala

11 F2

12 A5
13 33

14 81
15 B3

16 CA
17 D4

18 6E
19 79

20 46
C. Menggunakan program pendelayan beberapa ms
Dimana source programnya adalah sebagai berikut

#include <mega32.h>
#include <delay.h>
void main(void){
char a=0x00, b=0xFF;
DDRA=0xFF;
while (1){
PORTA=a;
delay_ms(500);
PORTA=b;
delay_ms(500);
}
}

Salah satu output dari proteusnya adalah sebagai berikut ;


Adapun tugas dalam tabel sebagai berikut
No Delay_ms(.....) Lama pergantian nyala LED (detik)

1 1000

2 900
3 800

4 700

5 600
6 500

7 400

8 300
9 200

10 100

Untuk setiap screenshot hidup led karena untuk program yang delay dia bekerja
dengan cara led hidup tiap sepersekian detik sehingga untuk menggunakan screenshot
tidak mungkin bisa.
Adapun beberapa list programnya adalah
1. #include <mega32.h>
#include <delay.h>
void main(void){
char a=0x00, b=0xFF;
DDRA=0xFF;
while (1){
PORTA=a;
delay_ms(1000);
PORTA=b;
delay_ms(1000);
}
}
2. #include <mega32.h> 4. #include <mega32.h>
#include <delay.h> #include <delay.h>
void main(void){ void main(void){
char a=0x00, b=0xFF; char a=0x00, b=0xFF;
DDRA=0xFF; DDRA=0xFF;
while (1){ while (1){
PORTA=a; PORTA=a;
delay_ms(900); delay_ms(700);
PORTA=b; PORTA=b;
delay_ms(900); delay_ms(700);
} }
} }

3. #include <mega32.h> 5. #include <mega32.h>


#include <delay.h> #include <delay.h>
void main(void){ void main(void){
char a=0x00, b=0xFF;DDRA=0xFF; char a=0x00, b=0xFF;
while (1){ DDRA=0xFF;
PORTA=a; while (1){
delay_ms(800); PORTA=a;
PORTA=b; delay_ms(600);
delay_ms(800); PORTA=b;
} delay_ms(600);
} }
}

6. #include <mega32.h> 7. #include <mega32.h>


#include <delay.h> #include <delay.h>
void main(void){ void main(void){
char a=0x00, b=0xFF; char a=0x00, b=0xFF;
DDRA=0xFF; DDRA=0xFF;
while (1){ while (1){
PORTA=a; PORTA=a;
delay_ms(500); delay_ms(400);
PORTA=b; PORTA=b;
delay_ms(500); delay_ms(400);
} }
} }
8. #include <mega32.h>
#include <delay.h>
void main(void){
char a=0x00, b=0xFF;
DDRA=0xFF;
while (1){
PORTA=a;
delay_ms(300);
PORTA=b;
delay_ms(300);
}
}

9. #include <mega32.h>
#include <delay.h>
void main(void){
char a=0x00, b=0xFF;
DDRA=0xFF;
while (1){
PORTA=a;
delay_ms(200);
PORTA=b;
delay_ms(200);
}
}

10. #include <mega32.h>


#include <delay.h>
void main(void){
char a=0x00, b=0xFF;
DDRA=0xFF;
while (1){
PORTA=a;
delay_ms(100);
PORTA=b;
delay_ms(100);
}
}

Adapun untuk program modifikasinya sebagai berikut source kodenya

#include <mega32.h>
#include <delay.h>
void main(void){
DDRA=0xFF;
DDRD=0xFF;
while (1){
PORTA=0x00;
delay_ms(25);
PORTA=0b00000001;
delay_ms(25);
PORTA=0x00;
delay_ms(25);
PORTA=0b00000010;
delay_ms(25);
PORTA=0x00;
delay_ms(25);
PORTA=0b00000100;
delay_ms(25);
PORTA=0x00;
delay_ms(25);
PORTA=0b00001000;
delay_ms(25);
PORTA=0x00;
delay_ms(25);
PORTA=0b00010000;
delay_ms(25);
PORTA=0x00;
delay_ms(25);
PORTA=0b00100000;
delay_ms(25);
PORTA=0x00;
delay_ms(25);
PORTA=0b01000000;
delay_ms(25);
PORTA=0x00;
delay_ms(25);
PORTA=0b10000000;
delay_ms(25);
PORTA=0x00;
delay_ms(25);
PORTA=0xff;
delay_ms(25);
PORTA=0b00000011;
delay_ms(25);
PORTA=0x00;
delay_ms(25);
PORTA=0b00001100;
delay_ms(25);
PORTA=0x00;
delay_ms(25);
PORTA=0b00110000;
delay_ms(25);
PORTA=0x00;
delay_ms(25);
PORTA=0b11000000;
delay_ms(25);
PORTA=0x00;
delay_ms(25);
PORTA=0xff;
delay_ms(25);

}
}
Program di atas sudah saya cobakan pada simulasi menggunakan inisiatif saya sendiri
dan mendapatkan gambar seperti berikut :

VI. TUGAS
1. Jelaskan tentang Vcc, GND, dan kaitannya dengan nyalaLED??
Pada gambar kerja pertama menggunakan convigurasi LED common
anoda (Vcc) sedangkan pada gambar kerja kedua menggunakan konvigurasi
LED common catoda (GND).Common anoda adalah penggabungan kaki-kaki
anoda dari komponen (LED) artinya mereka membutuhkan arus positif untuk
dapat menjalankan fungsinya. Configurasi LED common anoda, LED akan
hidup pada saat diberilogika rendah(0) atau sering disebut aktif low. Sebaliknya,
common catoda adalah penggabungan kaki-kaki katoda dari komponen (LED).
Artinya mereka membutuhkan arus negative. Common catoda akan
digroundkan sehingga LED akan hidup apabila diberi logika tinggi (1) atau
disebut aktif high.
Maka jika kedua rangkaian diberikan program yang sama led nyang
menyala adalah kebalikan dari led yang menyala para rangkaian lainnya seperti
yang tergambar pada analisis data.
2. Jelaskan dengan baik dan rinci tentang pemahaman anda pada setiap list
program 1.2 atau 1.3?
#include <atmega16.h> //include ke header program
Void main(void){ //badan progran berupa fungsi
char a=0x000; //deklarasi variabel
DDRC=0xFF; //mendeklarasikan port C sebagai output
While (1){ //pengulangan
PORTC=a; //perintah program
} } // penutup program
3. Jelaskan tentang bilangan hexadesimal dan kaitannya dengan pemograman?
Apakah adakaitanya bilangan biner dari konversi bilangan hexadesimal
dengan keluaran pada portport MC
Bilangan heksadesimal merupakan bilangan berbasis 16 dimana terdapat 16
digit atau symbol. Bilangan heksadesimal digunakan dalam dunia digital
maupun pemograman untuk mempermudah penulisan. Dalam kasus tertentu
pada system computer kita kesulitan jika harus menggunakan bilangan
binner yang hanya berisi angka 0 dan 1 saja. Karna pada pemograman akan
banyak sekali kode maka digunakan biangan heksadesimal dalam
pemogramannya.

4. Delay adalah sebuah waktu tunda sebelum perintah selanjutnya dijalankan.


Pada CodeVision-AVR waktu tunda(delay) ditulis dengan syntax
delay_ms(nilai delay) dan harus dikasih ‘#include <delay.h>’ pada
headernya. Untuk nilai delaynya dalam satuan millisecond dimana
1000ms=1s, jadi untuk 10s maka nilai delaynya 10000. Dimana di dalam
CVAVR ‘delay_ms(10000)
5. #include <mega32.h>
#include <delay.h>

void main(){
DDRA=0xff;
while(1){
PORTA=0b00000001;
delay_ms(50);
PORTA=0b00000010;
delay_ms(50);
PORTA=0b00000100;
delay_ms(50);
PORTA=0b00001000;
delay_ms(50);
PORTA=0b00010000;
delay_ms(50);
PORTA=0b00100000;
delay_ms(50);
PORTA=0b01000000;
delay_ms(50);
PORTA=0b10000000;
delay_ms(50);
}
}
6. fungsi dari while(1){……} adalah selama nilai dari kaki reset pada
ATMEGA bernilai 1(VCC) maka perintah2 yang ada didalam while
tersebut akan terus diulang sampai kita beri

Anda mungkin juga menyukai