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
- AT89S8253:PORT3.0 dan PORT3.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: at89, at89s8252, at89s8253, atmega, atmega32, avr, bascom, eeprom










December 14th, 2009 at 7:03 pm
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
December 17th, 2009 at 12:19 pm
@dhani:
maaf saya belum tahu solusi-nya bagaimana…
December 18th, 2009 at 3:09 pm
@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.
December 31st, 2009 at 9:57 pm
thanks for info,,,mayan nambah info lagi nih ..
January 6th, 2010 at 3:35 pm
tolong soft bascomx yang bisa di sedot,
aq pengen belajar juga…
keep it up!