Akses Baca-Tulis EEPROM ATtiny2313


avrmnemonic2AVR ATtiny2313 memiliki EEPROM dengan kapasitas 128 byte dengan alamat akses 0-127 ($00-$7F). Untuk mengakses EEPROM terlebih dahulu harus mengetahui register-register EEPROM, yakni: EEAR – EEPROM Address Register, EEDR – EEPROM Data Register, dan EECR – EEPROM Control Register.

EEAR adalah register yang berfungsi menyimpan alamat EEPROM yang akan diakses. Untuk ATtiny2313, EEAR disebut juga EEARL (EEAR Low). Yup, hanya perlu 7 bit LSB saja (EEAR0..EEAR6) untuk mengakses seluruh alamat EEPROM ATtiny2313. Nilai awal EEAR setelah direset tidak didefinisikan, jadi EEAR perlu diisi dengan alamat EEPROM yang benar sebelum data pada EEPROM diakses (dibaca/ditulis/dihapus).

EEDR adalah register yang berfungsi menyimpan data yang akan ditulis ke EEPROM dan data yang dibaca dari EEPROM.

EECR adalah register yang berfungsi untuk mengontrol sinyal-sinyal kontrol untuk proses akses EEPROM. Pada tulisan ini hanya dibahas tentang bagaimana menulis data ke EEPROM dan bagaimana membaca data dari EEPROM. Oleh karena itu, hanya 3 bit LSB dari EECR saja yang akan dibahas yakni:

  • Bit 2 – EEMPE (EEPROM Master Program Enable)
  • Bit 1 – EEPE (EEPROM Program Enable)
  • Bit 0 – EERE (EEPROM Read Enable)

Proses menulis data ke EEPROM memerlukan langkah-langkah berikut ini:

  1. Letakkan alamat EEPROM yang dituju dalam register EEAR
  2. Letakkan data dalam register EEDR
  3. Cek apakah bit EEPE=0, jika tidak maka tunggu
  4. Set bit EEMPE
  5. Set bit EEPE

Mudah bukan? Demikian juga halnya dengan proses membaca data dari EEPROM, berikut langkah-langkahnya:

  1. Letakkan alamat EEPROM yang akan diakses dalam register EEAR
  2. Cek apakah bit EEPE=0, jika tidak maka tunggu
  3. Set bit EERE
  4. Baca data dari EEDR dan simpan di register

Bit EEPE adalah bit untuk menulis data ke EEPROM. Jika EEPE diset 1 ketika EEMPE=1, maka data pada EEDR akan ditulis ke EEPROM pada alamat yang ditunjukkan oleh register EEAR. Setelah 4 siklus clock, maka CPU akan mereset kembali bit EEPE=0 yang menandakan bahwa proses penulisan telah selesai dilakukan. Oleh karena itu sebelum melakukan proses penulisan, program harus memastikan bahwa kondisi EEPE=0, yang artinya CPU tidak sedang melakukan proses penulisan ke EEPROM. Jika tidak maka proses penulisan akan gagal. Demikian juga halnya ketika membaca data dari EEPROM. Sebelum membaca data, program harus memastikan bahwa CPU tidak sedang dalam proses penulisan data ke EEPROM, jika tidak maka proses pembacaan akan gagal.

Contoh Program

; ***********************************************
; EEPROM.ASM
; Program contoh baca/tulis EEPROM pada ATtiny2313
; ***********************************************

.include “C:\MICROC~1\VMLAB\include\2313def.inc”

;Untuk AVR Studio 4, ganti include-nya dengan yang ini:
;.include “tn2313def.inc”

;Untuk VMLAB, ini diperlukan. Untuk AVR Studio 4 tidak.
.equ eepe = eewe
.equ eempe = eemwe

reset:
rjmp start
reti      ; Addr $01
reti      ; Addr $02
reti      ; Addr $03
reti      ; Addr $04
reti      ; Addr $05
reti      ; Addr $06
reti      ; Addr $07
reti      ; Addr $08
reti      ; Addr $09
reti      ; Addr $0A
reti      ; Addr $0B
reti      ; Addr $0C
reti      ; Addr $0D
reti      ; Addr $0E
reti      ; Addr $0F
reti      ; Addr $10

start:
;selalu diawali dengan pengesetan alamat stack
ldi    r16, low (ramend)
out    spl, r16

ldi    r16, $54    ; data di R16
ldi    r17, 0        ; alamat di R17
rcall    EEPROM_write    ; tulis $54 ke EEPROM alamat 0

ldi    r16, $CA    ; data di R16
ldi    r17, 5        ; alamat di R17
rcall    EEPROM_write    ; tulis $CA ke EEPROM alamat 5

ser    r16        ; R16 = $FF
ldi    r17, 0        ; R17 = 0
rcall    EEPROM_read    ; Baca EEPROM alamat 0 dan simpan di R16

forever:
rjmp forever        ; never ending jump

; Subrutin menulis data ke EEPROM dengan alamat 0-127
EEPROM_write:
sbic    eecr, eepe    ; apakah EEPE=0?
rjmp    EEPROM_write    ; tunggu jika EEPE=1
out    EEAR, r17    ; set alamat EEPROM
out    EEDR, r16    ; letakkan data di EEDR
sbi    EECR, eempe    ; set bit EEMPE
sbi    EECR, eepe    ; set bit EEPE
ret

; Subrutin membaca data dari EEPROM dengan alamat 0-127
EEPROM_read:
sbic    eecr, eepe    ; apakah EEPE=0?
rjmp    EEPROM_read    ; tunggu jika EEPE=1
out    eear, r17    ; set alamat EEPROM
sbi    eecr, eere    ; set bit EERE
in    r16, eedr    ; copy data dari EEDR ke R16
ret

Catatan: Program di atas dibuat dengan asumsi bahwa program sama sekali tidak menggunakan fitur interupsi dalam program. Gunakan instruksi CLI dan SEI sebelum dan sesudah proses baca-tulis EEPROM agar segala sesuatunya berjalan mulus, hehehe…

Berikut adalah cuplikan gambar Window Memori EEPROM dan Window Register dari VMLAB dan AVR Studio 4.

eepromvmlabWindow EEPROM VMLAB

registervmlabWindow Register VMLAB

eepromavrstudio4Window EEPROM AVR Studio 4

registeravrstudio4Window Register AVR Studio 4

Ok. Selamat belajar!

5 comments

  1. 118clip · Juli 8, 2009

    thank you

  2. andi · Oktober 3, 2009

    mas saya masih bingung mau coba pakai asm nyoba share data internal ram atmega
    dengan pakai jalur i2c, gimana mas ya…? saya pakai dua uc, sama2 atmega.
    tolong mas ya…. karena saya juga baru belajar i2c
    email saya mr.andi11n@yahoo.com

    thx

  3. aliex · September 22, 2010

    wah…mantap share nya . . .mksih bro..

    • chandramde · September 22, 2010

      Oke, sama-sama. Semoga bermanfaat.😀

  4. unick · Maret 25, 2011

    waaaaaahhhhhhh kok pake bahaasa asembli sie,,,, knp gak pke bahasa C sih pak,,, huhuh,,
    pak klo eeprom attiny bisa dipakai buat nyiimpen kaya pasword gtu ya?
    aku mw buat alat yang inputnya dari swicth di pinb.o dan pinb.1 yang membentuk suatu sandi trus sandinya itu disimpan di eeprom kemuadian apabila dipanggil bisa mengakses beban,,,
    klo kasus seperti itu memungkinkan tidak memanfaatkan eeprom?

Tinggalkan Balasan

Isikan data di bawah atau klik salah satu ikon untuk log in:

Logo WordPress.com

You are commenting using your WordPress.com account. Logout / Ubah )

Gambar Twitter

You are commenting using your Twitter account. Logout / Ubah )

Foto Facebook

You are commenting using your Facebook account. Logout / Ubah )

Foto Google+

You are commenting using your Google+ account. Logout / Ubah )

Connecting to %s