Tampilkan postingan dengan label EEPROM. Tampilkan semua postingan
Tampilkan postingan dengan label EEPROM. Tampilkan semua postingan

Kamis, 17 Februari 2011

EEPROM : Penjelasan EEPROM dan Error Data

.
Sebelum menjelaskan mengapa pada post EEPROM : Error data saat penyimpanan kok bisa terjadi error saat penyimpanan data padahal coding-nya tidak jauh berbeda dan justru coding yang tepat malah terkesan lebih panjang dibanding coding yang tidak tepat.

Coding Tidak Tepat (kiri) dan Coding yang Tepat (kanan)







Memang pada posting EEPROM : Mengakses EEPROM AVR menggunakan EEPROM sangatlah mudah, sama seperti menentukan variabel biasa yang hanya ditambahkan kata eeprom atau _eeprom di depan variabel tersebut.
Tapi mengakses EEPROM tidaklah semudah seperti membuat variabel untuk EEPROM. Oleh sebab itu perlu diketahui apa itu EEPROM di mikrokontroller AVR.

EEPROM pada AVR
Sumber : en.wikibooks.org
Hampir semua mikrokontroller AVR memiliki EEPROM internal kecuali ATtiny11 dan ATtiny28. EEPROM pada AVR adalah penyimpanan data yang bersifat semi-permanent dan non-volatile yaitu mampu menyimpan data meskipun tidak diberikan power supply.

Alamat memory EEPROM tidak terpetakan (mapped) didalam memori program maupun memori data sehingga meskipun EEPROM AVR adalah internal EEPROM tetapi mengaksesnya seperti mengakses external EEPROM yang menggunakan register IO, register pointer spesial, dan instruksi read/write yang menyebabkan mengakses EEPROM lebih lambat dibanding mengakses internal RAM.

EEPROM AVR dapat ditulis hingga minimal 100.000 kali dan agar batas limit ini dapat dicapai, sebaiknya anda menggunakan skema wear-leveling ketika menulis di internal EEPROM AVR. Ketika mikrokontroller dipabrikasi dan dijual oleh Atmel, kondisi EEPROM telah terhapus dengan nilai semua EEPROM adalah 0xFF (logika 1 semua bukan logika 0).

Beberapa AVR memiliki errata (koreksi) tentang menulis/write di EEPROM pada alamat 0 ketika kondisi daya tertentu (biasanya ketika brownout), sehingga Atmel merkomondasikan untuk tidak menulis EEPROM pada alamat 0. Contohnya : Errata AT90S1200

Penjelasan Error Data
Dari penjelasan EEPROM pada AVR maka jelaslah bahwa menulis di internal EEPROM lebih lambat dibanding menulis data di internal RAM, karena meskipun internal EEPROM tetapi mengaksesnya seperti mengakses eksternal EEPROM.

Pada contoh aplikasi di post : EEPROM : Error data saat penyimpanan, ketika data UART dari komputer dikirim terus-menerus ke mikrokontroller yang kemudian mikrokontroller menyimpan data tersebut langsung ke EEPROM, maka saat mikrokontroller sedang "sibuk menulis" data ke EEPROM ternyata komputer masih terus-menerus memberikan data ke MCU sehingga menghasilkan data error di alamat tertentu pada memori EEPROM AVR.

Hal inilah yang menyebabkan:
  • Semakin panjang data yang dikirim dari komputer ke MCU maka semakin besar pula error yang dihasilkan.
  • Semakin cepat komunikasi komputer dengan MCU (baudratenya cepat) errornya juga semakin besar.






Solusinya yaitu : Ketika komunikasi / transfer data sedang berlangsung, data yang diterima dari komputer disimpan dulu di internal RAM, dan ketika komunikasi / transfer data selesai barulah data dari internal RAM dipindahkan ke Internal EEPROM.

Oiya coba cari referensi / literatur tentang skema wear-leveling, itu sangat menarik untuk mengetahui teknik penyimpanan data ke EEPROM agar umur EEPROM bisa panjang / bisa mencapai batas maksimum penulisan EEPROM.

Semoga membantu ...^^v...

EEPROM : Error data saat penyimpanan

.
Cara menggunakan / mengakses EEPROM sudah saya bahas di post
EEPROM : Mengakses EEPROM AVR.

Yang ingin saya bahas pada post ini adalah beberapa masalah yang biasa terjadi atau bahkan sering anda alami tetapi tidak anda sadari.
Dan lebih berbahayanya adalah anda tidak menyadari masalah ini yang mungkin bikin pusing anda ketika memprogram mikrokontroller / hardware anda.

Masalahnya yang ingin saya bahas yaitu data yang disimpan di EEPROM tidak sesuai dengan data yang kemudian dibaca dari EEPROM tersebut.
Saat anda ingin menulis data di EEPROM misalnya :
"SAYA MENULIS KALIMAT INI DAN TERSIMPAN DI EEPROM."
tetapi ketika mencoba membaca data tersebut untuk ditampilkan di LCD atau dikirim ke komputer, ternyata datanya tidak sesuai atau bahkan kacau balau.

Contoh Kasus
Anda ingin merancang suatu sistem yang pengontrollan berdasarkan waktu atau Time Scheduling Control misalnya seperti ingin mematikan atau menyalakan beberapa lampu di beberapa ruangan yang dikendalikan oleh mikrokontroller.

Transfer data melalui port USB atau port COM.
Sesuai keinginan anda.


Data Bulan, Hari, Tanggal, Jam, dan Menit ditentukan oleh User melalui software komputer yang kemudian software mentransfer data tersebut ke MCU (Microcontroller Unit). Oleh MCU data tersebut disimpan di dalam EEPROM agar dapat disimpan secara (semi) permanen dan data dapat digunakan ketika sistem / perangkat dinyalakan setelah power supplynya Off (dicabut).

Data yang dikirim oleh komputer misalnya protokolnya seperti berikut : #02,16,04,08,00;ON;01,02,03,04,05~
Artinya :
  • # : Karakter awal / Start Byte berfungsi untuk informasi ke MCU bahwa Komputer akan mengirimkan serangkaian data ke MCU.
  • , (koma) : Karakter pemisah antar data.
  • 02,16,04, : Bulan ke 2 (Februari), tanggal 16, hari ke-4 (rabu, minggu hari ke-1)
  • 08,00 : Jam 8 menit ke 00 (tepat jam 8 pagi).
  • ; (titik koma) : Karakter pemisah Perintah
  • ON : Perintah On untuk menyalakan lampu dan OF (2 karakter dan bukan OFF) untuk mematikan lampu.
  • 01,02,03,04,05 : Ruangan yang di On-kan adalah ruang 1, 2, 3, 4, dan 5.
  • ~ : Karakter akhir data / Stop Byte berfungsi untuk informasi ke MCU bahwa data telah selesai di kirimkan.

Coding yang Tidak Tepat dan Coding yang Tepat








Jika anda memprogram seperti coding di atas maka data yang tersimpan di EEPROM kemungkinan ERROR-nya mencapai 40-80 % (Xixixixixi... survey asal-asalan) tergantung panjang data yang ditransfer lalu disimpan di EEPROM. Artinya semakin panjang data yang di transfer terus-menerus ke MCU dan kemudian di simpan di EEPROM maka semakin besar pula kesalahan data-data yang tersimpan di EEPROM. Oleh sebab itu saya sarankan untuk memprogram seperti Coding berikut :




Penjelasannya di Post :
EEPROM : Penjelasan EEPROM dan Error Data

Panjaaaang nih..
Semoga membantu ...^^v...

Senin, 05 April 2010

EEPROM : Mengakses EEPROM AVR

.
Mikrokontroller AVR telah memiliki EEPROM internal yang dapat diakses langsung dengan mudah seperti halnya mengakses variabel nilai. Dengan fitur EEPROM ini perancang tidak perlu menambahkan eksternal EEPROM dan juga tidak perlu repot-repot membuat fungsi untuk mengakses EEPROM tersebut.

EEPROM pada CoViAVR
Mengakses dan mengaktifkan EEPROM pada CoViAVR semudah membuat dan memberikan nilai pada variabel global. Silahkan baca help CoViAVR tentang Accessing the EEPROM.
Penggunaan EEPROM harus menggunakan global variabel dan ditambahkan kata eeprom atau _eeprom. Pemberian nama dan nilai semudah pemberian nilai pada variabel lainnya.





Indikator digunakan dan terpakainya EEPROM pada AVR yaitu ketika dicompile akan tampak seperti gambar berikut :
Beberapa catatan mengenai EEPROM pada avr yaitu :
  • Total EEPROM pada ATmega8535 adalah 512 Byte EEPROM.
  • EEPROM AVR menggunakan ukuran data terkecil yaitu 16 bit atau 2 Byte sehingga total EEPROM yang bisa digunakan pada CoViAVR adalah 512 / 2 = 256.
  • Secara otomatis alamat EEPROM akan dimulai dari 0x0000 dan untuk menentukan alamat EEPROM sesuai keinginan programmer yaitu menggunakan tanda @.
  • misalnya : eeprom unsigned int nilai @0x2C;
Mengakses EEPROM
Potongan coding disamping adalah mengakses serial RTC kemudian data jam, menit, detik, tanggal, bulan, dan tahun disimpan di EEPROM AVR. Aplikasi ini digunakan untuk aplikasi scheduling controller atau alat pengendali berdasarkan jadual dan kalender yang ditentukan.

Ketika chip mikrokontroller AVR di program (didownload) maka saat itu pula seluruh EEPROM diprogram dan diberikan nilai sesuai dengan nilai yang diprogram pada global variabel, dalam hal ini EEPROM jam, menit, detik bernilai 0, tanggal = 1, bulan = 1, dan tahun = 10 (0x0A);
Hal inilah yang menyebabkan jika anda memprogram kembali chip mikrokontroller maka nilai EEPROM di reset sehingga seolah-olah nilai EEPROM tidak berubah atau tidak tersimpan.

Silahkan baca posting EEPROM selanjutnya.
Semoga manfaat ;)

Topik yang Populer