Anda di halaman 1dari 16

1

LAPORAN PRAKTIKUM I
EEPROM DALAM MIKROKONTROLER ATmega8535
Untuk memenuhi Tugas Mata Kuliah Sistem Mikrokontroler Lanjut
Yang di bimbing oleh Ibu Dyah Lestari, S. T., M.Eng.

Oleh :
Alvina Rizky
190532547220
D3 ELKA ’19 OFF A

UNIVERSITAS NEGERI MALANG


FAKULTAS TEKNIK
JURUSAN TEKNIK ELEKTRO
PROGRAM STUDI D3 TEKNIK ELEKTRONIKA
Februari 2021
2

MODUL I
EEPROM DALAM MIKROKONTROLER ATmega8535

TUJUAN
 Mahasiswa dapat menjelaskan cara menggunakan EEPROM internal dalam
mikrokontroler ATmega8535 untuk menyimpan data.
 Mahasiswa dapat mempraktekkan penyimpanan dan pembacaan data di dalam
EEPROM internal dalam mikrokontroler ATmega 8535.

EEPROM
EEPROM (Electrically Erasable Programmable Read Only Memory) merupakan
memori yang dapat menyimpan data, dimana data tersebut akan tetap ada meskipun catu
daya dimatikan. Data yang tersimpan dalam EEPROM dapat dihapus dengan sinyal listrik
dengan tegangan tertentu.
EEPROM internal dalam mikrokontroler ATmega8535 mempunyai kapasitas 512 byte
dan dipetakan sendiri dengan alamat mulai 00H-FFH. EEPROM hanya dapat diakses melalui
register (EEARH, EEARL, EEDR dan EECR) dan operasi read/write yang tertentu sehingga
waktu aksesnya lebih lamban dari pada mengakses register ataupun SRAM.
Register yang digunakan untuk mengakses EEPROM ada 3 yaitu:
- EEARH dan EEARL
- EEDR
- EECR

A. EEPROM Address Register (EEARH dan EEARL)

Bit 8..0: EEAR8..0: EEPROM Address, adalah tempat meletakkan alamat secara linier
untuk EEPROM mulai 0-511. Nilai awalnya tidak ada, sehingga ketika akan digunakan
harus diberi nilai terlebih dahulu.

B. EEPROM Data Register (EEDR)

EEDR berisi data yang akan ditulis ke dalam atau dibaca dari EEPROM dalam alamat
yang ditulis dalam register EEAR.

C. EEPROM Control Register (EECR)

 Bit 3 - EERIE: EEPROM Ready Interrupt Enable


3
Menulis logika 1 ke EERIE berarti mengaktifkan EEPROM Ready Interrupt jika bit I
dalam register SREG diberi logika 1. Menulis logika 0 ke EERIE berarti menonaktifkan
interrupt. EEPROM Ready Interrupt membangkitkan interrupt secara terus menerus
jika EEWE diberi logika 0.
 Bit 2 - EEMWE: EEPROM Master Write Enable
EEMWE bersama dengan EEWE digunakan untuk menulis data ke EEPROM. Ketika
EEMWE diberi logika 1, memberi logika 1 pada EEWE dalam 4 siklus clock akan
menulis data ke EEPROM pada alamat tertentu. Jika EEMWE diberi logika 0,
memberi logika 1 pada EEWE tidak akan berpengaruh apa-apa. Jika EEMWE diberi
logika 1 oleh software, hardware akan mengubah logikanya ke 0 setelah 4 siklus
clock.
 Bit 1 – EEWE: EEPROM Write Enable
EEWE digunakan untuk menulis ke EEPROM. Ketika alamat dan data yang diset
sudah benar, EEWE harus diberi logika 1 untuk menulis data ke EEPROM. EEMWE
harus diberi logika 1 sebelum EEWE diberi logika 1, jika tidak maka tidak akan
terjadi proses menulis data ke EEPROM.
 Bit 0 – EERE: EEPROM Read Enable
EERE digunakan untuk membaca data dari EEPROM. Ketika alamat yang diset EEAR
sudah benar, EERE harus diberi logika 1 untuk membaca data ke EEPROM.

ALAT DAN BAHAN YANG DIGUNAKAN


 1 set PC/Laptop yang sudah berisi program Code Vision dan Khazama
 1 set modul praktikum mikrokontroler
 LCD display 16x2

PROSEDUR
1. Rangkailah peralatan yang diperlukan seperti dalam Gambar 1.1. Hubungkan soket
jumper PORTB pada minimum system dengan soket jumper LED/OUTPUT pada I/O.

Kabel Kabel hitam


Kabel USB
downloader Minimum
ISP Downloader I/O
system AVR

Gambar 1.1 Diagram antarmuka mikrokontroler dengan I/O.

2. Buka program Code Vision AVR


3. Buatlah project baru. Setelah mengeset chip dan clock, set juga bagian PORTB
sebagai output dengan output value = 0. Kemudian simpanlah file tersebut sehingga
pada program bagian inisialisasi PORTB terlihat sebagai berikut:
PORTB=0x00;
DDRB=0xff;

4. Buatlah program untuk mengakses 1 alamat di EEPROM secara langsung (directly)


dengan urutan: membaca data di alamat tersebut, menulis data ke alamat tersebut,
dan membaca data di alamat tersebut sekali lagi. Tampilkan data yang dibaca ke LED
di PORTB.
4
5. Catat alamat dan data yang pertama kali dibaca, alamat dan data yang ditulis, serta
alamat dan data yang dibaca kedua kalinya dalam Tabel 1.1.
6. Buatlah program untuk mengakses 1 alamat di EEPROM secara tidak langsung
(indirectly/menggunakan pointer) dengan urutan: membaca data di alamat tersebut,
menulis data ke alamat tersebut, dan membaca data di alamat tersebut sekali lagi.
Tampilkan data yang dibaca ke LED di PORTB.
7. Catat alamat dan data yang pertama kali dibaca, alamat dan data yang ditulis, serta
alamat dan data yang dibaca kedua kalinya dalam Tabel 1.2.
8. Buatlah program kombinasi toggle switch, EEPROM dan LED untuk:
 Menampilkan hasil pembacaan EEPROM secara berurutan ke LED (PORTB)
mulai dari alamat 0, 1, 2, 3, dan 4 sebelum EEPROM diisi jika toggle switch 1
diaktifkan.
 Menyimpan data berurutan jika toggle switch 2 diaktifkan dengan alamat dan
data sebagai berikut:
1. menyimpan bilangan 0x11 ke EEPROM alamat 0,
2. menyimpan bilangan 0x22 ke EEPROM alamat 1,
3. menyimpan bilangan 0x33 ke EEPROM alamat 2,
4. menyimpan bilangan 0x44 ke EEPROM alamat 3,
5. menyimpan bilangan 0x55 ke EEPROM alamat 4.
9. Download program tersebut ke mikrokontroler
10. Aktifkan toggle switch 1 dahulu dan catat nyala LED dalam Tabel 1.3. Kemudian
nonaktifkan togle switch 1 dan aktifkan toggle switch 2. Terakhir nonaktifkan togle
switch 2 dan aktifkan toggle switch 1 dan catat nyala LED.
11. Lepaskan kabel USB dari komputer, sambungkan kembali kabel USB ke komputer dan
lakukan langkah 10.
12. Lakukan seperti langkah 8-11 dengan program kombinasi toggle switch, EEPROM dan
LCD display untuk menyimpan data ke 5 alamat tertentu ke EEPROM dan
menampilkan kelima data tersebut bersama alamatnya ke LCD display. Catat alamat
dan data dalam Tabel 1.4.

DATA HASIL PERCOBAAN

1. Program untuk mengakses 1 alamat di EEPROM secara langsung (directly)


#include <mega8535.h>
#include <delay.h>

// Declare your global variables here


void EEPROM_write(unsigned int uiAddress, unsigned char ucData){
//menunggu proses sebelumnya selesai
while(EECR&(1<<EEWE));
//mengisi data alamat dan data register
EEAR = uiAddress;
EEDR = ucData;
//menulis logika 1 ke EEMWE untuk menulis data
EECR |=(1<<EEMWE);
//memulai menulis data di eeprom
EECR|=(1<<EEWE);
}
5
unsigned char EEPROM_read(unsigned int uiAddress){
//menunggu prosees sebelumnya selesai
while(EECR&(1<<EEWE));
//set address register
EEAR = uiAddress;
//membaca eeprom
EECR |= (1<<EERE);
//return dari Data Register
return EEDR;
}

void main(void)
{
// Declare your local variables here
PORTA=0xFF; //state=Toogle
DDRA=0x00; //func=input

PORTB=0x00; //state=0
DDRB=0xFF; //func=output

while (1)
{
//membaca data dari eeprom
if(PINA.0==1){
delay_ms(50); //delay debouncing
PORTB = EEPROM_read(0x00);
}

//menulis data ke eeprom


if(PINA.1==1){
delay_ms(50); //delay debouncing
EEPROM_write(0x00, 0xAA);
}

}
}

2.
Tabel 1.1 Akses EEPROM secara Langsung
No Proses EEPROM Alamat Data
1 Pembacaan data I 0x00 0x00
2 Penulisan data 0x00 0xAA
3 Pembacaan data II 0x00 0xAA
Pembacaan Data I
6

Pembacaan Data II

3. Program untuk mengakses 1 alamat di EEPROM secara tidak langsung (indirectly)


#include <mega8535.h>
#include <delay.h>
// Declare your global variables here
int eeprom *ptr_to_eeprom;
int i;

void main(void)
{
// Declare your local variables here
PORTA=0xFF; //state=Toogle
DDRA=0x00; //func=input

PORTB=0x00; //state=0
DDRB=0xFF; //func=output
7
while (1)
{
//membaca data dari eeprom
if(PINA.0==1){
delay_ms(50); //delay debouncing
ptr_to_eeprom = 0; //alamat 0 eeprom
i = *ptr_to_eeprom; //memanggil data pada alamat 0
PORTB = i; //menampilkan data alamat 0
}

//menulis data ke eeprom


if(PINA.1==1){
delay_ms(50); //delay debouncing
i = 0x55; //data
ptr_to_eeprom = 0; //alamat 0 eeprom
*ptr_to_eeprom = i; //menulis data pada eeprom
}

}
}

4.
Tabel 1.2 Akses EEPROM secara Tidak Langsung/dengan Pointer
No Proses EEPROM Alamat Data
1 Pembacaan data I 0x00 0x00
2 Penulisan data 0x00 0xAA
3 Pembacaan data II 0x00 0xAA

Pembacaan Data I

Pembacaan Data II
8

5. Program kombinasi toggle switch, EEPROM dan LED

#include <mega8535.h>
#include <delay.h>
// Declare your global variables here
void EEPROM_write(unsigned int uiAddress, unsigned char ucData){
//menunggu proses sebelumnya selesai
while(EECR&(1<<EEWE));
//mengisi data alamat dan data register
EEAR = uiAddress;
EEDR = ucData;
//menulis logika 1 ke EEMWE untuk menulis data
EECR |=(1<<EEMWE);
//memulai menulis data di eeprom
EECR|=(1<<EEWE);
}

unsigned char EEPROM_read(unsigned int uiAddress){


//menunggu prosees sebelumnya selesai
while(EECR&(1<<EEWE));
//set address register
EEAR = uiAddress;
//membaca eeprom
EECR |= (1<<EERE);
//return dari Data Register
return EEDR;
}

void main(void)
{
// Declare your local variables here
PORTA=0xFF; //state=Toogle
DDRA=0x00; //func=input
9

PORTB=0x00; //state=0
DDRB=0xFF; //func=output

while (1)
{
//membaca data dari eeprom
if(PINA.0==1){
delay_ms(50); //delay debouncing
PORTB = EEPROM_read(0x00);
delay_ms(500);
PORTB = EEPROM_read(0x01);
delay_ms(500);
PORTB = EEPROM_read(0x02);
delay_ms(500);
PORTB = EEPROM_read(0x03);
delay_ms(500);
PORTB = EEPROM_read(0x04);
delay_ms(500);
}

//menulis data ke eeprom


if(PINA.1==1){
delay_ms(50); //delay debouncing
EEPROM_write(0x00, 0x11);
EEPROM_write(0x01, 0x22);
EEPROM_write(0x02, 0x33);
EEPROM_write(0x03, 0x44);
EEPROM_write(0x04, 0x55);
}

}
}

6.
Tabel 1.3 Program kombinasi toggle switch, EEPROM dan LED
Alama Alama
No Proses EEPROM Data Proses EEPROM Data
t t
0 0xff 0 0x11
Pembacaan data I Pembacaan data I
1 0xff 1 0x22
sebelum catu setelah catu daya
1 2 0xff 2 0x33
daya dilepas dilepas
2 0xff 3 0x44
4 0xff 4 0x55
2 Penulisan data 0 0x11 Penulisan data 0 0x11
sebelum catu 1 0x22 setelah catu daya 1 0x22
daya dilepas 2 0x33 dilepas 2 0x33
3 0x44 3 0x44
10
4 0x55 4 0x55
0 0x11 0 0x11
Pembacaan data 1 0x22 Pembacaan data II 1 0x22
3 II sebelum catu 2 0x33 setelah catu daya 2 0x33
daya dilepas 3 0x44 dilepas 3 0x44
4 0x55 4 0x55

Nilai Data Tampilan


0x11

0x22
11
0x33

0x44

0x55

7. Program kombinasi toggle switch, EEPROM dan LED


#include <mega8535.h>
#include <delay.h>
12
#include <alcd.h>
#include <stdlib.h>

// Alphanumeric LCD functions


#include <alcd.h>

// Declare your global variables here


char uiAddress1[20]; //menyimpan alamat
char uiAddress2[20];
char uiAddress3[20];
char uiAddress4[20];
char uiAddress5[20];
char ucData1[20]; //menyimpan data
char ucData2[20];
char ucData3[20];
char ucData4[20];
char ucData5[20];

void menampilkanKeLCD(int i){


lcd_clear();
lcd_gotoxy(0,0);
lcd_putsf("Addr: ");
lcd_gotoxy(0,1);
lcd_putsf("Data: ");
if (i == 1){ lcd_gotoxy(6,0);
lcd_puts(uiAddress1);lcd_gotoxy(6,1);lcd_puts(ucData1);}
if (i == 2){ lcd_gotoxy(6,0);
lcd_puts(uiAddress2);lcd_gotoxy(6,1);lcd_puts(ucData2);}
if (i == 3){ lcd_gotoxy(6,0);
lcd_puts(uiAddress3);lcd_gotoxy(6,1);lcd_puts(ucData3);}
if (i == 4){ lcd_gotoxy(6,0);
lcd_puts(uiAddress4);lcd_gotoxy(6,1);lcd_puts(ucData4);}
if (i == 5){ lcd_gotoxy(6,0);
lcd_puts(uiAddress5);lcd_gotoxy(6,1);lcd_puts(ucData5);}
}

void EEPROM_write(unsigned int uiAddress, unsigned char ucData){


//menunggu proses sebelumnya selesai
while(EECR&(1<<EEWE));
//mengisi data alamat dan data register
EEAR = uiAddress;
EEDR = ucData;
//menulis logika 1 ke EEMWE untuk menulis data
EECR |=(1<<EEMWE);
//memulai menulis data di eeprom
EECR|=(1<<EEWE);
//mengkonversi alamat dan data agar bisa ditampilkan ke lcd
if(uiAddress == 0x00){ itoa(uiAddress,uiAddress1); itoa(ucData,ucData1);}
if(uiAddress == 0x01){ itoa(uiAddress,uiAddress2); itoa(ucData,ucData2);}
13
if(uiAddress == 0x02){ itoa(uiAddress,uiAddress3); itoa(ucData,ucData3);}
if(uiAddress == 0x03){ itoa(uiAddress,uiAddress4); itoa(ucData,ucData4);}
if(uiAddress == 0x04){ itoa(uiAddress,uiAddress5); itoa(ucData,ucData5);}
}

unsigned char EEPROM_read(unsigned int uiAddress){


//menunggu prosees sebelumnya selesai
while(EECR&(1<<EEWE));
//set address register
EEAR = uiAddress;
//membaca eeprom
EECR |= (1<<EERE);
//return dari Data Register
return EEDR;
}

void main(void)
{
// Declare your local variables here
PORTA=0xFF; //state=Toogle
DDRA=0x00; //func=input

PORTB=0x00; //state=0
DDRB=0xFF; //func=output

lcd_init(16);

while (1)
{
//membaca data dari eeprom
if(PINA.0==1){
delay_ms(50); //delay debouncing
PORTB = EEPROM_read(0x00);
menampilkanKeLCD(1);//menampilkan eeprom alamat 0x00
delay_ms(200);
PORTB = EEPROM_read(0x01);
menampilkanKeLCD(2);//menampilkan eeprom alamat 0x01
delay_ms(200);
PORTB = EEPROM_read(0x02);
menampilkanKeLCD(3);//menampilkan eeprom alamat 0x02
delay_ms(200);
PORTB = EEPROM_read(0x03);
menampilkanKeLCD(4);//menampilkan eeprom alamat 0x03
delay_ms(200);
PORTB = EEPROM_read(0x04);
menampilkanKeLCD(5);//menampilkan eeprom alamat 0x04
delay_ms(200);
}
14
//menulis data ke eeprom
if(PINA.1==1){
delay_ms(50); //delay debouncing
EEPROM_write(0x00, 0x11);
EEPROM_write(0x01, 0x22);
EEPROM_write(0x02, 0x33);
EEPROM_write(0x03, 0x44);
EEPROM_write(0x04, 0x55);
}

}
}
8.
Tabel 1.4 Program kombinasi toggle switch, EEPROM dan LCD display
N Alama
Proses EEPROM Alamat Data Proses EEPROM Data
o t
0 255 0 17
Pembacaan data I Pembacaan data I
1 255 1 34
sebelum catu setelah catu daya
1 2 255 2 51
daya dilepas dilepas
3 255 3 68
4 255 4 85
0 17 0 17
Penulisan data Penulisan data
1 34 1 34
sebelum catu setelah catu daya
2 2 51 2 51
daya dilepas dilepas
3 68 3 68
4 85 4 85
0 17 0 17
Pembacaan data II 1 34 Pembacaan data II 1 34
3 sebelum catu 2 51 setelah catu daya 2 51
daya dilepas 3 68 dilepas 3 68
4 85 4 85
15

ANALISIS DATA

1. Simpulkan cara menulis data ke EEPROM dan membaca dari EEPROM.


 Cara menulis data ke EEPROM yaitu dengan memberi nama EEPROM_write
 Cara membaca data dari EEPROM yaitu dengan membuat pungsi baru
pembacaan dengan memberi nama EEPROM_read

2. Data apakah yang muncul jika EEPROM belum ditulisi?


Data EEPROM pertama kali ketika belum ditulisi adalah 0xff

3. Pada langkah 8-12, adakah perbedaan antara pembacaan pertama dengan


pembacaan kedua sebelum catu daya dilepas? Jika ada mengapa terjadi perbedaan
tersebut?
Ada perbedaan pembacaan data pertama dan data kedua sebelum catu daya dilepas.
Yaitu :
 Data EEPROM yang di baca pertama kali sebelum diisi yaitu 0xff, maka
pembacaan data pertama adalah 0xff
 Lalu mulai menulis alamat 0-4(desimal)
 Dilakukan pembacaan data kedua sebelum dilepas hasil yang didapat sesuai
dengan hasil data yang ditulis pada proses c
16
 Jadi terdapat perbedaan pembacaan data pertama dan data kedua sebelum
catu daya dilepas

4. Pada langkah 8-12, adakah perbedaan antara pembacaan pertama dengan


pembacaan kedua setelah catu daya dilepas? Mengapa hal itu terjadi?
Tidak ada perbedaan pembacaan data pertama dan data kedua sesudah catu daya
dilepas. Karena:
 Pada saat catu daya diaktifkan maka hasil data yang telah ditulis pada
pembacaan data kedua telah disimpan.
 Lalu mulai menulis alamat 0-4 (desimal)
 Kemudian dilakukan pembacaan data kedua seseudah di lepas dan hasilnya
sesuai dengan hasil data yang ditulis pada proses c
 Jadi tidak ada perbedaan pembacaan pada data pertama dan data ke dua
sesudah catu daya dilepas, karena daya yang ditulis sama.

Anda mungkin juga menyukai