Artikel ini sebenarnya merupakan sambungan dari penjelasan saya tentang EEPROM yang ada di AT89S8253. Pada artikel ini saya bahas sebuah rangkaian dan program sederhana untuk mengakses (tulis/baca) EEPROM yang ada pada AT89S8253 (sebuah mikrokontroler keluarga Atmel AT89) dan ATMega32 (sebuah mikrokontroler keluarga Atmel AVR). Perhatikan gambar hasil-hasil bidikan saya atas eksperimen yang saya lakukan menggunakan AT89S8252 dan ATMega32 (IC ada di sebelah sisi menghadap kebawah)…

Okey, kita awali dengan rangkaian yang digunakan, cukup sederhana, dalam hal ini hanya digunakan sebuah LCD untuk memberitahukan kepada kita apa yang terjadi di-’dalam’ sana, maksudnya di dalam mikrokontroler yang bersangkutan. Nantinya aplikasi ini hanya akan menuliskan 10 bilangan acak ke EEPROM mulai alamat 0 sampai dengan 9. Cukup sederhana karena yang ditekankan adalah konsep pengaksesan EEPROM yang begitu mudah menggunakan BASCOM 8051 dan/atau BASCOM AVR dari MCSELEC.

Untuk versi BASCOM dan pemasangan LCD mengikuti ketentuan berikut (baik untuk AT89S8253 maupun ATmega32…

  • Menggunakan BASCOM 8051 versi 2.0.14.0 (tahun 2007);
  • Menggunakan BASCOM AVR versi 1.11.9.5 (tahun 2009);
  • Menggunakan Min MCS51/AVR dan Sistem Minimum ATMega32 dan juga modul LCD 2×16;
  • Pin RS dan E LCD masing-masing dihubungkan ke:
    • AT89S8253:PORT3.0 dan PORT3.1
    • ATMega32: PORTA.0 dan PORTA.1
  • Pin DATA 4, 5, 6 dan 7 pada LCD masing-masing dihubungkan ke:
    • AT89S8253: PORT3.4, PORT3.5, PORT3.6 dan PORT3.7
    • ATMega32: PORTB.3, PORTB.2, PORTB.1 dan PORTB.0

Langkah berikutnya adalah menuliskan program BASCOM AVR dan/atau BASCOM 8051-nya. Diawali dengan deklarasi berkas pustaka untuk AT89S8253:

$regfile = “89s8253.dat”
$crystal = 12000000

Atau untuk ATMega32 gunakan deklarasi berikut…

$regfile = “m32def.dat”
$crystal = 7372800

Selanjutnya badan program-nya sama semua. Kita awali dengan mendeklarasikan konfigurasi LCD sesuai dengan ketentuan yang saya berikan sebelumnya, sekaligus mendefinisikan beberapa variabel yang terkait atau terlibat…

Config Lcdpin = Pin , Db4 = Portb.3 , Db5 = Portb.2 , Db6 = Portb.1 , Db7 = Portb.0 , E = Porta.1 , Rs = Porta.0
Config Lcd = 16 * 2

Dim X As Byte , I As Byte , D As Byte

Berikutnya menampilkan layar pembuka pada LCD dengan tundaan sekitar 3 detik…

Cls
Locate 1 , 1
Lcd “ATMega-32″
Locate 2 , 1
Lcd “Demo EEPROM”

Wait 3

Perintah LOCATE digunakan untuk menempatkan kursor pada LCD, sehingga LOCATE 2,1 artinya tempatkan kursor LCD pada posisi baris 2, kolom 1 demikian seterusnuya. Sedangkan perintah LCD diikuti dengan parameter teks yang akan ditampilkan pada LCD, karena LCD-nya ukuran 2 baris x16 karakter, jika teks lebih dari 16 akan terpotong. Berikutnya menyiapkan tampilan proses untuk penulisan data dan pembacaan data ke/dari EEPROM melalui LCD 2×16 karakter…

Cls
Locate 1 , 1
Lcd “menulis EEPROM..”
Locate 2 , 1
Lcd “datanya=”

Untuk penulisan data-data acak ke EEPROM yang bersangkutan, mulai dari alamat 0 sampai dengan 9 gunakan potongan program berikut…

For I = 0 To 9
Locate 2 , 9
D = Rnd(100)
Lcd D
Writeeeprom D , I
Wait 1
Next I

Instruksi WRITEEEPROM diikuti dengan parameter DATA dan ALAMAT eeprom, sedangkan untuk mendapatkan data-data acak digunakan fungsi RND(100), artinya hasilkan bilangan acak dengan bilangan maksimum 100. Berikutnya menyiapkan tampilan pada LCD untuk pembacaan data…

Locate 2 , 1
Lcd “selesai menulis!”
Wait 2

Cls
Locate 1 , 1
Lcd “membaca EEPROM..”
Locate 2 , 1
Lcd “data ke-”

Untuk pembacaan data-data yang sudah kita tuliskan sebelumnya (10 bilangan acak mulai lokasi 0 sampai dengan 9) gunakan potongan program berikut…

For I = 0 To 9
Locate 2 , 9
Readeeprom X , I
Lcd I ; ” = ” ; X
Wait 1
Next I

End

Jangan lupa akhiri program dengan pernyataan END!

That’s all, begitu mudah bukan? Menggunakan BASCOM Anda tidak perlu pusing-pusing mikiran pengaturan berbagai macam register yang berkaitan dengan EEPROM. Ada pertanyaan atau komentar? Silahkan…

Tags: , , , , , , ,

22 Responses to “Akses EEPROM pada AT89S8253 dan AVR ATMega32”

  1. pa saya punya pengalaman dengan eeprom internal atmega xx, jika terjadi salah penulisan yang diakibatkan karena tegangan nge drop, maka datanya akan berubah semuanya menjadi 0XFF. semua alamat.

    secara software saya sudah tidak bisa menanggulanginya, mau pakai cheksum, crc atau lain sebagainya.
    kalo secara hardware gimana ya pa cara penanggulangannya?
    terima kasih sebelumnya

  2. @dhani:
    maaf saya belum tahu solusi-nya bagaimana…

  3. @dhani:
    Jika tegangan kurang dari yg diperlukan mikro, memang mikro akan salah menjalankan program. Salah ini bisa berupa mengendalikan port2 yg salah, salah data komunikasi dan juga dapat mengganti data pada EEPROM. Parahnya lagi kesalahan itu random!!! tdk bisa ditanggulangi dgn program. HAL INI SANGAT BERBAHAYA JIKA MENYANGKUT SISTEM YG SENSITIF.

    Sulusinya adalah dengan menggunakan Brown-out Detection(BOD). Kalo pada mikro klan MCS51 sepertinya kita harus membuat rangkaian BOD sendiri di luar mikro, kalo mikro klan AVR sudah menyediakan BOD on-chip.

    Cara kerja BOD adalah; mikro akan berhenti bekerja jika tegangan sumber melewati batas bawah tegangan BOD (VBOD-) dan akan bekerja lagi(dianggap reset) jika tegangan telah melebihi batas atas tegangan BOD (VBOD+). selisih VBOD- dan VBOD+ disebut tegangan histerisis (VHYST). Dengan adanya fasilitas BOD ngak ada lagi mikro yg ngawur…..

    Lalu bagaimana menggunakannya?
    Contoh: ATmega8
    Kita tinggal mengaktifkan fuse BODEN, maka BOD akan bekerja dengan VBOD- = 3.7V dan VBOD+ = 4.5V.
    Artinya jika VCC kurang dari 4.5V, mikro tdk bekerja. Jika di atas 4.5V, mikro akan mulai bekerja. Setelah bekerja jika VCC turun di bawah 3.7V, mikro akan berhenti bekerja. Untuk dapat bekerja kembali tegangan VCC harus di atas 4.5V. Jika terpenuhi maka mikro akan bekerja kembali dari awal program, bukan melanjutkan program sebelumnya pada waktu tegangan turun.

    Satu lagi fuse yg berhubungan dengan BOD yaitu BODLEVEL. tapi fuse ini bekerja untuk ATmega8L. Untuk lengkapnya lihat ATmega8.pdf hal:38
    trimakasih.

  4. thanks for info,,,mayan nambah info lagi nih ..

  5. tolong soft bascomx yang bisa di sedot,
    aq pengen belajar juga…
    keep it up!

  6. Saya baru belajar tentang Mikro, Sekarang saya ingin membuat minimum system ATMega 32, dimana saya bisa mendapatkan panduan secara detail tentang pembuatannya, karna saya masih sangat awam sekali tentang mikro,terimakasih sebelumnya.

  7. @dedy:
    maksudnya rangkaian apa yach? kalao rangkaian minimum silahkan search AVR tutorial di website ini…

  8. pak klo nyimpan data ke eeprom serta baca lagi data yag disimpan dieeprom avr atmega16 dg bhs C gemana?

  9. mas,beri solusi untuk download program ke at89s8253 dengan usbasp atmega8 dengan software progisp v1.68 selalu tampil ”chip enable program error” saat download berlangsung,tapi sudah dicoba untuk at89s51,at89s52 berhasil & berjalan objeknya.jadi dimana letak kesalahannya?thanks.

  10. pak klo tulis eeprom utuk time (jam, menit, detik) dengan keypad bagaimana ya pak?

  11. kalo dengan bahasa cv avr ada gak gan??
    boleh minta tolong gak gan buat dikirim..

  12. Akses EEPROM pada modul AVR ATMega328 punya? bisa bli, dan bisa minta contoh program, DRIVER nya ada?
    Trims

  13. Akses EEPROM pada AT89S8253 dan AVR ATMega32

    Cara beli board nya bagemana? ada contoh program nya?

  14. kira - kira itu smuanya habis biaya berapa kalo saya mau buat kayak gitu pak ??

  15. thank you very much to share info.

  16. Artikel yang sangat Bagus dan Bermanfaat.. Update terus dan sukses selalu ya Gan…

  17. Wah ternyata mudah ya

  18. thank u for sharing

  19. thank you for sharing it’s so helpful

  20. thank you for sharing, im so interested.

  21. Good explanation about a series and a simple program to access the EEPROM on AT89S8253 and ATMega32.ipad rental

Trackbacks/Pingbacks

  1. Memulai Belajar Mikrokontroler - Quick, Easy and Harmless! | DSP & Embedded Electronics

Leave a Reply

You can use these tags: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>