Anda di halaman 1dari 37

LAPORAN LABORATORIUM

PEMROGRAMAN MIKROKONTROLER
BERBASIS ATMEGA 16

Kelas : EC – 3B
Kelompok : 5 (Lima)
Nama Praktikan :
1. Bagus Muhammad Ghani 1803321075
2. Muhammad Riyan Aufar 1803321082
3. Muhammad Fakhri Alfizan 1803321089
4. Yoga Baskoro 1803321066
Pengajar : Benny S.T., M.T.

PROGRAM STUDI TEKNIK ELEKTRONIKA


JURUSAN TEKNIK ELEKTRO
POLITEKNIK NEGERI JAKARTA
2019
Kata Pengantar

Segala puji bagi Allah SWT yang telah memberikan kami kemudahan sehingga kami
dapat menyelesaikan laporan ini dengan tepat waktu. Tanpa pertolongan-Nya tentunya kami
tidak akan sanggup untuk menyelesaikan laporan ini dengan baik. Shalawat serta salam semoga
terlimpah curahkan kepada baginda tercinta kita yaitu Nabi Muhammad SAW yang kita nanti-
natikan syafa’atnya di akhirat nanti.
Kami mengucapkan syukur kepada Allah SWT atas limpahan nikmat sehat-Nya, baik
itu berupa sehat fisik maupun akal pikiran, sehingga kami mampu untuk menyelesaikan
pembuatan laporan sebagai tugas dari mata kuliah Mikrokontroller Lanjut dengan
menggunakan AtMega 16”.
Kami tentu menyadari bahwa laporan ini masih jauh dari kata sempurna dan masih
banyak terdapat kesalahan serta kekurangan di dalamnya. Untuk itu, kami mengharapkan kritik
serta saran dari pembaca untuk laporan ini, supaya laporan ini nantinya dapat menjadi laporan
yang lebih baik lagi. Demikian, dan apabila terdapat banyak kesalahan kami mohon maaf yang
sebesar-besarnya.
Demikian, semoga laporan ini dapat bermanfaat. Terima kasih.

Depok, 5 Desember 2019

Penyusun
LAPORAN PERCOBAAN 1
Code Vision AVR& Aplikasi LED
1. Tujuan
 Mahasiswa dapat menjalankan program CodeVisionAVR
 Mahasiswa dapat memahami cara pemrograman mikrokontroler Mengamati dan
membuktikan kebenaran fungsi port I/O AVR sebagai output.
 Mengamati dan membuktikan kebenaran rangkaian LED terhubung ke AVR
 Mengamati dan membuktikan kebenaran program

2. Peralatan, komponen dan software yang diperlukan :


 Laptop
 Modul LED
 Downloader DAN Minimum Sistem AT Mega8535 dan kabel USB
 Software CodeVision AVR
 Power supply (5V)

3. Landasan Teori
CVAVR adalah program yang berbasis pada bahasa C. Program ini merupakan salah satu
alat bantu pemrograman (programming tool) yang bekerja dalam lingkungan pengembangan
perangkat lunak yang terintegrasi (Integrated Development Environment, IDE). CV-AVR
dilengkapi dengan source code editor, compiler, linker, dan dapat memanggil Atmel AVR
Studio untuk debuggernya.
CodeVision AVR terdiri atas Generator Program Otomatis CodeWizardAVR yang
mengijinkan pengguna untuk menulis dalam beberapa saat semua kode yang diperlukan untuk
beberapa implementasi seperti dalam daftar berikut:
- Setup akses memori ekternal
- Identifikasi sumber reset chip
- Inisialisasi port untuk input maupun output
- Inisialisasi interupsi eksternal
- Inisialisasi timer dan counter
- Inisialisasi timer watchdog
- Inisialisasi UART dan interupsi yang dikendalikan oleh buffer komunikasi serial
- Inisialisasi komparator analog
- Inisialisasi ADC
- Inisialisasi interface SPI
- Bus I2C, sensor temperature LM75, thermometer/termostatDS1621 dan PCF8563,
PCF8583, DS1302, inisialisasi RTC DS1307
- Inisialisasi sensor tempertatur DS1820/DS18S20, 1 wire bus
- Inisialisasi modul LCD
Mikrokontroller ATMega8535 memiliki 40 kaki. Mayoritas dari kaki kaki tersebut adalah
Port, yakni portA, portB, portC, portD dimana masing masing port memiliki terdiri 8 kaki.
Keseluruhan Port pada Mikrokontroller ATMEGA8535 dapat digunakan sebagai Digital input
dan output namun harus ditentukan melalui register Data Direction Register pada port yang
sesuai. Contoh bila Port A7 s/d PortA4 sebagai output dan PortA3 s/d Port0 sebagai input maka
DDRA = 11110000b atau F0h. Untuk menyalakan LED common anode (anode terhubung ke
Vcc 5Volt) Katode harus diberi logika nol yang berasal dari port, sedang untuk mematikan LED
port memberikan logika satu ke katode.

4. Urutan Percobaan :
 Menyalakan 8 buah LED nyala bergantian setiap detik pada PORTD
 Ulangi pada Port yang lain
 Menyalakan sebuah LED dari kanan ke kiri pada PORTD dengan interval waktu 1
detik dan sebaliknya.
 Menyalakan sebuah LED dari kiri ke kanan pada PORTD dengan interval waktu 1
detik dan sebaliknya.

5. Cara Melakukan Percobaan


 Buat program dengan menggunakan CodeVision AVR lalu Compile dan Download
program tersebut ke AT Mega8535 pada Downloader
 Hubungkan downloader ke modul LED dan ke saluran USB laptop dan berikan catu
pada common LED
 Amati tampilan LED dan ukur waktu pergantian nyala LED.

6. Program
a. Program Blink LED pada PORT D
#include <mega16.h>
#include <delay.h>

void main(void)
{
DDRD=0xFF;
PORTD=0xFF;

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

b. Program Blink LED pada PORT lain (PORT C)


#include <mega16.h>
#include <delay.h>
void main(void)
{
DDRC=0xFF;
PORTC=0xFF;

while (1) {
PORTC = 0xFF ;
delay_ms (1000);
PORTC = 0x00 ;
delay_ms (1000) ;
};
}
c. Program LED geser ke kiri
(LED dapat menyala dari kanan ke kiri secara bergantian dengan cara
memberikan logic satu terlebih dahulu pada PORT yang dijadikan output,
kemudian memberikan logic low mulai dari bit ke-8 sampai bit ke-1 pada
PORT yang dijadikan output.)
#include <mega16.h>
#include <delay.h>

int temp;
void main(void)
{
DDRD=0xFF;
temp=1<<8;
PORTD = ~temp;
delay_ms(500);

while (1)
{
delay_ms(500);
temp>>=1;
PORTD = ~temp;

if(temp==0)
{
temp=1<<8;

}
};
}
d. Program LED geser ke kanan
(LED dapat menyala dari kiri ke kanan secara bergantian dengan cara
memberikan logic satu terlebih dahulu pada PORT yang dijadikan output,
kemudian memberikan logic low mulai dari bit ke-1 sampai bit ke-8 pada
PORT yang dijadikan output.)

#include <mega16.h>
#include <delay.h>

int temp;
void main(void)
{
DDRC=0xFF;
temp=1<<8;
PORTC = ~temp;
delay_ms(100);

while (1)
{
delay_ms(100);
temp>>=1;

if(temp==0)
{temp=1<<8;
PORTC = ~temp;
}
};
}

7. Kesimpulan
Pada percobaan LED kita dapat mengetahui bahwa, LED akan aktif jika mendapatkan
logic 0 atau aktif low, dan dapat diaplikasikan seperti pada percobaan lampu LED bergeser
dari kanan ke kiri atau sebaliknya.
Gambar 1.1 Skema Rangkaian Minsist ATMEGA8535 dengan LED common anoda

A. Tujuan
1. Mahasiswa dapat menjalankan program CodeVisionAVR
2. Mahasiswa dapat memahami cara pemrograman mikrokontroler

B. Dasar Teori
CV-AVR (CodeVision AVR)

CodeVision Alf and Vegard’s Risc processor atau sering disingkat CVAVR adalah
program yang berbasis pada bahasa C. Program ini merupakan salah satu alat bantu
pemrograman (programming tool) yang bekerja dalam lingkungan pengembangan perangkat
lunak yang terintegrasi (Integrated Development Environment, IDE). CVAVR dilengkapi
dengan source code editor, compiler, linker, dan dapat memanggil Atmel AVR Studio untuk
debuggernya.
CodeVision AVR terdiri atas Generator Program Otomatis CodeWizardAVR yang
mengijinkan pengguna untuk menulis dalam beberapa saat semua kode yang diperlukan untuk
beberapa implementasi seperti dalam daftar berikut:
 Setup akses memori ekternal
 Identifikasi sumber reset chip
 Inisialisasi port untuk input maupun output
 Inisialisasi interupsi eksternal
 Inisialisasi timer dan counter
 Inisialisasi timer watchdog
 Inisialisasi UART dan interupsi yang dikendalikan oleh buffer komunikasi serial
 Inisialisasi komparator analog
 Inisialisasi ADC
 Inisialisasi interface SPI
 Bus I2C, sensor temperature LM75, thermometer/termostatDS1621 dan PCF8563,
PCF8583, DS1302, inisialisasi RTC DS1307
 Inisialisasi sensor tempertatur DS1820/DS18S20, 1 wire bus - Inisialisasi modul
LCD

C. Alat dan Komponen yang diperlukan


a) Alat yang diperlukan
 1 unit Laptop yang dilengkapi dengan software CVAVR
 DT COMBO AVR-51 STAER KIT
b) Langkah Percobaan

1. Buka program CodeVisionAVR, sehingga tampak seperti pada Gambar

Gambar 1. Tampilan awal program CVAVR


2) Buka menu Setting, pilih Programmer. Lakukan perubahan sehingga
menjadi tampak pada Gambar 2.

Gambar 2. Tampilan Programmer Setting


3) Buka menu File, kemudian pilih New sehingga akan muncul tampilan
seperti pada Gambar 3.

Gambar 3. Tampilan pembuatan file baru


4) Pilih Project dan kemudian tekan tombol OK.

5) Akan muncul dialog untuk konfirmasi menggunakan program


CodeWizardAVR. Pilih tombol Yes dan akan tampak seperti pada Gambar
4.

Gambar 4. Tampilan Project Wizard

6) Pilih ATmega8535 sesuai dengan hardware yang akan digunakan pada


pilihan chip, dan sesuaikan nilai clocknya.

7) Setelah semuanya disesuaikan buka tab Ports untuk menentukan


penggunaan masing-masing Port seperti ditunjukkan pada Gambar 5.
Untuk pengaturan penggunaan port disesuaikan dengan Tabel 1.
Tabel 1. Pengaturan Port I/O
DDR bit = 1 DDR bit = 0
PORT bit =1 Output; High Input; R pull-up
PORT bit=0 Output; Low Input; Floating

Gambar 5. Tampilan pengaturan input dan output


8) Buka menu file, pilih Generate, save, and exit. Buatlah folder dengan
nama kelompok anda pada partisi D. Simpan masing-masing dengan
nama Praktek-

1.C (untuk file source C), Praktek-1.prj (untuk file project) dan Praktek-1.cwp
(untuk Code Wizard Project).

9) Buka menu Project, pilih Configure, dan pilih After Make seperti
tampak pada Gambar 6.
5

Gambar 6. Tampilan Configure Project


10) Untuk mengcompile dengan memilih menu Project, dilanjutkan Make.
Jika tidak terjadi kesalahan maka akan terlihat pada Gambar 7.
6

Gambar 7. Tampilan hasil kompilasi

11) Untuk mendownload program ke mikrokontroler, pilih menu Program the


cip.

c) Hasil Percobaan

1) Amati yang terjadi pada modul hardware

2) Lihatlah file yang dihasilkan setelah di-compile dan di-make


d) Tugas dan Pertanyaan

1) Apakah yang dimaksud dengan meng-compile program?


Jawab : Meng-compile program adalah sebuah proses dimana bahasa
pemrograman diterjemahkan dan diketahui benar atau salahnya, dan jika
sudah benar maka akan berubah menjadi sebuah file yang bernama compiler.
2) Apakah yang dimaksud dengan DDR?
Jawab : DDR adalah sebuah intruksi/perintah yang dimana akan
menginisiasi sebuah PORT untuk menjadi output(0xff) atau input(0x00).
3) Apakah fungsi file yang berektensi Hex?
Jawab : File Hex berfungsi untuk memberikan perintah kepada media yang
akan dipraktekan (mikrokontroller).
4) Bagaimanakah agar suatu syntak dijadikan menjadi komentar atau
keterangan?
Jawab : Dengan cara menambahkan “// “ pada awal atau “ /*…..*/”pada
awal dan akhir kalimat.
5) Apakah perbedaan antara source dengan project ketika membuat file baru?
Jawab : 1. Source : Tempat dimana kode program dibuat tetapi tidak dapat
langsung diupload melalui downloader ke mikrokontroller.
2. Project : tempat yang berisikan semua aspek termaksud source
code yang dimana bisa di compile menjadi sebuah file hex.
6) Bagaimanakah struktur bahasa C dalam program CVAVR ini?
Jawab :
o Header
o Komentar
o Deklarasi
o Fungsi
o Main Program (Program Utama)

e) Kesimpulan
Pada percobaan ini kita dapat mengethui bahwa terdapat dua mode kerja LED
yaitu common anoda dan common katoda. Pada LED anoda dihubungkan pada Vcc 5V
dan katoda dihubungkan ke GND. Untuk mengatur cepat atau lambatnya suatu kedipan di
led, dapat diatur melalui delay yang terdapat di program tersebut.
LAPORAN PERCOBAAN 2
Aplikasi Seven Segment
1. Tujuan :
 Mengamati dan membuktikan kebenaran program untuk menampilkan angka
decimal dan hexsadesimal pada seven segment
 Mampu membuktikan kebenaran rangkaian display seven segment dengan
dan tanpa decoder BCD to Seven Segment terhubung ke Mikrokontroller
AVR.

2. Peralatan dan komponen yang diperlukan :
 Komputer / Laptop
 Minimum system AT Mega16
 Modul 7 segment
 Downloader AT Mega16
 Software CodeVision AVR
 Power supply (5V)

3. Landasan Teori :
Seven segment dapat digunakan untuk menampilkan angka decimal dan
hexsadesimal. Untuk menampilkan angka pada seven segment menggunakan AVR8535
dapat dengan decoder BCD to seven segment atau langsung dihubungkan ke salah satu port.
dan diseri dengan resistor sebesar 330 ohm. Adapun perbedaannya adalah jumlah pin pada
port mikrokontroller AVR yang menggunakan decoder BCD to &7 segment lebih sedikit (
empat pin dari port) namum hanya dapat untuk menampilkan angka decimal. Sebaliknya
kalau tanpa decoder jumlah pin dari port AVR yang dipakai tujuh namum mampu
menampilkan angka hexsadesimal. Untuk port yang digunakan sebagai port output. Untuk
menampilkan dua digit angka decimal (puluhan dan satuan) dibutuhkan dua buah seven
segment. Input BCD decoder dihubungkan ke port yang memiliki LSB secara berurutan,
sedang untuk input decoder bagian puluhan dihubungkan ke port yang memiliki MSB secara
berurutan. Contoh PA7-PA4 ke input decoder DCBA bagian puluhan.
Gambar 2.1 Skema rangkaian seven-segment common anode

Gambar 2.2 Angka-angka yang dihasilkan oleh seven-segment

4. Urutan Percobaan :
 Menampilkan angka desimal pada 7 segment dengan decoder
 Menampilkan angka hexsadesimal pada 7 segment tanpa decoder
 Up counter dri 00 sampai dengan 99 pada 7 segment

5. Cara melakukan percobaan :


 Hubungkan Port downloader ke modul LED dan ke saluran USB laptop dan
berikan catu daya pada downloader
 Buat program dengan menggunakan CodeVision AVR lalu compile dan
Download program tersebut ke AT Mega8535 pada Downloader
 Amati tampilan seven segment dan ukur waktu pergantian nyala LED.

6. Program Percobaan
a. Program menampilkan angka desimal pada 7 segment

#include <mega16.h>
#include <delay.h>

void main (void)


{
int angka,i;
DDRC=0xff;

while(1)
{
angka=0;

for(angka=0;angka<10;angka++)
{
for(i=0;i<100;i++)
{
PORTC=angka;
delay_ms(1000);
}
}
};
}

b. Program hexadecimal pada 7 segment


#include <mega16.h>
#include <delay.h>

unsigned char bil[16] =


{0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x88,0x83,0xc6,0xa1,
0x86,0x8e};
void main(void)
{
int kanan,i;

DDRC=0xFF;
DDRD=0xFF;

while (1)
{
;
kanan=0;
{
for (kanan=0;kanan<16;kanan++)
{
for (i=0;i<100;i++)
{
PORTD.6=1;
PORTD.7=0;
PORTC=bil[kanan];
delay_ms(50);
}
}
}
}
}
c. Program Upcounter 0-99 pada segment
#include <mega16.h>
#include <delay.h>
unsigned char bil [10]=
{0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};

void main(void)
{
int kiri,kanan,i;

DDRC=0xFF;
DDRD=0xFF;

while (1)
{
kiri=0;
kanan=0;

for (kiri=0;kiri<10;kiri++)
{
for (kanan=0;kanan<10;kanan++)
{
for (i=0;i<100;i++)
{
PORTD.7=0;
PORTD.6=1;

PORTC=bil[kiri];
delay_ms(5);

PORTD.7=1;
PORTD.6=0;
PORTC=bil[kanan];
delay_ms(5);
}
}
}
};
}

7. Kesimpulan :

Seven Segment adalah modul dari kumpulan LED yang diatur agar dapat
menampilkan angka dan huruf tertentu. Seven segment memiliki 2 mode kerja, common
anoda(active low) dan common katoda(active high). Pada dasarnya Seven Segment sama
dengan LED biasa, namun Seven Segment memiliki fungsi khusus untuk menampilkan
huruf dan angka tertentu. Untuk lebih mudah mengkonfigurasi output dari port ke Seven
Segment, dapat menggunakan IC decoder BCD to Seven Segment
LAPORAN PERCOBAAN 3
Motor Stepper
1. Tujuan :
 Mengamati dan membuktikan kebenaran program untuk menjalankan motor
stepper
 Mampu membuat program motor stepper dengan kecepatan putar dapat diatur.
 Mengamati dan membuktikan kebenaran program delay untuk mengatur
gerakan motor stepper sebesar 90 derajat.

2. Peralatan dan komponen yang diperlukan :


 Komputer / Laptop
 Minimum system AT Mega16
 Modul motor stepper dan driver
 Downloader AT Mega8535
 Software CodeVision AVR
 Power supply (5V)
3. Landasan Teori :
Motor stepper adalah sebuah peralatan elektromekanik yang mengubah pulsa elektrik
menjadi pergerakan mekanik. Shaft atau kumparan motor stepper berputar per step ketika
pulsa elektrik dimasukkan ke kumparan tersebut dengan urutan yang benar. Urutan
pemberian pulsa ke motor stepper akan menyebabkan arah putaran yang berbeda. Sedangkan
besarnya frekuensi dari pulsa akan mempengaruhi kecepatan putaran motor stepper.

Motor Stepper Unipolar

Gambar 3.1 Motor Stepper Unipolar

Motor stepper unipolar baik tipe 5 atau 6 kabel biasanya dihubungkan seperti pada
gambar 2.1,dengan sebuah center tap pada tiap kumparan. Pada penggunaannya, center tap
dihubungkan ke supply positif, dan dua ujung kumparan lainnya dihubungkan ke ground.
Bagian rotor motor pada gambar 2.1 dibuat dari magnet permanent dengan 6 kutub, 3 kutub
utara dan 3 kutub selatan.
Seperti terlihat pada gambar, arus mengalir dari center tap kumparan 1 ke terminal a
menyebabkan kutub stator yang atas menjadi berkutub utara dan kutub stator yang bawah
berkutub selatan. Kondisi ini menyebabkan rotor berada pada posisi seperti gambar 2.1.
Jika arus pada kumparan 1 dimatikan dan kumparan 2 dinyalakan, maka rotor akan
berputar 30 derajat, atau 1 step. Untuk berputar secara kontinyu, kita hanya perlu
menghubungkan supplay power ke 2 kumparan secara berurutan.
Dengan asumsi bahwa logika 1 berarti arus mengalir pada kumparan motor, maka
berikut adalah urutan yang harus dipenuhi agar motor dapat berputar sebanyak 24 step atau 2
putaran

Gambar 3.2 Hubungan motor Stepper dengan Mikrokontroller


Step Angle / SA
Motor stepper bergerak per step. Setiap bergerak satu step, motor stepper akan
berputar beberapa derajat sesuai dengan step anglenya. Step angle tergantung dari
jumlah kutub magnet motor stepper. Jumlah putaran yang diperlukan agar motor stepper
bergerak 1 putaran penuh (360 0) adalah :Step = 360 / Step Angle
Misalnya, sebuah motor stepper memiliki SA=1,80 maka untuk untuk berputar satu
putaran penuh memerlukan jumlah step sebanyak : 360/1.8 = 200 step
Kendali Arah Putaran
 Arah putaran motor stepper ditentukan oleh arah urutan aktifasi kumparannya. Secara
 program,ini dilakukan dengan mengubah arah pergeseran bit.
 Jika arah pergesarannya ke kiri, maka motor stepper akan berputar kearah kiri pula
(CCW)
 Jika arah pergeserannya ke kanan, maka motor stepper akan berputar kearah kanan
(CW)

4. Urutan Percobaan :
 Menampilkan putaran motor stepper searah jarum jam
 Menampilkan putaran motor stepper berlawanan arah jarum jam
 Mengatur kecepatan putar motor stepper dengan rpm 60 Arah putaran clockwise
 Menampilkan motor Stepper berputar ke kanan sebesar 90 derajat.

5. Cara melakukan percobaan :


 Siapkan peralatan dan komponen yang diperlukan
 Rangkai peralatan dan komponen
 Buat program antarmuka motor stepper dengan menggunakan CodeVision AVR
 Masukkan program tersebut ke AT Mega8535 dengan menggunakan downloader
 Amati putaran motor stepper

6. Program Percobaan
a. Program motor stepper searah jarum jam
(untuk putaran 360 derajat memerlukan 200 step menggunakan fullstep yang
didapat dari 360°/1,8°=200 step)

#include <mega16.h>
#include <delay.h>

void main(void)
{

DDRD =0xFF;
PORTD=0x00;
Int i;
while (1)
{
for(i=0;i<50;i++) {
PORTD=0x01;
delay_ms(5);
PORTD=0x02;
delay_ms(5);
PORTD=0x04;
delay_ms(5);
PORTD=0x08;
delay_ms(5); };
}
}
b. Program motor stepper berlawanan arah jarum jam

#include <mega16.h>
#include <delay.h>

Int i;
void main(void)
{

DDRD =0xFF;
PORTD=0x00;

while (1)
{
for(i=0;i<50;i++) {
PORTD=0x08;
delay_ms(5);
PORTD=0x04;
delay_ms(5);
PORTD=0x02;
delay_ms(5);
PORTD=0x01;
delay_ms(5); };

};
}
c. Program mengatur kecepatan motor stepper 60rpm searah jarum jam
(Untuk mendapat 60 rpm yang berarti 60 putaran per menitnya, dibutuhkan satu
putaran per detik yang bisa di dapat dari besarnya delay x jumlah stepnya)

#include <mega16.h>
#include <delay.h>

void main (void)


{
DDRD=0xFF;
PORTD=0x00;

while (1)
{
for(i=0;i<50;i++) {
PORTD=0x01;
delay_ms(2.5);
PORTD=0x03;
delay_ms(2.5);
PORTD=0x02;
delay_ms(2.5);
PORTD=0x06;
delay_ms(2.5);
PORTD=0x04;
delay_ms(2.5);
PORTD=0x0C;
delay_ms(2.5);
PORTD=0x08;
delay_ms(2.5);
PORTD=0x09;
delay_ms(2.5);
PORTD=0x01;
delay_ms(2.5); };
}
}

d. Program motor stepper berputar sebesar 180 derajat , ketika push button ditekan
muter ke kiri 180 derajat kemudian muter ke kanan lagi.
(Untuk mendapatkan putaran sebesar 180°, kita bisa mengubah jumlah stepnya
dengan cara 180°/1,8°=100 step untuk yang fullstep.)

#include <mega16.h>
#include <delay.h>

void main(void)
{

int i;

DDRD=0xFF;
PORTD=0x00;
DDRC=0x00;
PORTC=0xFF;

while (1)
{
if (PINC.0==0)
{
for (i=0;i<25;i++)
{
PORTD=0x01;
delay_ms(100);
PORTD=0x02;
delay_ms(100);
PORTD=0x04;
delay_ms(100);
PORTD=0x08;
delay_ms(100);
PORTD=0x00;
delay_ms(100);
};
}
if (PINC.1==0)
{
for (i=0;i<25;i++)
{
PORTD=0x08;
delay_ms(100);
PORTD=0x04;
delay_ms(100);
PORTD=0x02;
delay_ms(100);
PORTD=0x01;
delay_ms(100);
PORTD=0x00;
delay_ms(100);
};
}
};
}

7. Kesimpulan :
Pada percobaan ini kita menggunakan motor stepper, motor stepper dibagi menjadi
dua yaitu, bipolar dan unipolar. Pada kesempatan kali ini kita menggunakan motor stepper
unipolar, dimana full step pada motor stepper unipolar tersebut adalah 1.8°/step dan half
step 0.9°/step. Untuk mengatur putaran pada motor stepper (clock wise/counter clock
wise) dapat diatur melalui program. Untuk mengatur kecepatan pada motor stepper (RPM)
dapat diatur menggunakan delay pada setiap angle pada program tersebut.
Laporan Percobaan 4
Interrupt External dengan LED dan motor Stepper

A. Landasan Teori
Pada Mikrokontroller ATMEGA8535 memiliki tiga interrupt external yakni,
interrupt external nol (PD2), interrupt external satu (PD3), interrupt external dua (PB2).
Bila terjadi interrupt pada kaki interrupt external maka akan mengexekusi interrupt
service rutin lalu kembali ke program utama

B. Tujuan
 Mampu membuat program menggunakan Interrupt External.
 Mampu membuat program untuk mengontrol nyala LED menggunakan Interrupt
external

C. Peralatan dan komponen yang diperlukan :


 Komputer / Laptop
 Modul motor stepper
 Modul LED
 Downloader AT MEGA8535
 Software CodeVision AVR
 Power supply (5V)

D. Urutan Percobaan
 LED berkedip tiga kali dengan interval waktu satu detik jika tombol interrupt nol
ditekan.
 Sebuah LED nyala bergeser kekiri terus menerus dan akan berkedip sebanyak lima
kali bila tombol interrupt nol ditekan.
 Motor stepper berputar kekanan terus menerus, bila tombol interrupt 0 ditekan
beputar kekiri sekali lalu kembali berputar ke kanan

E. Cara melakukan percobaan


 Hubungkan Port downloader ke saluran USB laptop dan berikan catu daya pada
downloader
 Buat program dengan menggunakan CodeVision AVR lalu compile dan Download
program tersebut ke ATMega8535 pada Downloader

F. Program Percobaan
a. Program LED berkedip tiga kali dengan interval waktu satu detik jika tombol
interrupt nol ditekan.

#include <mega16.h>
#include <delay.h>

int i;
// External Interrupt 0 service routine
interrupt [EXT_INT0] void ext_int0_isr(void)
{
for(i=0;i<3;i++)
{
PORTC=0xff;
delay_ms(1000);
PORTC=0x00;
delay_ms(1000);
}
}

void main(void)
{

// Input/Output Ports initialization


// Port A initialization
// Function: Bit7=In Bit6=In Bit5=In Bit4=In Bit3=In Bit2=In Bit1=In Bit0=In
DDRA=(0<<DDA7) | (0<<DDA6) | (0<<DDA5) | (0<<DDA4) | (0<<DDA3) |
(0<<DDA2) | (0<<DDA1) | (0<<DDA0);
// State: Bit7=T Bit6=T Bit5=T Bit4=T Bit3=T Bit2=T Bit1=T Bit0=T
PORTA=(0<<PORTA7) | (0<<PORTA6) | (0<<PORTA5) | (0<<PORTA4) |
(0<<PORTA3) | (0<<PORTA2) | (0<<PORTA1) | (0<<PORTA0);

// Port B initialization
// Function: Bit7=In Bit6=In Bit5=In Bit4=In Bit3=In Bit2=In Bit1=In Bit0=In
DDRB=(0<<DDB7) | (0<<DDB6) | (0<<DDB5) | (0<<DDB4) | (0<<DDB3) |
(0<<DDB2) | (0<<DDB1) | (0<<DDB0);
// State: Bit7=T Bit6=T Bit5=T Bit4=T Bit3=T Bit2=T Bit1=T Bit0=T
PORTB=(0<<PORTB7) | (0<<PORTB6) | (0<<PORTB5) | (0<<PORTB4) |
(0<<PORTB3) | (0<<PORTB2) | (0<<PORTB1) | (0<<PORTB0);

// Port C initialization
// Function: Bit7=Out Bit6=Out Bit5=Out Bit4=Out Bit3=Out Bit2=Out Bit1=Out
Bit0=Out
DDRC=(1<<DDC7) | (1<<DDC6) | (1<<DDC5) | (1<<DDC4) | (1<<DDC3) |
(1<<DDC2) | (1<<DDC1) | (1<<DDC0);
// State: Bit7=1 Bit6=1 Bit5=1 Bit4=1 Bit3=1 Bit2=1 Bit1=1 Bit0=1
PORTC=(1<<PORTC7) | (1<<PORTC6) | (1<<PORTC5) | (1<<PORTC4) |
(1<<PORTC3) | (1<<PORTC2) | (1<<PORTC1) | (1<<PORTC0);

// Port D initialization
// Function: Bit7=In Bit6=In Bit5=In Bit4=In Bit3=In Bit2=In Bit1=In Bit0=In
DDRD=(0<<DDD7) | (0<<DDD6) | (0<<DDD5) | (0<<DDD4) | (0<<DDD3) |
(0<<DDD2) | (0<<DDD1) | (0<<DDD0);
// State: Bit7=T Bit6=T Bit5=T Bit4=T Bit3=T Bit2=T Bit1=T Bit0=T
PORTD=(0<<PORTD7) | (0<<PORTD6) | (0<<PORTD5) | (0<<PORTD4) |
(0<<PORTD3) | (0<<PORTD2) | (0<<PORTD1) | (0<<PORTD0);

// Globally enable interrupts


#asm("sei")

while (1)
{
PORTC=0xff;
}
}

b. Program LED menyala bergeser kekiri terus menerus dan akan berkedip sebanyak
lima kali bila tombol interrupt nol ditekan.

#include <mega16.h>
#include <delay.h>

int temp;

// Declare your global variables here

// External Interrupt 0 service routine


interrupt [EXT_INT0] void ext_int0_isr(void)
{
int i;
for(i=0;i<5;i++)
{
PORTC=0XFF;
delay_ms(1000);
PORTC=0X00;
delay_ms(1000);
}
}

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

// Input/Output Ports initialization


// Port A initialization
// Function: Bit7=In Bit6=In Bit5=In Bit4=In Bit3=In Bit2=In Bit1=In Bit0=In
DDRA=(0<<DDA7) | (0<<DDA6) | (0<<DDA5) | (0<<DDA4) | (0<<DDA3) |
(0<<DDA2) | (0<<DDA1) | (0<<DDA0);
// State: Bit7=T Bit6=T Bit5=T Bit4=T Bit3=T Bit2=T Bit1=T Bit0=T
PORTA=(0<<PORTA7) | (0<<PORTA6) | (0<<PORTA5) | (0<<PORTA4) |
(0<<PORTA3) | (0<<PORTA2) | (0<<PORTA1) | (0<<PORTA0);

// Port B initialization
// Function: Bit7=In Bit6=In Bit5=In Bit4=In Bit3=In Bit2=In Bit1=In Bit0=In
DDRB=(0<<DDB7) | (0<<DDB6) | (0<<DDB5) | (0<<DDB4) | (0<<DDB3) |
(0<<DDB2) | (0<<DDB1) | (0<<DDB0);
// State: Bit7=T Bit6=T Bit5=T Bit4=T Bit3=T Bit2=T Bit1=T Bit0=T
PORTB=(0<<PORTB7) | (0<<PORTB6) | (0<<PORTB5) | (0<<PORTB4) |
(0<<PORTB3) | (0<<PORTB2) | (0<<PORTB1) | (0<<PORTB0);

// Port C initialization
// Function: Bit7=Out Bit6=Out Bit5=Out Bit4=Out Bit3=Out Bit2=Out Bit1=Out
Bit0=Out
DDRC=(1<<DDC7) | (1<<DDC6) | (1<<DDC5) | (1<<DDC4) | (1<<DDC3) |
(1<<DDC2) | (1<<DDC1) | (1<<DDC0);
// State: Bit7=1 Bit6=1 Bit5=1 Bit4=1 Bit3=1 Bit2=1 Bit1=1 Bit0=1
PORTC=(1<<PORTC7) | (1<<PORTC6) | (1<<PORTC5) | (1<<PORTC4) |
(1<<PORTC3) | (1<<PORTC2) | (1<<PORTC1) | (1<<PORTC0);

// Port D initialization
// Function: Bit7=In Bit6=In Bit5=In Bit4=In Bit3=In Bit2=In Bit1=In Bit0=In
DDRD=(0<<DDD7) | (0<<DDD6) | (0<<DDD5) | (0<<DDD4) | (0<<DDD3) |
(0<<DDD2) | (0<<DDD1) | (0<<DDD0);
// State: Bit7=T Bit6=T Bit5=T Bit4=T Bit3=T Bit2=T Bit1=T Bit0=T
PORTD=(0<<PORTD7) | (0<<PORTD6) | (0<<PORTD5) | (0<<PORTD4) |
(0<<PORTD3) | (0<<PORTD2) | (0<<PORTD1) | (0<<PORTD0);

temp=1<<0;
PORTC=~temp;
delay_ms(1000);
#asm("sei")

while (1)
{
delay_ms(1000);
temp<<=1;
PORTC=~temp;
if (temp==0)
{
temp=1<<0;
PORTC=~temp;
}
}

c. Program motor stepper akan berputar kekanan terus menerus, bila tombol
interrupt ditekan berputar kekiri sekali, lalu kembali berputar ke kanan.
#include <mega16.h>
#include <delay.h>

int temp;

interrupt [EXT_INT0] void ext_int0_isr(void)


{
int i;
for(i=0;i<5;i++)
{
PORTC=0XFF;
delay_ms(1000);
PORTC=0X00;
delay_ms(1000);
}
}

void main(void)
{
Bit0=In
DDRA=(0<<DDA7) | (0<<DDA6) | (0<<DDA5) | (0<<DDA4) | (0<<DDA3) |
(0<<DDA2) | (0<<DDA1) | (0<<DDA0);
// State: Bit7=T Bit6=T Bit5=T Bit4=T Bit3=T Bit2=T Bit1=T Bit0=T
PORTA=(0<<PORTA7) | (0<<PORTA6) | (0<<PORTA5) | (0<<PORTA4) |
(0<<PORTA3) | (0<<PORTA2) | (0<<PORTA1) | (0<<PORTA0);

// Port B initialization
// Function: Bit7=In Bit6=In Bit5=In Bit4=In Bit3=In Bit2=In Bit1=In Bit0=In
DDRB=(0<<DDB7) | (0<<DDB6) | (0<<DDB5) | (0<<DDB4) | (0<<DDB3) |
(0<<DDB2) | (0<<DDB1) | (0<<DDB0);
// State: Bit7=T Bit6=T Bit5=T Bit4=T Bit3=T Bit2=T Bit1=T Bit0=T
PORTB=(0<<PORTB7) | (0<<PORTB6) | (0<<PORTB5) | (0<<PORTB4) |
(0<<PORTB3) | (0<<PORTB2) | (0<<PORTB1) | (0<<PORTB0);

// Port C initialization
// Function: Bit7=Out Bit6=Out Bit5=Out Bit4=Out Bit3=Out Bit2=Out Bit1=Out
Bit0=Out
DDRC=(1<<DDC7) | (1<<DDC6) | (1<<DDC5) | (1<<DDC4) | (1<<DDC3) |
(1<<DDC2) | (1<<DDC1) | (1<<DDC0);
// State: Bit7=1 Bit6=1 Bit5=1 Bit4=1 Bit3=1 Bit2=1 Bit1=1 Bit0=1
PORTC=(1<<PORTC7) | (1<<PORTC6) | (1<<PORTC5) | (1<<PORTC4) |
(1<<PORTC3) | (1<<PORTC2) | (1<<PORTC1) | (1<<PORTC0);

// Port D initialization
// Function: Bit7=In Bit6=In Bit5=In Bit4=In Bit3=In Bit2=In Bit1=In Bit0=In
DDRD=(0<<DDD7) | (0<<DDD6) | (0<<DDD5) | (0<<DDD4) | (0<<DDD3) |
(0<<DDD2) | (0<<DDD1) | (0<<DDD0);
// State: Bit7=T Bit6=T Bit5=T Bit4=T Bit3=T Bit2=T Bit1=T Bit0=T
PORTD=(0<<PORTD7) | (0<<PORTD6) | (0<<PORTD5) | (0<<PORTD4) |
(0<<PORTD3) | (0<<PORTD2) | (0<<PORTD1) | (0<<PORTD0);

temp=1<<0;
PORTC=~temp;
delay_ms(1000);
#asm("sei")

while (1)
{
delay_ms(1000);
temp<<=1;
PORTC=~temp;
if (temp==0)
{
temp=1<<0;
PORTC=~temp;
}
}
}

G. Kesimpulan
Pada percobaan kali ini, kita menggunakan Interrupt External pada program yang
dijalankan. Interrupt adalah suatu intruksi yang akan memberhentikan program utama
yang sedang bekerja untuk sementara, dan digantikan oleh program interrupt, setelah
program interrupt selesai dijalankan maka program utama akan kembali lagi bekerja
seperti semula sampai program interrupt dijalankan kembali.
LAPORAN PERCOBAAN 5
LCD & Push Button Switch

1. Tujuan :
 Mampu membuat program untuk menampilkan suatu karakter pada LCD melalui
pin I/O AVR dengan kontrol tombol tekan.
 Mampu memahami rangkaian interface mikrokontroller dengan LCD Karakter 2 x
16 dan modul LED
 Memahami cara menuliskan karakter pada posisi baris dan kolom tertentu

2. Peralatan dan komponen yang diperlukan :


 Komputer / Laptop
 Modul display LCD
 Modul PB switch
 Downloader AT MEGA853
 Software CodeVision AVR
 Power supply (5V)

3. Landasan Teori :

Gambar 4.2 LCD 16 karakter 2 baris

LCD (Liquid Crystal Display)


LCD merupakan perangkat displai yang sering digunakan dalam dunia elektronika karena
memiliki kelebihan dibanding seven segment. Kelebihan LCD yakni mampu menampilkan
angka huruf tanda baca (alphanumeric) serta ukuran karakter yang lebih kecil dibanding
7segment. Modul LCD Character dapat dengan mudah dihubungkan dengan mikrokontroller
seperti ATMEGA 8535. LCD yang akan kita lakukan percobaan ini mempunyai lebar display
2 baris 16 kolom atau biasa disebut sebagai LCD Character 2x16, dengan 16 pin konektor,
yang didifinisikan sebagai berikut.
Tabel 4.1 Pin dan Fungsi LCD

Bus data terdiri dari 4 atau 8 jalur ( bergantung pada mode operasi yang dipilih oleh user ).
Pada percobaan ini bus data 4 bit, jalur dipakai DB4 s/d DB7 Pin 11 sampai 14.
4. Urutan Percobaan :
 Menampilkan tulisan “Silahkan Tekan” pada display LCD bila tombol tidak
ditekan dan menampilkan tulisan “tombol ditekan” jika tombol ditekan dan LED
pada Port A menyala.
 Menampilkan tulisan nama mahasiswa yang bersangkutan bila tombol pada PB0
ditekan dan jika tombol PB1 ditekan menampilkan tulisan kelas EC 3B (geser
kiri).

5. Cara melakukan percobaan :


 Hubungkan Port downloader ke modul LED dan ke saluran USB laptop dan
berikan catu daya pada downloader
 Buat program dengan menggunakan CodeVision AVR lalu compile dan
Download program tersebut ke ATMega8535 pada Downloader
 Amati display LCD

6. Program Percobaan
 Program 1
#include <mega16.h>
#include <delay.h>

#asm
.equ __lcd_port=0x15 ;PORTC
#endasm

#include <alcd.h>

// Declare your global variables here

void main(void)
{

DDRA=(1<<DDA7) | (1<<DDA6) | (1<<DDA5) | (1<<DDA4) | (1<<DDA3) |


(1<<DDA2) | (1<<DDA1) | (1<<DDA0);
PORTA=(1<<PORTA7) | (1<<PORTA6) | (1<<PORTA5) | (1<<PORTA4) |
(1<<PORTA3) | (1<<PORTA2) | (1<<PORTA1) | (1<<PORTA0);

lcd_init(16);

lcd_gotoxy(0,0);
lcd_putsf(" WELCOME ");
delay_ms(1000);
while (1)
{
if (PINB.0==0)
{
lcd_gotoxy(0,0);
lcd_putsf("Tombol Ditekan!");
PORTA=0x00;
delay_ms(1000);
}
else
{
lcd_gotoxy(0,0);
lcd_putsf("Silahkan Tekan");
PORTA=0xff;
delay_ms(1000);
}
lcd_clear();
}
}

b. Program 2
#include <mega16.h>

#include <delay.h>

#asm
.equ __lcd_port=0x15 ;PORTC
#endasm

#include <alcd.h>

// Declare your global variables here


int i;

void main(void)
{

DDRA=(0<<DDA7) | (0<<DDA6) | (0<<DDA5) | (0<<DDA4) | (0<<DDA3) |


(0<<DDA2) | (0<<DDA1) | (0<<DDA0);
PORTA=(0<<PORTA7) | (0<<PORTA6) | (0<<PORTA5) | (0<<PORTA4) |
(0<<PORTA3) | (0<<PORTA2) | (0<<PORTA1) | (0<<PORTA0);

DDRB=(0<<DDB7) | (0<<DDB6) | (0<<DDB5) | (0<<DDB4) | (0<<DDB3) |


(0<<DDB2) | (0<<DDB1) | (0<<DDB0);
PORTB=(0<<PORTB7) | (0<<PORTB6) | (0<<PORTB5) | (0<<PORTB4) |
(0<<PORTB3) | (0<<PORTB2) | (0<<PORTB1) | (0<<PORTB0);

DDRC=(0<<DDC7) | (0<<DDC6) | (0<<DDC5) | (0<<DDC4) | (0<<DDC3) |


(0<<DDC2) | (0<<DDC1) | (0<<DDC0);
PORTC=(0<<PORTC7) | (0<<PORTC6) | (0<<PORTC5) | (0<<PORTC4) |
(0<<PORTC3) | (0<<PORTC2) | (0<<PORTC1) | (0<<PORTC0);

DDRD=(0<<DDD7) | (0<<DDD6) | (0<<DDD5) | (0<<DDD4) | (0<<DDD3) |


(0<<DDD2) | (0<<DDD1) | (0<<DDD0);
PORTD=(0<<PORTD7) | (0<<PORTD6) | (0<<PORTD5) | (0<<PORTD4) |
(0<<PORTD3) | (0<<PORTD2) | (0<<PORTD1) | (0<<PORTD0);
lcd_init(16);

lcd_gotoxy(0,0);
lcd_putsf(" WELCOME ");
delay_ms(1000);
lcd_clear();
while (1)
{
if (PINB.0==0)
{
lcd_clear();
lcd_gotoxy(0,0);
lcd_putsf(" BASKORO YOGA ");
delay_ms(1000);
lcd_clear();
}
if (PINB.1==0)
{
for (i=11; i>=0; i--)
{
lcd_clear();
lcd_gotoxy(i,0);
lcd_putsf("EC-3B");
delay_ms(50);
lcd_clear();
}
}
};
}

7. Kesimpulan
Pada dasarnya LCD memiliki fungsi yang hampir sama dengan Seven Segment, tetapi
LCD memiliki lebih banyak fitur terutama pada bagian tampilannya, LCD dapat
menampilkan huruf, angka, dan karakter lainnya, dan juga dapat diatur letak/posisi
karakter yang akan ditampilkan. Output pada LCD dapat diubah menggunakan push
button sesuai dengan program yang telah dibuat. Maka dari itu LCD sering digunakan
sebagai display pada suatu rangkaian.

Anda mungkin juga menyukai