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.
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.
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
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.
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) ;
};
}
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
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
c) Hasil Percobaan
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
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
6. Program Percobaan
a. Program menampilkan angka desimal pada 7 segment
#include <mega16.h>
#include <delay.h>
while(1)
{
angka=0;
for(angka=0;angka<10;angka++)
{
for(i=0;i<100;i++)
{
PORTC=angka;
delay_ms(1000);
}
}
};
}
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.
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
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.
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>
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
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
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)
{
// 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);
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;
void main(void)
{
// Declare your local variables here
// 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;
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
3. Landasan Teori :
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).
6. Program Percobaan
Program 1
#include <mega16.h>
#include <delay.h>
#asm
.equ __lcd_port=0x15 ;PORTC
#endasm
#include <alcd.h>
void main(void)
{
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>
void main(void)
{
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.