RSS

PROGRAM MENGAKSES EEPROM INTERNAL AVR MENGGUNAKAN CODEVISION

27 Apr

Pada postingan ini saya akan menjelaskan cara mengakses internal EEPROM AVR, yang berupa intruksi read dan write EEPROM, serta akan saya berikan sebuah contoh aplikasi untuk merealisasikannya dalam sebuah program.

Beberapa mikrokontroler AVR telah memiliki EEPROM (Electrically Erasable Programmable Read Only Memory) internal sebagai tempat penyimpanan data semi-permanen. Jadi seperti halnya flash memory, EEPROM tetap dapat menyimpan data meskipun catu daya dimatikan, dengan kata lain data tidak akan hilang walaupun catu daya dimatikan. EEPROM internal ini tidak dipetakan bersama dengan register utama, register I/O dan SRAM. EEPROM hanya dapat diakses melalui register spesial dan operasi read/write sehingga waktu aksesnya lebih lamban dari pada mengakses register ataupun SRAM.

Mikrokontroler ATmega8535 memiliki alamat memory EEPROM internal sebesar 512 bit  dengan lebar data memory 8 bit. Sehingga mampu menampung data sebesar 512 byte. Untuk melakukan intruksi write/read ke memory EEPROM dilakukan melalui beberapa register yaitu register EEARH, EEARL, EEDR dan EECR. Untuk masing-masing fungsi dan penjelasan register tersebut dapat teman-teman baca datasheetnya.

Inilah salah satu kelebihan bahasa pemrograman high level dalam hal ini bahasa C dengan compiler CodeVision AVR, dimana teman-teman tidak dituntut harus tahu mengenai register-register tersebut untuk dapat melakukan akses write/read EEPROM. Dikarenakan compiler CodeVision sudah menyediakan sebuah intruksi untuk dapat mengakses EEPROM internal AVR.

Sebenarnya saya sudah banyak membaca beberapa buku tentang cara mengakses EEPROM internal AVR, tetapi penjelasan tersebut terlalu sulit saya tangkap, jadi disini saya akan menjelaskan dengan bahasa saya sendiri, sehingga mungkin akan lebih mudah teman-teman mengerti.

Untuk dapat melakukan operasi write/read EEPROM internal, sebelumnya kita harus mendeklarasikan sebuah variabel yang digunakan untuk menunjuk pointer EEPROM. Cara penulisannya adalah sebagai berikut:

[type data] eeprom *[variabel];

Jika saya menggunakn tipe data integer dan variabelnya saya beri nama pointer_eeprom maka akan menjadi:

int eeprom *pointer_eeprom;

Jika teman-teman sudah mendeklarasikan seperti diatas, maka secara otomatis CodeVision AVR akan menghasilkan sebuah variabel lagi yang bernama pointer_eeprom (tanpa tanda bintang diawalnya). Mengapa harus menghasilkan variabel ini? Variabel ini, yaitu pointer_eeprom (tanpa tanda bintang diawalnya) nantinya digunakan untuk menunjuk alamat EEPROM internal yang akan kita tulis/baca (write/read).

Baiklah, jika saya ingin menuliskan (write) variabel data (bernilai 10) ke alamat 0 di memory EEPROM internal maka:

data=10; → data yang akan ditulis

pointer_eeprom=0; → alamat EEPROM yang akan ditulis

*pointer_eeprom=data; → instruksi penulisan ke EEPROM

Sekarang bagaimana jika ingin membaca (read) data pada alamat 0 di memory EEPROM. Caranya adalah sebagai berikut.

pointer_eeprom=0; → alamat EEPROM yang akan dibaca

data=*pointer_eeprom; → instruksi pembacaan dari EEPROM EEPROM

Pasti teman-teman sekarang sudah mengerti, mudah bukan?

Untuk lebih mengerti lagi disini saya ingin membuat sebuah aplikasi dimana terdapat 5 buah pushbutton, jika saya tekan tombol 1 maka akan menyimpan data=0 ke EEPROM, jika saya tekan tombol 2 maka akan menyimpan data=1 ke EEPROM dan seterusnya. Kemudian ditampilkan ke LCD, jika catu daya saya matikan maka data hasil penekanan tersebut tidak akan hilang.

Berikut adalah schematik dan listing program lengkap:

#include <mega16.h>

#include <delay.h>

#include <stdlib.h>

#include <lcd.h>

int eeprom *pointer_eeprom;

int data;

char temp[8];

// Alphanumeric LCD Module functions

#asm

   .equ __lcd_port=0x15 ;PORTC

#endasm

void tulis_data_ke_eeprom()

{

        *pointer_eeprom=data;

}

void baca_data_ke_eeprom()

{

        data=*pointer_eeprom;

}

void tampil_lcd()

{

      lcd_gotoxy(0,0);

      lcd_putsf(“ElectrO-cOntrOl”);

      itoa(data,temp);

      lcd_gotoxy(0,1);

      lcd_puts(temp);

}

void main(void)

{

PORTD=0x1f;

DDRD=0x00;

// Analog Comparator initialization

// Analog Comparator: Off

// Analog Comparator Input Capture by Timer/Counter 1: Off

ACSR=0x80;

SFIOR=0x00;

// LCD module initialization

lcd_init(16);

pointer_eeprom=0;//alamat eeprom yg akan ditulis/dibaca

baca_data_ke_eeprom();//memanggil fungsi baca eeprom

while (1)

      {

if (PIND.0==0)//jika ditekan maka akan menulis data=0 ke EEPROM

        {

        data=0;

        lcd_clear();

        delay_ms(300);

        tulis_data_ke_eeprom();

        }

if (PIND.1==0)//jika ditekan maka akan menulis data=1 ke EEPROM

        {

        data=1;

        delay_ms(300);

        lcd_clear();

        tulis_data_ke_eeprom();

        }    

if (PIND.2==0)//jika ditekan maka akan menulis data=2 ke EEPROM

        {

        data=2;

        delay_ms(300);

        lcd_clear();

        tulis_data_ke_eeprom();

        }

if (PIND.3==0)//jika ditekan maka akan menulis data=3 ke EEPROM

        {

        data=3;

        delay_ms(300);

        lcd_clear();

        tulis_data_ke_eeprom();

        }

if (PIND.4==0)//jika ditekan maka akan menulis data=4 ke EEPROM

        {

        data=4;

        delay_ms(300);

        lcd_clear();

        tulis_data_ke_eeprom();

        }

        tampil_lcd();//menampilkan data ke LCD

      };

}

Catatan: setelah program diatas didownload kemikrokontroler maka akan menampilkan nilai -1. Inilah nilai default dari isi memory EEPROM. Matikan catu daya mikrokontroler, kemudian nyalakan kembali, maka akan menampilkan nilai sesuai data penekanan tombol yang terakhir.

 
11 Comments

Posted by on April 27, 2011 in Tutorial AVR

 

Tags: , , , ,

11 responses to “PROGRAM MENGAKSES EEPROM INTERNAL AVR MENGGUNAKAN CODEVISION

  1. Djo

    May 1, 2011 at 21:02

    Mas… Kalau mau simpan type data character gimana?
    Kalau yg ini kan int. Misalkan semua data character yg mau ditampilkan di LCD biar tersimpan di EEPROM bukan di FLASH atau SRAM.
    Soalnya program saya kayaknya kelebihan memory.
    Kalau mau di build all (Ctrl+F9) muncul Tulisan “Evaluation version code size limit exceeded!”.
    Atau mungkin mas ada solusi lain… Makasih mas sebelumnya.

     
    • ElectrO-cOntrOl

      May 1, 2011 at 23:22

      kayanya yang bermasalah tuh codevision anda deh bukan soal kelebihan memori untuk hardwarenya, soalnya anda pake evaluation version. kalo saya ga salah, klo pake yg evaluation versi itu ada batasan banyaknya penulisan program. mungkin solusinya…. coba deh anda download dulu codevision yang pro kemungkinan kode program yang anda tuliskan itu kemungkinan pasti cukup! silakan dicoba dulu, trus kalo bisa tolong beri tahu saya.. soalnya teman saya juga pernah ngalamin.

      untuk penulisan di eeprom internal tipe data apa saja bisa yg penting nilainya dibawah atau = 8 bit atau 255 (karena lebar data eeprom cuma 8 bit). karena tipe data char itu maksimalnya 255 atau 8 bit, jadi anda tinggal menggantinya saja pada deklarasi variabel menjadi tipe data char

       
      • Djo

        May 22, 2011 at 13:11

        Makasih mas…
        setelah saya cek, emang ada masalah di codevisionnya.
        Kalau download yg versi advance kan harus pakai serial number/lisensi.
        Hahaha, gimana cara belinya. sy ga punya account paypal. Bahaya transaksti online mas… Nuhunnnn

         
      • ElectrO-cOntrOl

        May 22, 2011 at 14:54

        sebenarnya di internet sudah banyak yg mengupload codevision yg pro! silakan anda mencari saja di internet. Tp jika masih belum dapat insya allah akan saya upload di blog saya nanti.

         
      • ElectrO-cOntrOl

        May 23, 2011 at 03:53

        Sekarang saya sudah mengupload codevision yg pro di blog ini… silakan anda mendownloadnya pada link disebelah kanan…
        semoga bermanfaat

         
  2. Djo

    May 23, 2011 at 14:53

    Makasih banyak Mas.
    Semoga dibalas kebaikannya kelak oleh Sang Khalik.

    kapan-kapan boleh sharing ya mas kalau aku ada permasalahan.
    (-:
    Sekali lagi terima kasih banyak mas…
    Sukses buat mas… (-:

     
    • ElectrO-cOntrOl

      May 23, 2011 at 23:26

      OK. sama-sama.

      semoga bermanfaat… dan jangan lupa saling berbagi kepada yg lainnya juga….

       
      • Djo

        May 25, 2011 at 11:20

        Mas E… Kok ga bisa ya dibuka di wondows seven codevision AVR.nya…??? Kira-kira karena pakai windows seven jadi ga bisa dibuka…
        Hemmmmm… Ada pesan error pada, padahal cara installnya sama dengan yang ada di notepad.

         
      • ElectrO-cOntrOl

        May 25, 2011 at 17:32

        klo saya sendiri pakai XP! saya kurang tau apakah support atau tidak dengan seven…

         
  3. Dadan M

    June 28, 2011 at 16:53

    Kalau untuk menulis dan menampilkan di LCD beberapa data ke beberapa alamat EEPROM secara bersamaan bagaimana mas? Terimakasih

     
    • ElectrO-cOntrOl Team

      June 28, 2011 at 23:15

      bisa saja… yg penting data yg akan ditulis ke internal EEPROM AVR maksimal 8 bit dan mempunyai memory sebanyak 512

       

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

 
%d bloggers like this: