Sabtu, 14 Desember 2013

Posted by Unknown |
Dalam suatu mikrokontroler biasanya terdapat tiga buah memori, yaitu RAM, ROM dan EEPROM. RAM dan ROM hampir selalu ada pada setiap mikrokontroler, sedangkan EEPROM hanya terdapat pada beberapa jenis mikrokontroler tertentu. RAM digunakan sebagai penyimpan data sementara yang berupa register-register. Register adalah tempat penyimpanan data yang berkaitan dengan banyak hal, misalnya variabel dalam program, keadaan input/output, serta pengaturan timer/counter dan komunikasi serial. Telah disebutkan sebelumnya data pada RAM akan hilang saat catu daya dicabut.
ROM digunakan sebagai tempat penyimpanan program. ROM yang banyak dipakai pada mikrokontroler saat ini adalah flash PEROM (Programmable Erasable ROM), yang mirip seperti memori pada flash disk, namun bedanya adalah flash PEROM hanya dapat dihapus dan ditulis secara sekaligus. EEPROM biasanya digunakan untuk menyimpan data yang tidak boleh hilang meski catu daya dihapus. Meski fungsinya mirip EEPROM biasanya lebih sedikit digunakan dibanding RAM karena kecepatan akses EEPROM yang lebih lambat. Contoh penggunaannya adalah penyimpanan data password. atau setting suatu sistem.
Timer/counter adalah peranti untuk mencacah sinyal dari clock ataupun sinyal dari suatu kejadian. Jika sinyal yang dicacah berasal dari clock maka peranti ini berfungsi sebagai pewaktu, sedangkan jika berasal dari clock maka peranti ini berfungsi sebagai pencacah. Pewaktu bisa digunakan untuk bermacam-macam kegunaan, misalnya untuk menghasilkan tundaan waktu dan untuk mengukur selang waktu suatu proses.


Peranti antarmuka ke input/output pada mikrokontroler disebut sebagai port. Pada satu port I/O digital terdiri beberapa pin, biasanya berjumlah 8 atau satu byte, dengan masing-masing pin dapat mentransfer satu bit data biner (logika 0 dan 1) dari/ke mikrokontroler. Selain port I/O digital, pada suatu mikrokontroler juga dapat berkomunikasi dengan peranti lain menggunakan komunikasi serial. Terdapat berbagai standar atau protokol untuk komunikasi serial seperti SPI (Serial Peripherial Interface), I2C (Inter-Integrated Circuit), 1-wire, 2-wire, UART (Universal Asynchronous Receiver Transmitter) dan USART (Universal Synchronous- Asynchronous Receiver Transmitter).
Pada percobaan kali ini akan dibuat program yang berfungsi sebagai antar muka penanganan memori eeprom. Antarmuka program menggunakan komunikasi serial. Melalui Serial Terminal atau aplikasi lainnya, user dapat melakukan perintah baca dan
tulis dari atau ke memori eeprom.
Prosedur :
1.      Tuliskan sintaks program berikut ini pada Arduino IDE, kemudian lakukan kompilasi dan upload program ke mikrokontroler.
#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();
Break;
default : Serial.println(“Wrong Command, please Type Again !”);
break;
}
}
while(command == 0);
}
}
int readCommandFromSerial() {
char stringFromSerial[10];
char data;
nt 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!='\
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 521 !, 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);
}

0 komentar:

Posting Komentar