Bir mikrokontrolcüde bazen bazı verileri depolama ihtiyacı duyarız. Mesela bir sensör değeri, bir sayaç yada bir resim bilgisi gibi. Mikrokontrolcü tabanlı sistemlerde en çok kullanılan hafıza tipi EEPROM’dur.

EEPROM Nedir?

EEPROM, ROM’un bir türü olan Eletriksel olarak Silinebilen Programlanabilien ve Sadece Okunabilen Hafıza demektir. EEPROM ile sistem aktif olmasa bile kaydedilen veri uzun süre saklanabilmektedir. EEPROM hafızası bu şekilde veriyi kaydetme ve sistem aktif olduğundan o veriye tekrar ulaşılabilme özelliğinden dolayı mikrokotrolcü sistemlerinde çok yaygın kullanıma sahiptir.

Seri iletişim protokolleri yardımıyla mikrokontrolcü tabanlı sistemlerde kulanılan birçok EEPROM bellek çipi vardır. Zaten birçok mikrokontrolcü kendi bünyesinde küçük boyutlu dahili bir EEPROM barındırır. Böylece küçük çaplı projelerde hafıza olarak bu kullanılır ve harici bir hafıza çipine ihtiyaç duyulmamış olur. Seri iletişim protokolleri PC’nin seri portuyla iletişim veya diğer cihazlarla iletişim kurmak için tekrar kullanılabilir.

Normalde bir mikrokontrolcünün dahili EEPROM belleğine kaydedilebilecek verinin boyutu yalnızca birkaç kilobayt ile sınırlıdır. Bu yüzden bunlar bazı sensör değerlerini yada GPS gibi cihazlardan alınan yazılı metin verilerini saklamak için kullanılır. Bu projede PC’nin seri portu ile arduino kartının dahili EEPROM hafızasıyla nasıl bağlantı kurulacağını göreceğiz. Ve arduinoyu kapatıp tekrar açtığımızda ulaşıp okuyabileceğimiz bir metin yazacağız.

 

EEPROM hafızasının boyutu arduino kartlarının çeşidine göre de değişiklik göstermektedir.Bu projede arduino pro-mini kullanılmıştır. Arduino pro-mini kartında ATMEGA328 mikrokontrolcüsü bulunmakta ve dahili olarak 1Kb EEPROM hafızası barındırmaktadır. Pro-mini kartında ayrıca Tx ve Rx pinleride bulunmaktadır. Bu pinler ise serii iletişimde kullanılmaktadır. Aşağıda pro-mini ve Arduino IDE ‘nin birer fotoğrafı gösterilmiştir.

 

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. Bu parça ayrıca USB portu üzerinden PC ile seri haberleşmeyi sağlayabilmektedir.

 

15_2

Arduino IDE kullanımı kolay, birçok kütüphaneye sahip ve karmaşıktan basite birçok fonksiyonu kendi içinde barındıran bir programdır. Arduino IDE ayrıca < EEPROM.h> olarak adlandırılan ve dahili EEPROM’a erişme imkanı sağlayıp EEPROM’a veri yazma yada veri okuma işlevini yapabileceğimiz kütüphaneye sahiptir. Bu proje için yazılan kodda EEPROM ‘dan veri okumak ve veri yazmak için 2 tane fonksiyon kullanılmıştır, bunlar sırasıyla EEPROM.write() ve EEPROM.read() ‘ dir.

 

Arduino IDE ayrıca serii iletişim işlemi için bazı yerleşik fonksiyonlara sahiptir. Belirli baud oranı ile seri iletişimi başlatan bir fonksiyon vardır ve seri porta veri gönderip veri alan bazı fonksiyonlarda bulunmaktadır. Bu projede kullanılan fonksiyonlar Serial.begin(), Serialprint(), SerialPrintln(), Serial.available(), Serial.read() and serial.write()’dır. Bu projeyi daha iyi anlamak için arduino serial iletişim ve arduino ile seri veri alıp gönderme konularını inceleyiniz.

Bu projede pin 6 ‘ya bir led bağlanmıştır. Ve bu led ile EEPROM hafızası meşgul olduğu sürece (her veri yazıldığında) yanıp sönme olacaktır buradan yazmanın gerçekleştiği görülebilecektir. Led’in bu şekilde çalışmasıda arduino IDE içindeki yerleşik bazı fonksiyonlarla sağlanmıştır. Bu fonksiyonlar pinMode(), digitalWrite() ve delay() komutur. Bu fonksiyonları ayrı ayrı inceleyerek projeyi daha iyi anlayabilirisiniz.

Devre Şeması:

CIRCUIT_20

 

Kod:

 

 

 

Kod Açıklama:

Bu proje için yazılan kodda 6. pin çıkış pini LED’li gösterge olarak pinMode() fonksiyonu kullanarak düzenlenmiştir. 16*2 LCD ekranı başlatmak için lcd.begin() fonksiyonu kullanılmıştır. Serial.begin() fonksiyonu ise 9600 baud oranı ile seri haberleşmeyi başlatmak için kullanılmıştır.

Kod EEPROM hafızasına girerek EEPROM.read() komutuyla okuma yapar ve Serial.write() fonksiyonu kullanarak serii port ile bir önceki kaydedilen metin verisini gönderir. Sonra EEPROM hafızasının tümü EEPROM.write() fonksiyonu kullanılarak temizlenir. Böylece kod kullanıcı tarafından Serial.available() fonksiyonu kullanılarak bir metinin girilmesini bekler. Veri girildiğinde seri data EEPROM.write() komutu kullanılarak EEPROM’da belirli adrese yazılır. Eğer EEPROM’da yeterli bellek kalmaz ise bunu kullanıcıya göstermek için LED sürekli yanacaktır.

IMG_5504 copy

 

 

 

 

 

 

 

 

 

Video: