You are on page 1of 15

1

LAPORAN PRAKTIKUM III
LAPORAN
UNTUK MEMENUHI TUGAS MATA KULIAH
Lab ELKA-01
Yang dibina oleh Dyah Lestari, S.T., M.Eng.
Oleh :
Abdurrahman Rasyid
Abi Adhitama
Windu Aji Prasetiyo

(140534602832)
(140534601959)
(140534601723)

UNIVERSITAS NEGERI MALANG
FAKULTAS TEKNIK
JURUSAN TEKNIK ELEKTRO
PROGRAM STUDI S1 PENDIDIKAN TEKNIK ELEKTRO
SEPTEMBER 2016

EEDR dan EECR) dan operasi read/write yang tertentu sehingga waktu aksesnya lebih lamban dari pada mengakses register ataupun SRAM. EEARL. dimana data tersebut akan tetap ada meskipun catu daya dimatikan.0: EEAR8.EEARH dan EEARL .EEDR . EEPROM internal dalam mikrokontroler ATmega8535 mempunyai kapasitas 512 byte dan dipetakan sendiri dengan alamat mulai 00H-FFH. EEPROM EEPROM (Electrically Erasable Programmable Read Only Memory) merupakan memori yang dapat menyimpan data.. Data yang tersimpan dalam EEPROM dapat dihapus dengan sinyal listrik dengan tegangan tertentu. EEPROM Address Register (EEARH dan EEARL) Bit 8. Register yang digunakan untuk mengakses EEPROM ada 3 yaitu: . . adalah tempat meletakkan alamat secara linier untuk EEPROM mulai 0-511. EEPROM hanya dapat diakses melalui register (EEARH. sehingga ketika akan digunakan harus diberi nilai terlebih dahulu.EECR A.2 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. Nilai awalnya tidak ada..0: EEPROM Address.

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

Setelah mengeset chip dan clock. EEPROM dan LED untuk: . dan membaca data di alamat tersebut 7. dan membaca data di alamat tersebut sekali lagi. set juga bagian PORTB sebagai output dengan output value = 0. alamat dan data yang ditulis.1. 3. sekali lagi.1. serta alamat dan data yang dibaca kedua kalinya dalam Tabel 1. 4.2. 8. Buatlah program untuk mengakses 1 alamat di EEPROM secara tidak langsung (indirectly/menggunakan pointer) dengan urutan: membaca data di alamat tersebut.4 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.1 Diagram antarmuka mikrokontroler dengan I/O. yang dibaca ke LED di PORTB. menulis data ke alamat tersebut. 2. Catat alamat dan data yang pertama kali dibaca. Rangkailah peralatan yang diperlukan seperti dalam Gambar 1. Tampilkan data yang dibaca ke LED di PORTB. menulis data ke alamat tersebut. alamat dan data yang ditulis. Buka program Code Vision AVR Buatlah project baru. Tampilkan data 5. serta alamat dan data yang dibaca kedua kalinya dalam Tabel 1. Catat alamat dan data yang pertama kali dibaca. Buatlah program kombinasi toggle switch. 6. Gambar 1. Kemudian simpanlah file tersebut sehingga pada program bagian inisialisasi PORTB terlihat sebagai berikut: PORTB=0x00. Buatlah program untuk mengakses 1 alamat di EEPROM secara langsung (directly) dengan urutan: membaca data di alamat tersebut. Hubungkan soket jumper PORTB pada minimum system dengan soket jumper LED/OUTPUT pada I/O. DDRB=0xff.

5  Menampilkan hasil pembacaan EEPROM secara berurutan ke LED (PORTB) mulai dari alamat 0. menyimpan bilangan 0x11 ke EEPROM alamat 0. sambungkan kembali kabel USB ke 12. menyimpan bilangan 0x33 ke EEPROM alamat 2. 9. 2.4. 2. 5. . Menyimpan data berurutan jika toggle switch 2 diaktifkan dengan alamat dan data sebagai berikut: 1. 3. Lepaskan kabel USB dari komputer. Terakhir 11. Catat alamat dan data dalam Tabel 1. nonaktifkan togle switch 2 dan aktifkan toggle switch 1 dan catat nyala LED. 4. menyimpan bilangan 0x22 ke EEPROM alamat 1.3. komputer dan lakukan langkah 10. dan 4 sebelum EEPROM diisi jika  toggle switch 1 diaktifkan. Download program tersebut ke mikrokontroler Aktifkan toggle switch 1 dahulu dan catat nyala LED dalam Tabel 1. EEPROM dan LCD display untuk menyimpan data ke 5 alamat tertentu ke EEPROM dan menampilkan kelima data tersebut bersama alamatnya ke LCD display. 1. menyimpan bilangan 0x44 ke EEPROM alamat 3. menyimpan bilangan 0x55 ke EEPROM alamat 4. Lakukan seperti langkah 8-11 dengan program kombinasi toggle switch. Kemudian nonaktifkan togle switch 1 dan aktifkan toggle switch 2. 10. 3.

//return dari Data Register return EEDR.1==1){ delay_ms(50). //membaca eeprom EECR |= (1<<EERE). } } } //menulis data ke eeprom if(PINA. } . 0xAA). DDRA=0x00. //set address register EEAR = uiAddress.h> void EEPROM_write(unsigned int uiAddress.0==1){ delay_ms(50). //state=0 //func=output while(1){ //membaca data dari eeprom if(PINA. unsigned char ucData){ //menunggu proses sebelumnya selesai while(EECR&(1<<EEWE)). Program untuk mengakses 1 alamat di EEPROM secara langsung (directly) #include <mega8535. //memulai menulis data di eeprom EECR|=(1<<EEWE). //mengisi data alamat dan data register EEAR = uiAddress. //delay debouncing EEPROM_write(0x00.h> #include <delay. //state=Toogle //func=input PORTB=0x00.6 DATA HASIL PERCOBAAN 1. } void main(void){ PORTA=0xFF. DDRB=0xFF. //delay debouncing PORTB = EEPROM_read(0x00). } unsigned char EEPROM_read(unsigned int uiAddress){ //menunggu prosees sebelumnya selesai while(EECR&(1<<EEWE)). EEDR = ucData. //menulis logika 1 ke EEMWE untuk menulis data EECR |=(1<<EEMWE).

1 Akses EEPROM secara Langsung No Proses EEPROM Alamat Data 1 Pembacaan data I 0x00 0xFF 2 Penulisan data 0x00 0xAA 3 Pembacaan data II 0x00 0xAA 3. DDRB=0xFF. //memanggil data pada alamat 0 PORTB = i. //data ptr_eeprom = 0. int i. //delay debouncing i = 0x55. Tabel 1. //menulis data pada eeprom } } } 4.1==1){ delay_ms(50).2 Akses EEPROM secara Tidak Langsung/dengan Pointer No Proses EEPROM Alamat Data 1 Pembacaan data I 0x00 0xFF 2 Penulisan data 0x00 0xAA 3 Pembacaan data II 0x00 0xAA . //delay debouncing ptr_eeprom = 0. //state=0 //func=output while(1){ //membaca data dari eeprom if(PINA.0==1){ delay_ms(50).h> int eeprom *ptr_to_eeprom.7 2. Program untuk mengakses 1 alamat di EEPROM secara tidak langsung (indirectly) #include <mega8535. DDRA=0x00. Tabel 1. void main(void){ PORTA=0xFF. //menampilkan data alamat 0 } //menulis data ke eeprom if(PINA. //state=Toogle //func=input PORTB=0x00. //alamat 0 eeprom *ptr_eeprom = i.h> #include <delay. //alamat 0 eeprom i = *ptr_eeprom.

//membaca eeprom EECR |= (1<<EERE). //set address register EEAR = uiAddress. //state=Toogle //func=input PORTB=0x00.1==1){ delay_ms(50). //memulai menulis data di eeprom EECR|=(1<<EEWE). //return dari Data Register return EEDR. //mengisi data alamat dan data register EEAR = uiAddress. //menulis logika 1 ke EEMWE untuk menulis data EECR |=(1<<EEMWE). delay_ms(500).h> #include <delay. EEPROM_write(0x01. unsigned char ucData){ //menunggu proses sebelumnya selesai while(EECR&(1<<EEWE)). delay_ms(500). PORTB = EEPROM_read(0x01). delay_ms(500). 0x33). . PORTB = EEPROM_read(0x04). 0x22). DDRB=0xFF. //delay debouncing PORTB = EEPROM_read(0x00). EEDR = ucData. //delay debouncing EEPROM_write(0x00. delay_ms(500).h> void EEPROM_write(unsigned int uiAddress. delay_ms(500). //state=0 //func=output while(1){ //membaca data dari eeprom if(PINB. } void main(void){ PORTA=0xFF.8 5. PORTB = EEPROM_read(0x03). } //menulis data ke eeprom if(PINB. } unsigned char EEPROM_read(unsigned int uiAddress){ //menunggu prosees sebelumnya selesai while(EECR&(1<<EEWE)). EEPROM_write(0x02. EEPROM dan LED #include <mega8535. PORTB = EEPROM_read(0x02).0==1){ delay_ms(50). DDRA=0x00. Program kombinasi toggle switch. 0x11).

//menyimpan data ucData2[20]. uiAddress3[20]. lcd_putsf("Addr: "). ucData3[20]. ucData4[20]. lcd_gotoxy(0. uiAddress5[20].h> <delay.3 Program kombinasi toggle switch. ucData5[20].9 } } EEPROM_write(0x03.0). void menampilkanKeLCD(int i){ lcd_clear(). 0x55). Tabel 1. } 6. //menyimpan alamat uiAddress2[20]. LED Data 0x11 0x22 0x33 0x44 0x55 0x11 0x22 0x33 0x44 0x55 0x11 0x22 0x33 0x44 0x55 . 0x44). EEPROM_write(0x04. ucData1[20].1).h> uiAddress1[20]. uiAddress4[20].h> <stdlib. lcd_putsf("Data: "). EEPROM dan N Proses Alam Proses Alam Data o EEPROM at EEPROM at 0 0xff 0 Pembacaan data I Pembacaan data I 1 0xff 1 sebelum catu setelah catu daya 1 2 0xff 2 daya dilepas dilepas 3 0xff 3 4 0xff 4 0 0x11 0 Penulisan data Penulisan data 1 0x22 1 sebelum catu setelah catu daya 2 2 0x33 2 daya dilepas dilepas 3 0x44 3 4 0x55 4 0 0x11 0 1 0x22 1 Pembacaan data Pembacaan data II 3 II sebelum catu 2 0x33 setelah catu daya 2 daya dilepas dilepas 3 0x44 3 4 0x55 4 7. Program kombinasi toggle switch. lcd_gotoxy(0.h> <alcd. EEPROM dan LCD #include #include #include #include char char char char char char char char char char <mega8535.

} if (i == 4){ lcd_gotoxy(6. while(1){ //membaca data dari eeprom .} if(uiAddress == 0x02){ itoa(uiAddress.uiAddress1).0).ucData4). lcd_puts(uiAddress1).1). //state=Toogle //func=input PORTB=0x00.uiAddress4).} if(uiAddress == 0x04){ itoa(uiAddress. lcd_puts(uiAddress4).1).0).} } void EEPROM_write(unsigned int uiAddress. } void main(void){ PORTA=0xFF. //memulai menulis data di eeprom EECR|=(1<<EEWE). lcd_puts(uiAddress3).lcd_gotoxy(6. itoa(ucData. //set address register EEAR = uiAddress.} if (i == 5){ lcd_gotoxy(6.ucData1).1).} if(uiAddress == 0x03){ itoa(uiAddress. DDRA=0x00.1).lcd_puts(ucData4). //return dari Data Register return EEDR.lcd_gotoxy(6.} if (i == 3){ lcd_gotoxy(6.lcd_puts(ucData5).} } unsigned char EEPROM_read(unsigned int uiAddress){ //menunggu prosees sebelumnya selesai while(EECR&(1<<EEWE)).lcd_puts(ucData1). unsigned char ucData){ //menunggu proses sebelumnya selesai while(EECR&(1<<EEWE)). itoa(ucData.0). //membaca eeprom EECR |= (1<<EERE).lcd_puts(ucData2).} if (i == 2){ lcd_gotoxy(6.lcd_puts(ucData3).uiAddress2).0).10 if (i == 1){ lcd_gotoxy(6.} if(uiAddress == 0x01){ itoa(uiAddress. //mengkonversi alamat dan data agar bisa ditampilkan ke lcd if(uiAddress == 0x00){ itoa(uiAddress. //state=0 //func=output lcd_init(16).1).ucData2). lcd_puts(uiAddress5).lcd_gotoxy(6.uiAddress3).ucData5).uiAddress5). //menulis logika 1 ke EEMWE untuk menulis data EECR |=(1<<EEMWE). EEDR = ucData.ucData3). itoa(ucData. lcd_puts(uiAddress2). itoa(ucData. DDRB=0xFF.lcd_gotoxy(6. itoa(ucData.0). //mengisi data alamat dan data register EEAR = uiAddress.lcd_gotoxy(6.

} } } 8. //delay debouncing PORTB = EEPROM_read(0x00). menampilkanKeLCD(3). 0x44). menampilkanKeLCD(5). 0x55). 0x11). menampilkanKeLCD(2).//menampilkan delay_ms(200). EEPROM_write(0x02.//menampilkan delay_ms(200). PORTB = EEPROM_read(0x01).11 if(PINA. EEPROM dan LCD display Proses Alam Proses Alam Data Data EEPROM at EEPROM at 0 255 0 17 Pembacaan data I Pembacaan data I 1 255 1 34 sebelum catu daya setelah catu daya 2 255 2 51 dilepas dilepas 3 255 3 68 4 255 4 85 0 17 0 17 Penulisan data Penulisan data 1 34 1 34 sebelum catu daya setelah catu daya 2 51 2 51 dilepas dilepas 3 68 3 68 4 85 4 85 0 17 0 17 1 34 1 34 Pembacaan data II Pembacaan data II sebelum catu daya 2 51 setelah catu daya 2 51 dilepas dilepas 3 68 3 68 4 85 4 85 .//menampilkan delay_ms(200). EEPROM_write(0x03.//menampilkan delay_ms(200). EEPROM_write(0x04.//menampilkan delay_ms(200). EEPROM_write(0x01. menampilkanKeLCD(4). PORTB = EEPROM_read(0x02). } eeprom alamat 0x00 eeprom alamat 0x01 eeprom alamat 0x02 eeprom alamat 0x03 eeprom alamat 0x04 //menulis data ke eeprom if(PINA. //delay debouncing EEPROM_write(0x00. 0x33). 0x22). PORTB = EEPROM_read(0x03). N o 1 2 3 Tabel 1. PORTB = EEPROM_read(0x04).1==1){ delay_ms(50).4 Program kombinasi toggle switch.0==1){ delay_ms(50). menampilkanKeLCD(1).

//membaca eeprom EECR |= (1<<EERE). A. Simpulkan cara menulis data ke EEPROM dan membaca dari EEPROM. data yang ditulis) } } B.0==1){ EEPROM_write(0x00. } . } Misal port c digunakan sebagai input dengan disambungkan ke toogle switch maka cara penulisan dapat dilakukan while (1){ If (PINA. unsigned char ucData){ //menunggu proses sebelumnya selesai while(EECR&(1<<EEWE)). //set address register EEAR = uiAddress. EEDR = ucData. 0xf0) . //menulis logika 1 ke EEMWE untuk menulis data EECR |=(1<<EEMWE). //memulai menulis data di eeprom EECR|=(1<<EEWE). Cara menuliskan data ke EEPROM Buat fungsi baru untuk prosedur penulisan eeprom misal dengan nama EEPROM_write void EEPROM_write(unsigned int uiAddress. //(alamat. //return dari Data Register return EEDR.12 ANALISIS DATA 1. Cara membaca data dari EEPROM Buat fungsi baru untuk prosedur pembacaan eeprom misal dengan nama EEPROM_read unsigned char EEPROM_read(unsigned int uiAddress){ //menunggu prosees sebelumnya selesai while(EECR&(1<<EEWE)). //mengisi data alamat dan data register EEAR = uiAddress.

adakah perbedaan antara pembacaan pertama dengan pembacaan kedua sebelum catu daya dilepas? Jika ada mengapa terjadi perbedaan tersebut? Terdapat perbedaan pembacaan data pertama dan kedua sebelum dilepas.13 Port c digunakan sebagai input dengan disambungkan ke toogle switch maka cara penulisan dapat dilakukan while (1){ If (PINA. Pada langkah 8-12. karena a) Data eeprom yang dibaca pertama kali sebelum diisi yang default adalah 0xff / 0b11111111 b) Maka pembacaan data pertama adalah 0xff c) Kemudian ditulis mulai alamat 0-4 (desimal) dengan ketentuan pemberian data sebagai berikut alamat data 0 0x11 1 0x22 2 0x33 3 0x44 4 0x55 d) Kemudian dilakukan pembacaan data kedua sebelum dilepas maka hasil yang didapat sesuai dengan hasil data yang ditulis pada proses c e) Jadi kesimpulan terdapat perbedaan pembacaan data pertama dan kedua sebelum catu daya dilepas . Data apakah yang muncul jika EEPROM belum ditulisi? Data default yang muncul untuk pertama kali EEPROM sebelum ditulis adalah 0xff 3.1==1){ PORTB = EEPROM_read (0x00) . //(alamat) } } 2.

Data pada eeprom akan direset ke nilai 0xFF setiap kali atmega8535 diprogram .14 4. Data yang telah ditulis pada eeprom tidak akan hilang meskipun catu daya telah dilepas 3. Eeprom pada atmega8535 dapat diakses secara langsung maupun tidak langsung Jika langsung maka data langsung ditulis pada alamat yang dituju Jika tidak langsung maka data ditulis melalui pointer 2. Pada langkah 8-12. karena a) Saat catu daya diaktifkan maka hasil data yang telah ditulis pada pembacaan data kedua (nomor 3) telah disimpan sehingga nilai seperti pada tabel berikut alamat data 0 0x11 1 0x22 2 0x33 3 0x44 b) Jadi pembacaan data pertama sesudah catu daya dilepas seperti tabel diatas c) Kemudian ditulis mulai alamat 0-4 (desimal) dengan ketentuan pemberian data sebagai berikut alamat data 0 0x11 1 0x22 2 0x33 3 0x44 4 0x55 d) Kemudian dilakukan pembacaan data kedua sesudah dilepas maka hasil yang didapat sesuai dengan hasil data yang ditulis pada proses c e) Jadi kesimpulan tidak terdapat perbedaan pembacaan data pertama dan kedua sesudah catu daya dilepas karena data yang ditulis sama KESIMPULAN 1. adakah perbedaan antara pembacaan pertama dengan pembacaan kedua setelah catu daya dilepas? Mengapa hal itu terjadi? Tidak Terdapat perbedaan pembacaan data pertama dan kedua sesudah catu daya dilepas.

. 2013. Mikroprosesor Lanjut. Malang: Universitas Neger Malang. Dyah.15 DAFTAR RUJUKAN Lestari.