: 4.35.11.0.14
I.
Dasar Teori
Mikrokontroler seri AVR pertama kali diperkenalkan ke pasaran sekitar tahun 1997
oleh perusahaan Atmel, sebuah perusahaan yang sangat terkenal dengan produk
mikrokontroler seri AT89S51/52-nya yang hingga sekarang masih banyak digunakan.
Tidak seperti mikrokontroler seri AT89S51/52 yang masih mempertahankan arsitektur dan
set instruksi dasar mikrokontroler 8031 dari perusahaan INTEL, mikrokontroler AVR ini
diklaim memiliki arsitektur dan set instruksi yang benar-benar baru dan berbeda dengan
mikrokontroler sebelumnya. Meskipun demikian, bagi para programmer yang telah
terbiasa dengan mikrokontroler seri AT89S51/52, dan berencana untuk beralih ke
mikrokontroler AVR, secara teknis tidak akan banyak menemui kesulitan yang berarti. Hal
ini dikarenakan selain konsep dan istilah-istilah dasarnya yang hampir sama, pemrograman
level assembler-nya pun relatif tidak jauh berbeda.
Berdasarkan arsitekturnya, AVR merupakan mikrokontroler dengan konsep RISC
(Reduce Instruction Set Computer) yang mempunyai lebar bus data 8 bit. Berbeda dengan
sistem AT89S51/52 yang memiliki frekuensi kerja seperduabelas kali frekuensi osilator,
frekuensi kerja mikrokontroler AVR sama dengan frekuensi osilator, sehingga kecepatan
kerja AVR untuk frekuensi osilator yang sama akan dua belas kali lebih cepat
dibandingkan dengan mikrokontroler keluarga AT89S51/52.
Dengan instruksi yang sangat variatif _mirip dengan sistem CISC (Complex Instruction
Set Computer)_ serta jumlah register serbaguna (General Purpose Register) sebanyak 32
buah yang terhubung secara langsung ke ALU (Arithmetic Logic Unit), kecepatan operasi
mikrokontroler AVR ini dapat mencapai 16 MIPS (enam belas juta instruksi per detik),
sebuah kecepatan yang sangat tinggi untuk ukuran mikrokontroler 8 bit yang ada di
pasaran sampai saat ini.
Untuk memenuhi kebutuhan dan aplikasi industri yang sangat beragam, mikrokontroler
keluarga AVR muncul di pasaran dengan tiga seri utama: tinyAVR, ClassicAVR (AVR),
dan megaAVR. Berikut ini beberapa seri yang dapat anda jumpai di pasaran:
Pak
et IC
TinyAVR
8
32 pin
AVR(classic AVR)
20
44 pin
MegaAVR
32
Flas
h
EEP
ROM
1
2K
1
8K
8
64
128
128
512
512
SR
AM
0
128
0
1K
512
64 pin
128 K
4K
4K
Seperti terlihat pada tabel di atas, semua jenis AVR ini telah dilengkapi oleh memori
flash sebagai memori program. Kapasitas memori flash yang dimiliki bervariasi dari 1K
hingga 128 KB tergantung pada serinya. Secara teknis memori jenis ini dapat diprogram
melalui saluran antarmuka yang dikenal dengan nama Serial Peripheral Interface (SPI)
yang terdapat pada setiap seri AVR tersebut. Dengan menggunakan perangkat lunak
programmer (downloader) yang tepat, pengisian memori flash dapat dilakukan bahkan
ketika chip AVR telah terpasang pada sistem akhir (end system). Dengan demikian
pemrograman menjadi sangat fleksibel dan tidak merepotkan pengguna (Secara praktis
metode ini dikenal dengan istilah ISP - In System Programming , sedangkan perangkat
lunaknya dinamakan In System Programmer).
Untuk penyimpanan data, mikrokontroler AVR menyediakan dua jenis memori yang
berbeda: EEPROM (Electrically Erasable Programmable Read Only Memory) dan SRAM
(Static Random Access memory). Secara umum EEPROM digunakan untuk menyimpan
data-data program yang bersifat permanen, sedangkan SRAM digunakan untuk
menyimpan data variabel yang dimungkinkan berubah setiap saat. Kapasitas penyimpanan
data kedua memori ini bervariasi tergantung pada jenis AVR-nya (lihat tabel 1.1). Untuk
seri AVR yang tidak memiliki SRAM, penyimpanan data variabel dapat dilakukan pada
register serbaguna yang terdapat pada CPU mikrokontroler tersebut.
Selain seri-seri umum di atas, perusahaan Atmel juga memproduksi beberapa jenis
mikrokontroler AVR untuk tujuan yang lebih khusus dan terbatas, seperti seri AT86RF401
yang khusus digunakan untuk aplikasi wireless remote control dengan menggunakan
gelombang radio (RF), serta seri AT90SC yang khusus digunakan untuk peralatan sistemsistem keamanan kartu SIM GSM, pembayaran via internet, dan lain sebagainya.
Mikrokontroler ATMega 128 adalah mikrokontroler yang telah dilengkapi EEPROM
sebesar 4Kbyte didalam chipnya. EEPROM ini terpisah dari flash memory AVR, dan dapat
ditulis, baca per byte. Untuk dapat mengakses EEPROM ini perlu mengatur register-
register dan fuse bit. Untuk mencegah kesalahan dalam penulisan dan pembacaan
EEPROM diusahakan power supply yang digunakan cukup stabil.
Saat pembacaan EEPROM mikrokontroler berhenti selama 4 cycle clock sebelum
mengerjakan perintah berikutnya dan untuk menulis EEPROM mikrokontroler berhenti
selama 2 cycle clock sebelum mengerjakan perintah berikutnya.
Register-register yang perlu diatur adalah :
EEPROM address register
Sistem yang memiliki kinerja tinggi ini sangat ideal untuk beragam aplikasi, termasuk
embedded controller, robot, sistem remote control dan yang lainnya.
Board ini memaksimalkan kemampuan yang dimiliki ATmega128, dengan flash
memory yang besar, kecepatan eksekusi yang tinggi, jumlah pin I/O dalam jumlah besar,
analog to digital converter, dan yang lainnya.
Program dapat di-download ke dalam chip melalui koneksi ISP yang sudah disediakan
(ISP Programmer opsional).
Modul menyediakan 8 kanal A/D Converter 10-bit, 2 buah PWM 8-bit yang dapat
digunakan untuk mengendalikan motor dan 2 buah UART untuk interfacing dengan
komputer atau sistem monitor lainnya. Dengan 53 pin I/O, sangat memadai untuk
kebutuhan interfacing dalam jumlah yang besar. Sejumlah modus power saving tersedia
untuk mendukung pengoperasian dengan batere. Juga Real-Time Counter dan dua 16-bit
Timer yang tersedia di dalam mikrokontroler.
}11) Simpan
delay_ms(100);
kendali=0x02;
data=0x82;
delay_ms(100) ;
kendali=0x01;
data=0xf8;
delay_ms(100);
}
}
3. Jalankan hasil compilasi Program di langkah 2 pada desain yang dibuat pada langkah
2.1. Lihat hasilnya.
4. Ubah delay menjadi: 10 ms, amati perubahan tampilan 7-segmen dibanding
sebelumnya.
5. Ulangi langkah 4 untuk delay 1 ms, 100 us, atau yang lebih kecil lagi, amati
perubahannya.
B. Tugas 2.2:
Buat program menampilkan angka 98765432 dalam display secara bersamaan .
1.buat file dengan nama Job02_tugas02_43511014.c
2. masukkan kode dalam progam seperti di bawah ini:
#include <mega128.h>
#include <delay.h>
#include <stdio.h>
#define data PORTE
#define kendali PORTF
void main(void){
DDRF=0xFF;
DDRE=0xFF;
while(1){
kendali=0x80;
data=0xA4; //2
delay_us(100);
kendali=0x40;
data=0xb0; //3
delay_us(100);
kendali=0x20;
data=0x99; //4
delay_us(100);
kendali=0x10;
data=0x92; //5
delay_us(100);
kendali=0x08;
data=0x82; //6
delay_us(100);
kendali=0x04;
data=0xf8; //7
delay_us(100);
kendali=0x02;
data=0x80; //8
delay_us(100);
kendali=0x01;
data=0x90; //9
delay_us(100);
}}
data=segment(l);
delay_us(100);
kendali=0x08;
data=segment(k);
delay_us(100);
kendali=0x04;
data=segment(10);
delay_us(100);
kendali=0x02;
data=segment(j);
delay_us(100);
kendali=0x01;
data=segment(h);
delay_us(100);
}
void main(void){
unsigned char h,m,s;
int i,ulang;
DDRF=0xFF;
DDRE=0xFF;
while(1){
h=00;
m=00;
s=00;
for(i=1;i<=10;i++)
{
for(ulang=1;ulang<=100;ulang++)
{
tampil_seg(h,m,s);
}
s=s++;
}
}
}
3. Jalankan hasil compilasi Program di langkah 2 pada desain yang dibuat pada langkah
2.1. Lihat
hasilnya.
B. Tugas 2.3:
Buat program menampilkan STOP-WACTH.
1.buat file dengan nama Job02_tugas03_43511014.c
2. masukkan kode dalam progam seperti di bawah ini:
Chip type
: ATmega128
Program type
: Application
AVR Core Clock frequency: 11.059200 MHz
Memory model
: Small
External RAM size
:0
Data Stack size
: 1024
*****************************************************/
#include <mega128.h>
#include <delay.h>
#include <stdio.h>
#define data PORTE
#define kendali PORTF
flash unsigned char segment (unsigned char c)
{char tab[11]={0xC0,0xF9,0xA4,0xB0 ,0x99 ,0x92 ,0x82, 0xF8 ,0x80,0X90,0xBF}; //tabel data
untuk seven segmen
return tab[c];}
// Declare your global variables here
void tampil_seg(unsigned char jam, unsigned char menit, unsigned char detik){
unsigned char h,j,k,l,m,n;
h=jam/10;
j=jam%10;
k=menit/10;
l=menit%10;
m=detik/10;
n=detik%10;
kendali=0x80;
data=segment(n);
delay_us(100);
kendali=0x40;
data=segment(m);
delay_us(100);
kendali=0x20;
data=segment(10);
delay_us(100);
kendali=0x10;
data=segment(l);
delay_us(100);
kendali=0x08;
data=segment(k);
delay_us(100);
kendali=0x04;
data=segment(10);
delay_us(100);
kendali=0x02;
data=segment(j);
delay_us(100);
kendali=0x01;
data=segment(h);
delay_us(100);
}
void main(void){
unsigned char h,m,s; int i,j,k, ulang;
DDRF=0xFF;
DDRE=0xFF;
while(1){
h=00;
for(i=1;i<=9;i++){
m=00;
for(j=1;j<=9;j++){
s=00;
for(k=1;k<=9;k++){
for(ulang=1;ulang<=10;ulang++){
tampil_seg(h,m,s);
}
s=s++;
}
m=m++;}
h=h++;
}} }
Gambar 2.2 Desain Proteus untuk Percobaan Menggunakan Modul LCD 2x16
2. Buat program berikut
3. Jalankan hasil compilasi Program di langkah 2 pada desain yang dibuat pada langkah
1. Lihat hasilnya.
B. Tugas 2.4:
Buat program menampilkan nama anda di baris pertama, dan NIM anda di baris kedua
!
1.buat progam file dengan nama job2(LCD)_Tugas 1_43511014.c
2.2.2 Tampilan LCD Dinamik
A. Langkah kerja
1. Buat program berikut
void sett_regs(void){
DDRC = 0x00;PORTC = 0x00;
}
// Display routine
void tampilan(void){
unsigned int i,j;
_lcd_ready();
lcd_clear();
lcd_gotoxy(0,0);
lcd_putsf("TEKNIK ANTARMUKA");
for (i=lcd_number; i>=0; --i){
if (i > lcd_number)break;
lcd_gotoxy(i,1);
for (j=0; j<(lcd_number-i); j++){
lcd_putchar(buffer_lcd[j]);
}
delay_ms(30); //ubah untuk kecepatan pergeseran text
};
}
2. Jalankan hasil compilasi Program di langkah 2 pada desain yang dibuat pada langkah
1. Lihat hasilnya.
B. Tugas 2.5:
Buat program menampilkan nama anda di baris pertama, dan NIM anda di baris
kedua, dengan baris atas bergerak ke kiri danbaris bawah bergerak ke kanan!
1.buat progam file dengan nama job2(LCD)_Tugas 2_43511014.c
2. Ketikkan kode dibawah ini
/*****************************************************
MOH.LUTFI.ANDRIAN
JRK2A
4.35.11.0.14
This program was produced by the
CodeWizardAVR V1.25.9 Standard
Automatic Program Generator
Copyright 1998-2008 Pavel Haiduc, HP InfoTech s.r.l.
http://www.hpinfotech.com
Project :
Version :
Date : 3/25/2013
Author : F4CG
Company : F4CG
Comments:
Chip type
: ATmega128
Program type
: Application
Clock frequency : 11.059200 MHz
Memory model
: Small
External SRAM size : 0
Data Stack size : 1024
*****************************************************/
#include <mega128.h>
// Alphanumeric LCD Module functions
#asm
.equ __lcd_port=0x03 ;//PORTE
//.equ __lcd_port=0x15 ;PORTC
#endasm
// Standard Input/Output functions
#include <lcd.h>
#include <delay.h>
#include <string.h>
char buffer_lcd[]=" MOH LUTFI ANDRIAN ";//space required
char lcd_number = 16;
char buffer_lcd1[]="4.35.11.0.14";//space required
char lcd_number1 = 15;
// Function prototype
void sett_regs(void);
void tampilan(void);
// Main routine (super loop)
void main(void){
sett_regs();
lcd_init(16);
_lcd_ready();
lcd_clear();
for(;;){// Endless loop, serupa "while(1)"
tampilan();
}
}
// Setting register
void sett_regs(void){
DDRC = 0x00;PORTC = 0x00;
}
// Display routine
void tampilan(void){
unsigned int i,j,k,l;
_lcd_ready();
lcd_clear();
Chip type
: ATmega128
Program type
: Application
AVR Core Clock frequency: 11.059200 MHz
Memory model
: Small
External RAM size
:0
Data Stack size
: 1024
*****************************************************/
#include <mega128.h>
// Alphanumeric LCD Module functions
#asm
.equ __lcd_port=0x03 //PORTC
#endasm
#include <stdlib.h>
#include <lcd.h>
#include <stdio.h>
unsigned char buffer1[16];
unsigned char buffer2[16];
float yy;
// Declare your global variables here
void main(void){
DDRC = 0x00;
PORTC = 0xFF;
lcd_init(16);
lcd_clear();
while (1)
{
float xx;
unsigned int x;
x=PINC;
xx=x;
yy=xx/3;
sprintf(buffer1,"Input asli: %d ",x);
sprintf(buffer2,"Konversi: %.2f ",yy);
lcd_gotoxy(0,0);
lcd_puts(buffer1);
lcd_gotoxy(0,1);
lcd_puts(buffer2);
};
};
2. Jalankan hasil compilasi Program di langkah 2 pada desain yang dibuat pada Gambar
2.2. Geser DIP-switch, Lihat dan bandingkan hasilnya.
B. Tugas 2.6:
Buat program simulasi Prototipe Sistem Pengukur Suhu :
a) Asumsi : Dip-switch sebagai simulator ADC (range data: 0-255)
b) Prinsip kerja : Range suhu : 0 100 C, dengan konversi sebagai berikut:
Input (desimal)
Suhu (C)
0 - 20
21-220
Input
naik
desimal
setara
dengan
kenaikan
suhu 0.5 C
221 - 255
100
Chip type
: ATmega128
Program type
: Application
AVR Core Clock frequency: 11.059200 MHz
Memory model
: Small
External RAM size
:0
Data Stack size
: 1024
*****************************************************/
#include <mega128.h>
// Alphanumeric LCD Module functions
#asm
.equ __lcd_port=0x03 //PORTC
#endasm
#include <stdlib.h>
#include <lcd.h>
#include <stdio.h>
unsigned char buffer1[16];
unsigned char buffer2[16];
float yy;
// Declare your global variables here
void main(void){
DDRC = 0x00;
PORTC = 0xFF;
lcd_init(16);
lcd_clear();
while (1)
{
float xx;
unsigned int x;
x=PINC;
xx=x;
if(xx<=20)
{yy=0;
sprintf(buffer1,"Input asli: %d ",x);
sprintf(buffer2,"Konversi: %.2f ",yy);
lcd_gotoxy(0,0);
lcd_puts(buffer1);
lcd_gotoxy(0,1);
lcd_puts(buffer2);
}
if (xx>20)
{
if (xx<=220)
{yy=(xx-20)*0.5;
sprintf(buffer1,"Input asli: %d ",x);
sprintf(buffer2,"Konversi: %.2f ",yy);
lcd_gotoxy(0,0);
lcd_puts(buffer1);
lcd_gotoxy(0,1);
lcd_puts(buffer2);
}}
if
(xx>220)
{yy=100;
sprintf(buffer1,"Input asli: %d ",x);
sprintf(buffer2,"Konversi: %.2f ",yy);
lcd_gotoxy(0,0);
lcd_puts(buffer1);
lcd_gotoxy(0,1);
lcd_puts(buffer2);
}
};
};
III.
Hasil
Percobaan 1
Percobaan 02
Percobaan 03
Tugas 01
Tugas 03
Percobaan 4 LCD
Percobaan 5 LCD
Tugas 04
Tugas 05
Percobaan 2.6
Tugas 2.6
IV.
Pembahasan
Pada praktikum Job II yakni tentang AVR MIKROKONTOLLER ATmega 128 input
Dan output Lanjutan menggunakan LED sevent segment Dan input output Lanjutan
menggunakan TampilanLCD, ini dapat kita analisa bahwa semua program dapat yang
dikerjakan berjalan dengan baik dan benar, Adapun pada program pertama yang
menampilkan angka 0 .s.d. 7 secara berurutan pada digit 1 hingga digit 8. Kemudian kedua
menampilkan LED Seven segment menampilkan angka 98765432 dalam display secara
bersamaan . Led 7segmen nyala semua sesuai urutan bit ,Led seven segment nyala secara
bergantian dari kiri ke kanan sesuaiurutan bit dengan delay yang berbeda dengan begitu
Led nyala semua seolah olah bersamaan ,jika dengan memasukkan delay yang sama yaitu
10 ms menyala dari D1 sampai D8 secara berurutan dan berulang-ulang. Dan percobaan
ketiga untuk menampilkan STOP-WACTH sampai keenam cara pengerjaannya Adalah
dengan prinsip yang sama yaitu dengan menggunakan Metode Input dan output Lanjutan
,Pada Tugas 2.6 Yang menampilkan program simulasi Prototipe Sistem Pengukur Suhu
(range data: 0-255),Range suhu : 0 100 C, dengan konversi sebagai berikut:
Input (desimal)
Suhu (C)
0 - 20
Kondisi if else
if(xx<=20)
{yy=0;
21-220
221 - 255
Input naik 1
desimal setara
dengan kenaikan
suhu 0.5 C
100
if (xx>20)
{
if (xx<=220)
{yy=(xx-20)*0.5;
if
(xx>220)
{yy=100;