Mikrokontrolcülerde çeşitli türlerde bellek (hafıza) çipleri kullanılmaktadır. Bunlardan en yaygın olarak kullanılanı ise EEPROM çipleridir. EEPROM Eletriksel olarak Silinebilen Programlanabilien ve Sadece Okunabilen Hafıza demektir. EEPROM sadece okunabilen hafıza (ROM) ‘nın bir çeşididir. Ancak EEPROM elektriksel programlamayla yazılabilme özelliğinede sahiptir. Bu hafıza tipinde veri uzun süreli zarar görmeden saklanabilir ve mikrokontrolcü sistemi tekrar kullanılmak istendiğinde veriye ulaşılabilmektedir.

Mikrokontrolcülerde herhangi bir veriyi saklama ihtiyacı duyulabilmektedir. Mesela bir sensör değeri, herhangi bir veri yada bir resim bilgisi gibi. . EEPROM hafızası ayrıca sistemin kendisini kapatmadan önceki verileri kaydetmesi için de kullanılır böylece sistem yeniden açıldığında kapanmadan önceki verilere rahatlıkla ulaşılabilme imkanı sağlanır.

EEPROM bir sistemde mikrokontrolcülerle kullanılan küçük boyutlu bir çiptir. Birçok mikrokontrolcüde küçük çaplı bağlantılar için veri depolayabilecek kapasitede dahili bir EEPROM kullanılır böylece extra hafıza çipi kullanmaktan kaçınmış oluruz. Arduino kartları AVR mikrokontrolcüsü kullanır ve dahili EEPROM hafızasıyla belirli kodlar kullanılarak yazma ve okuma işlevleri rahatlıkla yapılabilmektedir.

 

IMG_5486 copy

Arduino, herhangi bir başka sisteme rahatlıkla bağlayabileceğimiz ve kullanımı çok kolay olan bir prototipleme platformudur. Programlama ortamıda çok kolay olmakla beraber karmaşık işlevler için bile birçok programla gelen yerleşik fonksiyonları bünyesinde barındırmaktadır.

Bu projede Arduino pro-mini kartı kullanılmış ve windows işletim sitemi üzerinde arduino IDE 1.0.3 ile programlanmıştır. Aşağıda arduino pro-mini ve Arduino IDE’nin birer fotoğrafı bulunmaktadır.

10_6 2_0_3

Arduino pro-mini kartları özel olarak hantal, ağırlık yapan, boyutu büyüten parçalarından kurtularak yalnızca temel parçalarını üzerinde barındırırlar. Bu yüzden yardımcı bir donanım olarak  programı USB ‘den TTL çevirimini yaparak arduino kartına yükleyen harici çeviricisi vardır.

15_2

 

 

Arduino pro-mini üzerinde dahili 1Kb EEPROM hafızası içeren ATMEGA328 mikrokontrolcüsü bulunmaktadır. Arduino IDE programında <EEPROM.h> olarak adlandırılan bir kütüphane bulunmaktadır. Bu proje için yazılan kodda dahili EEPROM belleğinden okuma ve yazma yapabilmek için <EEPROM.h> kütüphanesinin bazı fonksiyonları kullanılmıştır. Bu fonksiyonlar EEPROM.write() ve EEPROM.read() ‘dir. Bunlar aşağıda detaylı olarak anlatılacaktır.

EEPROM.write()

EEPROM.write() fonksiyonu fonksiyonda geçen parametreler dahilinde EEPROM hafızasının belirli adresine kapladığı byte değerinde veriyi yazmak için kullanılır. Fonksiyonun 2 parametresi vardır; birinci parametre yazılmak istenen verinin tutulması istenen adresidir. İkinci parametre ise gerçek veri boyutudur. Örnek olarak veri ‘A’ olsun ve yazılmasını istediğimiz adres ise ‘addr’ olsun bunu kodda nasıl gösterebiliriz?

 EEPROM.write(addr, ‘A’);

EEPROM.read()

EEPROM.read() fonksiyonu ise arduino’nun mikrokontrolcüsündeki dahili EEPROM hafızasından okunmak istenen belirli veri değeridir. Bu fonksiyonun tek bir parametresi vardır. Oda verinin nereden okunacağının adresidir. Örnek olarak veri değeri değişken ‘addr’ tarafından belirtilen yerden okunacak ise aşağıdaki ifade kullanılabilir.

EEPROM.read(addr);

Devre Şeması:

CIRCUIT_16

Kod:

#include <EEPROM.h>
#include <LiquidCrystal.h>
 
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);               
 
int address = 30;                                    // eeprom'daki değişken adres
int write_value = 100;                               // eeprom'a yazılan değişken veri
int read_value = 0;                                // eeprom'dan okunacak değişken değer
 
int led = 6;                                         
 
void setup()
{
  pinMode(led, OUTPUT);                              
 
  lcd.begin(16, 2);                                  
  lcd.print("elektronikhobi.net");
  delay(2000);
  lcd.clear();
  
  EEPROM.write(address, write_value);                 // belirlenen adrese değeri yaz
  
  lcd.print("Yazılan : ");                            // 1.satırda yazılan değeri göster
  lcd.print(write_value);
  
  delay(2000);
  
  read_value = EEPROM.read(address);                  // adresten değeri oku
  
  lcd.setCursor(0, 1);                                // 2.satıra okunan değeri yaz
  lcd.print("Okunan    : ");                       
  lcd.print(read_value);
    
}
 
void loop()
{
   //---- blink LED -----//
  digitalWrite(led, HIGH);       
  delay(1000);
  digitalWrite(led, LOW);
  delay(1000);
   //---- blink LED -----//
}

 

 

Kod Açıklaması:

Bu proje için yazılan kodda hafıza adresi 30 ve yazılacak data değeri 100 olarak ayarlandı. Ve aynı yerden bu değeri okumada yapıldı. EEPROM.write() ve EEPROM.read() fonksiyonları sırayıla yazma ve okuma yapmak için kullanılmaktadır. Bu yazılan ve okunan iki değerde <LiquidCrystal.h> kütüphanesinin fonksiyonları yardımıyla 16*2 LCD ekranda gösterilmiştir. Bu projeyi daha rahat anlayabilmek için öncelikle LCD ekranın nasıl kullanıldığı ve bir veri bilgisinin LCD ekrana nasıl yazdırılacağı konularına bakmanızda fayda var.

Kodda ilk olarak EEPROM’a yazılan veri bilgisi 16*2 LCD’nin üst satırında yazdırılıyor daha sonra aynı adreste okunan veri bilgiside LCD’nin alt satırında yazdırılıyor. EEPROM’dan okuma yapılıp LCD’nin 2. satırı yazdırıldığında pin numarası 6 ‘ya bağlanan led yanıp sönmeye başlıyor. Bunu yapmak içinde pinMode(), delay() ve digitalWrite() fonksiyonları kullanılıyor. Bu fonksiyonları projeyi daha iyi anlayabilmek için ayrıca inceleyebilirsiniz. Böylece EEPROM hafızasına bir değer yazdırara ve bu değeri okuyarak EEPROM’a okuma ve yazma fonksiyonlarının nasıl kullanıldığını görmüş oluyoruz.

 

 

VİDEO:

CEVAP VER

Lütfen yorumunuzu giriniz!
Lütfen isminizi buraya giriniz