Penyimpanan dan Pengaksesan Data pada EEPROM AT24C128


AT24C128 merupakan salah satu eeprom eksternal pabrikan ATMEL Corp. yang memiliki kapasitas memori 16384 x 8 bit. Antarmuka yang digunakan untuk mengakses eeprom adalah I2C. Memori ini adalah merupakan memori eksternal yang cukup efektif bagi mikrokontroler-mikrokontroler yang membutuhkan ekstra memori. Hal ini disebabkan karena antarmuka EEPROM hanya membutuhkan 2 jalur saja sehingga mereduksi pemakaian I/O mikrokontroler. Selain itu antarmuka I2C bisa mengkomunikasikan maksimal 8 perangkat sekaligus dalam 2 jalur I2C dengan syarat alamat setiap perangkat berbeda.

Untuk mengakses eeprom ekternal AT24C128 memiliki alamat standar sebagai berikut.

Alamat perangkat EEPROM eksternal AT24C128

Keterangan:

Bit 4-7 : Identitas dari eeprom eksternal

A0 – A1 : Alamat input perangkat yang dapat diubah-ubah secara hardware

Bit 0 (R/W) : bit baca/tulis dengan 0 untuk tulis dan 1 untuk baca

Untuk menulis data 1byte pada eeprom dibutuhkan 2 byte alamat data (address high dan address low) yang mengikuti alamat perangkat eeprom kemudian diikuti oleh data itu sendiri yang akan disimpan pada eeprom. Untuk lebih jelasnya format penulisan data pada eeprom dapat dilihat dari gambar berikut.

Format penulisan data 1byte pada EEPROM eksternal


Sedangkan untuk membaca data 1byte dari eeprom ekternal yang digunakan dalam skripsi ini terdapat dua cara yaitu pembacaan data pada alamat terbaru (current read address) dan pembacaan data pada alamat tertentu (random read). Sistem pembacaan data pada alamat terbaru secara otomatis membaca data pada alamat terakhir ketika data ditulis/dibaca karena pada eeprom eksternal terdapat counter internal yang mencacah alamat data sehingga dalam pengaksesan hanya dengan mengirimkan alamat perangkat dan operasi baca. Sedangkan pembacaan data pada alamat tertentu, pembacaan data diawali dengan pengiriman alamat perangkat dengan operasi tulis diikuti 2 byte alamat data yang akan dibaca lalu pengiriman alamat perangkat dengan operasi baca dan diakhiri dengan pembacaan data pada alamat tersebut. Untuk lebih jelasnya dapat dilihat dari gambar berikut.

Format pembacaan data terbaru dari EEPROM eksternal

Format pembacaan data pada alamat tertentu dari EEPROM eksternal

Sesuai dengan format penulisan data pada eeprom eksternal dan pembacaan data dari eeprom eksternal diatas, rutin yang digunakan dalam pemrograman adalah sebagai berikut.

  • Membaca 1 byte data dari eeprom

       unsigned char eeprom_read(unsigned char addressh, unsigned char addressl) {       unsigned char data;
       //misal alamamat dari eeprom --> eeprom_addr = 0xA0
       i2c_start();
       i2c_write(eeprom_addr);            //alamat eeprom + aksi tulis 
       i2c_write(addressh);                 // alamat high 
       i2c_write(addressl);                 // alamat low
       i2c_start();
       i2c_write(eeprom_addr | 1);          //alamat eeprom + pembacaan data
       data=i2c_read(0);
       i2c_stop();
       return data;
       }
  • Menulis data 1byte pada eeprom
    void eeprom_write(unsigned char addressh, unsigned char addressl, unsigned char data){
    i2c_start();
    i2c_write(eeprom_addr);
    i2c_write(addressh);
    i2c_write(addressl);
    i2c_write(data);
    i2c_stop();
    delay_ms(10);
    }

Selamat mencoba…🙂🙂🙂
something problem silahkan bertanya,,,!!!

  1. saya ridwan dari medan’
    mau tanya kalaw menggunakan bahasa assemblaer gimana ?
    soalnya saya cuma tau sedikit menggunakan bahasa asembler.

    jadi ic eeprom tersebut harus di program lagi ya???
    terimakasih sebelumnya saya ucapkan …
    meDAN

    • untuk penggunaan eeprom ext tidak perlu diprogram ulang karena sifat dari eeprom adalah untuk media penyimpanan,,,
      namun yang diprogram adalah mikrokontrolernya untuk melakukan komunikasi (penulisan/pembacaan data) pada eeprom,,,
      dalam contoh ini eeprom digunakan sebagai penyimpanan data shg dilakukan akses baca dan tulis pada eeprom,,,

      untuk progam pengaksesan eeprom dengan bhs asm q kurang paham,,,
      anda bisa cek link berikut http://gedex.web.id/archives/2008/05/17/menggunakan-jalur-i2c/ untuk sistem komunikasi data secara I2C menggunakan asm,,,

    • ari
    • October 11th, 2011

    mas 24c128 bisa diganti 24c16 g mas? bedanya apa kalo bs?

    • kalo secara rangkaian antara 24c128 dengan 24c16 saya rasa sama ja cuma da 1 pin alamat di 24c128 yang tidak dipakai,,
      sedangkan secara kapasitas sudah pasti berbeda yaitu 24C128 –> 16KB sedangkan 24C16 –> 2KB so sudah pasti pengalamatannya berbeda yaitu untuk 24C128 menggunakan 2 Byte=16 bit sedangkan 24C16 cukup 1Byte=8bit,,,
      sedangkan untuk operasi baca tulis sama ja,,,,
      untuk lebih detail mengenai pengalamatan coba refer ke datasheet…

        • ari
        • October 12th, 2011

        pin NC (No Connect) y mas yang tdak dipakai? (tapi kog dihub ke Gnd?) kalo 24c16an bedanya tidak ada pin NC karena diganti A2, disini dalam penulisan cuma membutuhkan 1 word adrres diikuti data dalam penulisan byte nya, berarti alamat data cuma 1 khn mas (tidak mengenal addressh n addressl)?
        trus kenapa pin adrress,NC,Wp dihub ke ground? apakah dalam EEprom yang diperlukan cuma SCL dan SDA? jika iya, apa hal ini juga berlaku untuk semua eeprom? (maap agak kurang paham saya baca datasheet eeprom soalnya)

  2. ari :
    pin NC (No Connect) y mas yang tdak dipakai? (tapi kog dihub ke Gnd?) kalo 24c16an bedanya tidak ada pin NC karena diganti A2, disini dalam penulisan cuma membutuhkan 1 word adrres diikuti data dalam penulisan byte nya, berarti alamat data cuma 1 khn mas (tidak mengenal addressh n addressl)?
    trus kenapa pin adrress,NC,Wp dihub ke ground? apakah dalam EEprom yang diperlukan cuma SCL dan SDA? jika iya, apa hal ini juga berlaku untuk semua eeprom? (maap agak kurang paham saya baca datasheet eeprom soalnya)

    yap bener bgt,,,
    jadi alamatnya hanya pakai 1byte atau 8 bit ja karena alamat ini menyesuaikan dengan kapasitas memori eeprom itu sndiri,,,
    dengan adanya A2,A1 dan A0 berarti device eeprom 24C16 bsa diinstal sampai 8 device dalam 1 jalur data i2c dengan alamat berbeda yaitu dari 000 – 111…
    jalur komunikasi yang diperlukan memang hanya SCL dan SDA saja dan berlaku pada semua eeprom yang menggunakan interface i2c…
    namanya NC so tidak perlu connect kemana pun, sedangkan untuk WP dihubungkan ke ground agar dapat mengakses (read/write) eeprom karena jika di hubungkan dengan vcc maka akses tersebut tidak bisa (lock).

      • ari
      • October 13th, 2011

      (24c16)a0-a2 = 3 sehingga ampe 8 device, address dari 000-111,
      (24c128)a0-a1=2 sehingga ampe 4 device?address dari 00-11?
      bener ga?haduh bngung saya

      • yups,,,
        bener…

    • ari
    • October 13th, 2011

    coys :
    yups,,,
    bener…

    mas mbok saya di kasih contoh listing program sederhana buat penulisan n pembacaan eeprom yg at24c16
    bngung saya ama yg at24c128 letak perbedaannya, soalnya di datasheet bagian device addres g ada a0-a2 tapi adanya p0-p2, posing saya apaan ntuw?

    • coba program berikut kalo cuma untuk baca/tulis di eeprom…
      ni q cuma edit program at24c128…
      http://ubuntuone.com/6BdhYEaAOeGXBiJUFaKnm0

        • ari
        • October 14th, 2011

        apaan ntuw? kog pake log in mas? gagal molo register aing

      • mas, bisa tolong di re-upload program nya. saya masih bingung tentang eksternal eeprom ini. terima kasih

      • Berikut link untuk contoh program eeprom eksternalnya

        http://tinyurl.com/eeprom-ext

  3. wah sorry,,,
    ternyata filenya belum saya publish,,,😀
    sekarang silahkan coba lagi link nya…

      • ari
      • October 15th, 2011

      woghh makasih sensei, ane coba dl wkwkwkwk

      • chikonews
      • October 17th, 2011

      mas mau tanya lagi, misal kita simpen data tiap 1 jam, jadi 1 hari ada 24 data. Nah misal jam 9 pagi paling g dah ada 9 data trus kalo kita cuma pengen nampilin 2 data yang terkahir gmana mas? data jam 8 dan 9
      trus sistem eeprom itu data disimpan kalo space penuh looping lagi truss ditindih data baru, atau cuma pake space memory ampe penuh ?

      • berarti dalam hal ini butuh timer/RTC untuk menentukan kapan kita menyimpan data pada eeprom…
        untuk mengambil beberapa data terakhir, kita harus tau dimana alamat terakhir kita menyimpan data terbaru. dengan demikian kita bisa mentracking untuk data sebelumnya berada di alamat berapa. saya pernah membuat program spt ini dengan data yang diambil 1-60 data terakhir dan setiap data memiliki resolusi 32 bit (float). ya prinsip tetap kita harus tahu alamat terakhir kita menyimpan data terbaru.

        kalo dari datasheet, eeprom bisa ditulis hingga 1 juta kali so bisa dilooping dan data lama ditinding dengn data baru dengan tetap kita mengontrol pengalamatannya agar kita mudah mengakses data yang kita inginkan.

    • ori
    • December 20th, 2011

    mas bisa tolong buatin saya program password yang ditampilin ke lcd?
    saya udah bener2 pusing mas udh 2 minggu muter2 gak ngerti ngerti mas… programnya itu disimpan di eeprom at24c512 mas. jika password benar nanti yang input pasword bisa masuk ke aplikasi yang di buat(dari codevision & didownload langsung ke atmega16/8535).Aplikasinya udh saya buat mas. tinggal nulis/baca program password yg disimpen di eeprom external at24c512 ini yg gak bisa bisa mas.
    Terima Kasih Buanyak mas…

    • wah lumayan berat nih soalnya q ga da modul tu coba programnya,,,
      kalo boleh tau, eepromnya ini hanya digunakan untuk menyimpan password itu ja atau ada data lain yang disimpan dieeprom tersebut..??
      kalo hanya untuk menyimap password sebaiknya tidak perlu menggunakn eeprom external tapi gunakan ja eeprom atmega16 ja,,,

        • ori
        • December 21st, 2011

        Eeprom external AT24C512 nya digunakan untuk menyimpan Program Passwordnya mas.. Saya pusing banget mas, coz ini Tugas dari dosen saya mas..😦

        setelah pasword benar baru langsung masuk ke Program yang saya buat langsung ke Atmega 8535 nya mas.. klo pasword yang dimasukkan salah maka si penginput password gak bisa masuk ke aplikasi program yang di atmega 8535..
        please help me mas.. :(:::

    • ori
    • December 21st, 2011

    pokoknya harus pake eeprom eksternal mas..Trus ditayangin ke LCD. Paling ngga program passwordnya yang disimpan di eeprom External at24c512 jadi mas.
    Thnks mass……

    • ooo gtu,,,
      ntar tak coba dulu,,,,
      tp g bisa cepat coz q bisa ngerjainnya abis kerja…
      ato q kasih contoh beberapa program mengenai input keypad untuk menentukan nilai sesuatu,,,
      tu dimodif untuk menggunakan menjadi input passwd,,

    • windoe
    • May 22nd, 2012

    klo ne buat nyimpen program kecepatan ya,, alamatna gimana..
    bls ya,, makasie

    • bisa dijelasin lebih detail maksudnya bagaimana???

    • windoe
    • June 5th, 2012

    y klo nyimpen program kecepatan misalkan dengan push button PORTD.4 itu mulai merekam data kecepatan dan PORTD.5 itu berhenti menyimpan serta PORTD.6 mengirim keserial untuk dibaca di komputer kecepatan yang tersimpan tadi mas,, maaph baru balas mas, soalnya kmarin masih sibuk kuliah mas,,
    makasih mas

    • bisa saja,,,
      tinggal jadikan semua input itu sebagai trigger…
      namun kalo boleh saran sebaiknya gunakan pin interrupt saja sebagai triggernya semua aktifitas tersebut karena kalau pin interrupt bisa langsung memberikan respon.

    • choirul fanani
    • February 25th, 2013

    i2c_write(eeprom_addr); //alamat eeprom + aksi tulis
    i2c_write(addressh); // alamat high
    i2c_write(addressl);

    itu maksutnya gimana mas?!

    bisa diterangkan dengan biner gak?!

    • untuk eeprom_addr adalah alamat dari hardware eeprom itu sendiri dengan merujuk pada format alamat pada penjelasan diartikel diatas.

      i2c_write(eeprom_addr); //alamat eeprom + aksi tulis --> eeprom addr = 0XA0

      misal nilai A1 dan A0 kita setting pada nilai 0 dan akan dilakukan aksi tulis pada eeprom (bit 7=0) maka alamat eeprom menjadi 10100000 atau 0xA0. Jika akan melakukan pembacaan data pada eeprom maka bit 7=1 sehingga alamat eeprom menjadi 10100001 atau 0XA1


      i2c_write(addressh); // alamat high
      i2c_write(addressl); // alamat low

      Ini mengacu pada alamat data yang menyesuaikan capasitas penyimpanan data itu sendiri. Dalam hal ini eeprom yang digunakan adalah AT24C128 dengan kapasitas penyimpanan data sekitar 16K byte. Ini berarti membutuhkan alamat data yang sampai 16K byte pula yang berarti jika dalam biner max nilainya 00111111 11111111 atau 0x3FFF. Karena itu maka pengalamatan datanya dibagi dalam 2 byte yaitu byte high (00111111) dan byte low (11111111).

    • bagus
    • April 28th, 2013

    Askm.
    cara mengakses eeprom internal atmega8535 gmn mas, terutama pada penentuan alamat eepromnya???

    • Walaikum salam,
      Untuk pengaksesan eeprom internal sama halnya dengan mengakses suatu variable biasa hanya saja deklarasi variablenya ditambah dengan eeprom.

      contoh:

      //~~~~~~~~~~~Deklarasi
      eeprom unsigned int periodic_time;
      unsigned int time;
      
      //~~~~~~~~~~~ Menulis
      periodic_time=time;
      
      //~~~~~~~~~~~ Membaca
      time=periodic_time;
    • bagus
    • April 29th, 2013

    makash mas, tak cbnya dulu he…he…
    kalo data yang disimpan d eeprom kita tentukan alamatnya bisa mas? caranya gmn ya

    • maksudnya bagaimana ya…??
      bukannya dengan mengunakan deklarasi variable tersebut sudah menunjukkan bahwa itu alamat dari eepromnya?
      atau bisa juga menggunakan sistem array, misal alamat 1 –> addr[1], alamat 2 –> addr[2] dst.

    • muammar
    • June 30th, 2013

    1 mikro bisa ga komunikasi I2C dengan 2 device berbeda?
    kayak atmega 16 sebagai master, trus slavenya ds1307 sama at24c16?

    • muammar
    • June 30th, 2013

    kalo seperti gini, atmega 16 sebagai master, trus slavenya ds1307 sama at24c16. bisa ga itu?programnya kayak gi mana ya?

    • Jangankan hanya 2 device, 8 device pun bisa asal alamat devicenya berbeda2. Kalau dari pencipta sistem i2c sendiri (Philips) disampaikan bahwa devices yang bisa dikomunikasikan bisa hingga 128 devices sekaligus namun selama ini para pembuat hardware hanya menyediakan alamat 3 bit untuk setiap devicesnya sehingga maksimal device yang bisa dihubungkan dalam satu jalur bus i2c hanya 8 devices. Programnya sama saja hanya saja alamat baca/tulisnya berbeda-beda sesuai devices yang akan di ajak berkomunikasi.

    • yanto
    • October 23rd, 2013

    bisa minta nmr hpnya gak aku mau bertanya langsung ni sama kamu?

    • by email ja, saya selalu online kok. ini alamat email saya coys.jrux@gmail.com

    • Hamsyah
    • February 1st, 2014

    bermanfaat sekali artikelnya, ijin copy y..
    untuk menghapus data yang sudah di tulis eeprom bagaimana mas coys..?

    • bisa ditindih dengan data kosong atau dengan data baru tanpa menghapusnya.
      Jika ingin menhapus secara total berdasarkan datasheet dengan step berikut (1) clock sebanyak 9 siklus (2) lihat kondisi SDA dalam kondisi high disetiap siklus ketika SCL high kemudian (3) lakukan kondisi start.
      Note: untuk yang menghapus secara total ini saya belum pernah melakukannya.

        • Hamsyah
        • February 3rd, 2014

        terimaksih mas coys,
        kelihatannya lebih mudah yang ditindih saja..

    • anrifail
    • September 27th, 2014

    salam
    saya mau minta bantuannya untuk belajar cara menyimpan data pembacaan sensor ke EPROM eksternal setiap 5 menit,trus cara mengakses data yang tersimpan pada EPROM tersebut untuk ditampilkan di komputer

  1. No trackbacks yet.

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: