24C02-EEPROM.jpg_350x350

 

 

    Öncelikle EEPROM’un ne olduğuna değinecek olursak, “Electronically Erasable Programmable Read-Only Memory” açılınının kısaltması olarak bilinir. Küçük boyuttaki verileri kalıcı olarak saklamak için kullanılan dijital hafızadır. Yani EEPROM un elektriği kesilse bile içindeki veriler silinmez. Boyutu daha büyük olan sabit verileri saklamak için ise flas bellek gibi daha ekonomik yöntemler kullanılır.  RAM‘lere yazmak EEPROM‘lara yazmaya göre hızlıdır. Mesela, RAM’lara birkaç nanosaniyede yazılabilirken EEPROM’lar için bu süre mikrosaniyeler mertebesindedir. Buna ek olarak RAM’lar genelde uçucudur yani güç kesilmesi halinde içeriklerini kaybederler. Ram üzerine tekrar tekrar yazmak mümkünken, EEPROMlar üzerlerinde bulunan ince yalıtkan madde zarar görene dek yazma ve silme işlemi yapabilmekle sınırlandırılmıştır.

  Harici olarak EEPROM kullanmak bazı uygulamalarda gerekebiliyor. Özellikle RFID uygulamalarında (yani şu dolmuşlara binerken bastığınız kartların içerisine bilgi yüklenmesi, silinmesi vs) kart ve ana alıcı içerisindeki bilgilerin depolanması ve işlemesi geniş eeprom belleği gerektirebiliyor.

  24C02 EEPROM entegresi “Microchip Technology” firmasının ürettiği seri eeprom entegresidir. 2k yani 2048 bit, 256 byte hafızaya sahiptir. Pin description’ı aşağıdaki gibidir. 201021110349_24C02 Pinout

 24C02 EEPROM’u üzerine veriler seri haberleşme yani i2c protokolü kullanılarak yazılıp silinir. i2c protokolü hakkında daha detaylı bilgi edinebilmek için şu yazıya göz atabilirsiniz;

http://elektronikhobi.net/i%C2%B2c-iletisim-protokolu-2/

24C02 entegresinin e0,e1, e2 pinleri çip  seçme pinleri olarak tanımlanır.  Bu şu anama geliyor; mesela bu entegreden 8 tane daha kullandığınızı düşünürseniz her kullandığınız slave eeprom’a bir adres tahsis edersiniz. Bu adres verme işlemini de bu e0,e1 ve e3 pinlerini kullanarak yapabiliyorsunuz.  mesela e0 ve e1 pinini grounda bağlayıp e3 pinine +5 volt verirseniz entegye 001 adresi vermiş oluyorsunuz.

 Entegrenin VCC ve VSS pinleri ise +5v besleme ve groun pinleridir.  Mode/WC ya da WP pini donanım yazma koruma pinidir. Bu pin logic-1 olursa 080-0ff arası adres alanları yazmaya karşı korunmuş olur. SDA pininden veriler IC2 protokolü ile alınır. SCL pini ise clock pinidir. 24c02 entegresi 100khz ve 400khz ile uyumlu çalışabilir.  R/W pini ise Read/Write pinidir. Yani eeproma yazma ya da eepromdan kumayı kontrol eder. Eğer logic-0 olursa yazma, logic-1 olursa okuma yapılacağını bildirir.

 Şimdi uygulamamızda i2c protokolünü kullanan 24c02 eeprom entegresi kullanılmıştır.  Rs232 iletişimi ile bilgisayar üzerinden istenilen adresten veri okuma ve yazma işlemi gerçekleştirilmiştir.  Bu işlemler için yine CCS C derleyicisinin kullanıcılarına sunduğu hazır kütüphaneler ve fonksiyonlar kullanılıyor.

Harici EEPROm uygulaması

 Şimdi programda CCS C nin hazır fonksiyonlarını kullandığımız için önce include<2402.c> komutu ile hazır kütüphaneyi programa dahil ediyoruz. Daha sonra  #use i2c(master, sda=pin_c4, scl=pin_c3,slow=100000)  komutu ile kullanılacak donanımsal özellikleri belirten fonksiyonu yazmamız gerekiyor. Burada kullanılan entegrenin master olacağı, sda yani data pini olarak c4 pininin, scl yani clock için ise c3 pinin kullanılacağı, kullanılacak clock sinyalinin ise 100 khz olacağı belirtiliyor.

 #include<input.c> kütüphanesinin eklenmesinin sebebi ise seri haberleşmelerde okunan sinyallerin hexedesimal tabanda okunmasını sağlayan gethex() fonksiyonunun kullanılabilmesi içindir.

  **********************************************************************************************************************************

#include <16f877.h> // Kullanılacak denetleyicinin başlık dosyası tanıtılıyor.

#fuses XT,NOWDT,NOPROTECT,NOBROWNOUT,NOLVP,NOPUT,NOWRT,NODEBUG,NOCPD // Denetleyici konfigürasyon ayarları

#use delay(clock=4000000) // Gecikme fonksiyonu için kullanılan osilatör frekansı belirtiliyor

#use rs232 (baud=9600, xmit=pin_C6, rcv=pin_C7, parity=N, stop=1) // RS232 ayarları belirtiliyor

#use i2c(master,sda=pin_c4,scl=pin_c3,slow=100000) // I2C Fonksiyonu,SDA ve SCL pinleri ve iletişim hızı belirleniyor

#include <input.c> // input.c dosyası programa ekleniyor
#include <2402.c> // 2402.c dosyası programa ekleniyor

byte veri,adres; // byte tipinde değişken tanımlanıyor
char islem; // char tipinde değişken tanımlanıyor

#int_ssp // I2C iletişiminde yazma veya okuma yapıldığında meydana gelen kesme
void I2C_kesmesi()
{
output_high(pin_C5); // RC5’e bağlı LED yansın
delay_ms(250); // Gecikme veriliyor
output_low(pin_C5); // RC5’e bağlı LED sönsün
}

/******************* ANA PROGRAM FONKSİYONU *************************/

void main ()
{
setup_psp(PSP_DISABLED); // PSP birimi devre dışı
setup_timer_1(T1_DISABLED); // T1 zamanlayıcısı devre dışı
setup_timer_2(T2_DISABLED,0,1); // T2 zamanlayıcısı devre dışı
setup_adc_ports(NO_ANALOGS); // ANALOG giriş yok
setup_adc(ADC_OFF); // ADC birimi devre dışı
setup_CCP1(CCP_OFF); // CCP1 birimi devre dışı
setup_CCP2(CCP_OFF); // CCP2 birimi devre dışı

enable_interrupts(int_ssp); // SSP kesmesine izin ver
enable_interrupts(GLOBAL); // Tüm izin verilen kesmeler

printf(“\n\r***********************************************************”);
printf(“\n\r 24C02C Harici EEPROM Bilgi Okuma Yazma “);
printf(“\n\r***********************************************************”);
printf(“\n\r”);
printf(“\n\r Bir islem seciniz>”);

while(1)
{
do // do-while döngüsü tanımlanıyor
{
printf(“\n\rOkuma (O) veya Yazma (Y) >”); // RS232 portuna veri gönderiliyor
islem=getc(); // RS232 portundan gelen veri alınıyor
islem=toupper(islem); // toupper fonksiyonu tüm karakterleri büyük karaktere çevirir a>A
putc(islem); // “islem” değişkeni içeriği RS232 portuna gönderiliyor
} while ( (islem!=’O’) && (islem!=’Y’) ); // Girilen karakter “0” veya “Y” dışında ise döngü başına dön

if (islem==’O’) // Eğer okunan karakter “O” ise
{
printf(“\n\rOkumak istediginiz adresi giriniz> “);
adres=gethex(); // RS232 portundan gelen veriyi hex formatında al
printf(“\n\rDeger= %X”,read_ext_eeprom(adres) );
}

if (islem==’Y’) // Eğer okunan karakter “Y” ise
{
printf(“\n\rBilgi yazmak istediginiz adresi giriniz> “);
adres=gethex(); // RS232 portundan gelen veriyi hex formatında al
printf(“\n\rBilgiyi giriniz> “);
veri=gethex(); // RS232 portundan gelen veriyi hex formatında al
write_ext_eeprom(adres,veri); // Harici EEPROM’da belirtilen adrese “veri” değerini yaz
}
}
}

 

*****************************************************************************************************************************

 

Dökümanlar için;  24C02 Harici EEPROM Uygulaması