Arduino ile EEPROM (Dahili Hafıza) Kullanımı EEPROM using with arduino

Arduino devreleri ve uygulamaları

Arduino ile EEPROM (Dahili Hafıza) Kullanımı

EEPROM using with arduino

Arduino ile EEPROM (Dahili Hafıza) Kullanımı
EEPROM using with arduino

Bazı projelerimizde verileri kaydetmemiz gerekir. Fakat program içerisinde değişkenlere kaydettiğimiz veriler elektrik kesintisinde sıfırlanmaktadır. Bu durumda veriyi kaybetmemek için EEPROM entegresini kullanmamız gerekir.

EEPROM’u aslında flash disk olarak düşünülebilir. besleme gerilimi olmasa dahi içerisindeki verileri biz silene kadar saklar. Bazı arduinolar için EEPROM boyutu aşağıdaki gibidir:

  • ATmega328 temelli Arduinolar için 1024 byte,
  • ATmega168 ve ATmega8 temelli Arduinolar için 512byte,
  • ATmega1280 ve ATmega2560 temelli Arduinolar için 4 KB (4096 byte)

Bazı veri tiplerinin boyutları:

  • Int – 2 byte
  • Float – 4 byte
  • Double – 4 byte  //Arduino modeline göre değişmektedir
  • Char – 1 byte
  • Long – 4 byte

EEPROM’a yazmak istediğimiz veriler kendi boyutları kadar yer kaplamaktadırlar.

EEPROM’a veri yazma
Writing data to EEPROM

#include <EEPROM.h>

int addr = 0; //başlangıç adresi

void setup()
{
}

void loop()
{
//AnalogRead’den gelen 0-1023 arasındadır.
//Fakat EEPROM’a 0-255 aralığında veri girişi yapılabilmektedir.
//Bu yüzden 4e bölmek gerekir.
int val = analogRead(0) / 4;

//val değerini addr değerinden itibaren yazar.
EEPROM.write(addr, val);

//veri yazıldıktan sonra boş kısma geçmek için addr adres değeri bir arttırılır.
addr = addr + 1;
//512byte’lık bir eeprom için eepromun sonuna gelinip gelinmediği bu şekilde kontrol edilebilir.
if (addr == 512)
addr = 0;

delay(100);
}

EEPROM’dan veri okuma
Reading data from EEPROM

#include <EEPROM.h>

int address = 0; // EEPROM’un ilk adresi
byte value;

void setup()
{
Serial.begin(9600);
while (!Serial) {
; // Serial port bağlanana kadar bekle,sadece Leonardo kartında ihtiyaç var
}
}

void loop()
{
//kaynak adresten veriyi oku
value = EEPROM.read(address);

Serial.print(address);//ham halini yaz
Serial.print(“\t”);
Serial.print(value, DEC); //DEC (decimal) halini yaz
Serial.println();

//sonraki adrese geç
address = address + 1;

//512byte’lık eepromda sona geldiyse adresi kontrol et
if (address == 512)
address = 0;

delay(500);
}

EEPROM’a float veri yazma ve okuma
Writing and reading float data to EEPROM

#include <EEPROM.h>

//örnek float değerimiz
float num1 = 63.412;
float num2 = 0;

void setup()
{
Serial.begin(9600);
delay(2000);
EEPROM_Write(&num1, 1); //num1 değerini EEPROM’un ilk değerinden itibaren yazmaya başla
EEPROM_Read(&num2, 1); //başlangıçtaki değeri oku num2’ye aktar
Serial.println(num2, DEC); //num2’yi DEC olarak yaz
}

void loop()
{
}

void EEPROM_Write(float *num, int MemPos)
{
//float 4byte’lık yer kapsadığı için
//float değerini 4 byte’a ayır
//ve başlangıç adresinden itibaren
// 4 ardışık adrese kaydet
byte ByteArray[4];
memcpy(ByteArray, num, 4);
for(int x = 0; x < 4; x++)
{
EEPROM.write((MemPos * 4) + x, ByteArray[x]);
}
}

void EEPROM_Read(float *num, int MemPos)
{
//float 4 byte’lık yer kapsadığı için
//başlangıç adresinden itibaren 4 ardışık adresi oku
//ve hedef gösterilen değişkene kaydet
byte ByteArray[4];
for(int x = 0; x < 4; x++)
{
ByteArray[x] = EEPROM.read((MemPos * 4) + x);
}
memcpy(num, ByteArray, 4);
}

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir