Baca dan Tulis Memori EEPROM
Pada percobaan kali ini akan dibuat program yang
berfungsi sebagai antarmuka penanganan memori EEPROM. Antarmuka program
menggunakan komunikasi serial. Melalui Serial Terminal atau aplikasi lainnya,
user dapat melakukan perintah baca can tulis dari atau memori EEPROM.
Prosedur
:
1.
Tuliskan sintaks program berikut ini
pada Arduino IDE, kemudian lakukan kompilasi dan upload program ke
mikrokontroller,
#include
<EEPROM.h>
boolean
exitProgram = 0;
void setup()
{
Serial.begin(9600);
Serial.println("=========
EEPROM Access Via Serial ========");
Serial.println("Type
this command to execute EEPROM operation");
Serial.println("write
: For write data to EEPROM");
Serial.println("read
: For read data from EEPROM");
Serial.println("clear
: For clear all data in EEPROM");
Serial.println("exit
: For exit from program");
}
void loop() {
int command;
while(!exitProgram)
{
do {
Serial.print("Type
Command >> ");
while(Serial.available()==0);
command =
readCommandFromSerial();
switch(command)
{
case 1 :
Serial.println("Write EEPROM Selected");
writeEEPROM();
break;
case 2 :
Serial.println("Read EEPROM Selected");
readEEPROM();
break;
case 3 :
Serial.println("Clear EEPROM Selected");
clearEEPROM();
Serial.println("Clear EEPROM
Finished");
break;
case 4 :
Serial.println("Exit From Program");
exitProgram = 1;
break;
default :
Serial.println("Wrong Command, Please Type Again !");
break;
}
}
while(command
== 0);
}
}
int
readCommandFromSerial() {
char
stringFromSerial[10];
char data;
int command;
int countData
= 0;
for(int
i=0;i<10;i++) {
stringFromSerial[i]=0;
}
while(true) {
if(Serial.available())
{
data = Serial.read();
Serial.write(data);
if(data=='\n')
{
break;
}
else{
if(data!='\r')
{
stringFromSerial[countData]
= data;
countData++;
}
}
}
}
if(strcmp(stringFromSerial,"write")==0){
command = 1;
}
else
if(strcmp(stringFromSerial,"read")==0){
command = 2;
}
else
if(strcmp(stringFromSerial,"clear")==0){
command = 3;
}
else
if(strcmp(stringFromSerial,"exit")==0) {
command = 4;
}
else{
command = 0;
}
return
command;
}
int
readValFromSerial() {
char
stringFromSerial[10];
char data;
int val;
int countData
= 0;
for(int
i=0;i<10;i++) {
stringFromSerial[i]=0;
}
while(true) {
if(Serial.available())
{
data =
Serial.read();
Serial.write(data);
if(data=='\n')
{
break;
}
else{
if(data!='\r')
{
stringFromSerial[countData]
= data;
countData++;
}
}
}
}
sscanf(stringFromSerial,"%d",&val);
return val;
}
void
clearEEPROM() {
for(int
i=0;i<512;i++) {
EEPROM.write(i,0);
}
}
void
writeEEPROM() {
int address;
do {
Serial.print("Address
: ");
address =
readValFromSerial();
if(address>512)
{
Serial.println("Addres
maximal is 512 !, Please type again !");
}
}
while(address>512);
int data;
do {
Serial.print("Data
: ");
data =
readValFromSerial();
if(data>512)
{
Serial.println("Data
maximal is 512 !, Please type again !");
}
}
while(data>512);
EEPROM.write(address,data);
Serial.println("EEPROM
Write Success !");
}
void
readEEPROM() {
int address;
do{
Serial.print("Address
: ");
address =
readValFromSerial();
if(address>512)
{
Serial.println("Addres
maximal is 512 !, Please type again !");
}
}
while(address>512);
int data =
EEPROM.read(address);
Serial.print("Data
in Address ");
Serial.print(address,DEC);
Serial.print("
: ");
Serial.println(data,DEC);
}
Tugas dan Pertanyaan:
1.
Jalankan
aplikasi Serial Monitor pada Arduino, pastikan Serial Monitor menggunakan
baudrate 9600 dan pada akhir pengiriman data disertakan karakter CR+LF. Lakukan
penulisan data pada memori alamat 100, dengan data bernilai 10. Kemudian keluar
dari program dan matikan power Arduino dan nyalakan kembali. Lakukan pembacaan
data pada alamat 100, berapakah nilai pada alamat 100? Apakah data yang
dituliskan sebelumnya hilang?
#Tidak.
Karena masih tersimpan pada memori mikrokontroller Arduino.
2.
Kenapa
pada program penulisan data hanya dibatasi sampai 512? Jelaskan !
#
Sebenarnya maksimal 1023. Itu tergantung dari kita yang ingin membatasinya.
3.
Kenapa
pada program alamat memori yang dapat ditulisi data hanya sampai 512?
#
Karena pada sintaks telah dibatasi hanya sampai <512 dan artinya kita hanya
memiliki 511 address data yang dapat kita isi dengan data-data tertentu.
4.
Buatlah
kesimpulan dari praktikum ini !
ü Data yang kita
tulis tidak akan hilang walaupun setelah kita menulis data kita mematikan
sumber tegangan pada arduino karena data tersebut masih tersimpan pada memori
Arduino.
ü Jumlah alamat
yang dapat kita buat adalah 1023 address. Namun pada sintaks nya kita dapat
membatasi nya lebih kecil.
ü Jumlah data yang
dapat kita tulis pada masing-masing address adalah 256 data.