at24c512

AT24C512 EEPROM MikroC Kütüphanesi



AT24C512 EEPROM

  • EEPROM lar kavram olarak elektriksel olarak yazılıp silinebilen kalıcı bellek demektir.
  • Birçok beyaz eşyanın beyni diye tabir edilen parça aslında bir EEPROM dur.
mikroc-rom-bellek
MikroC de derleme yapılınca kullanılan PIC ROM belleği görülebilir. (Büyütmek için resme tıklayabilirsiniz)
  • PIC içerisinde bulunan ROM bellekte aynı işlevi görmektedir.
  • GLCD projelerimde simge ve resimler kullanmak amacı ile PIC teki kısıtlı ROM alanını harcamamak için EEPROM kullanmaya karar verdim.
  • Bu iş için en uygunu I2C protokolü ile çalışan seri bir EEPROM olan AT24C512 dir.
  • EEPROM lar kalıcı bellek olduklarından boyutlarının büyüklüğü dikkate alındığında veri saklamak için oldukça elverişlidir.
  • Çalışmalarda elde edilen değerler (dokunmatik panellerin kalibrasyon değerleri gibi) kayıt edilerek saklanabilir.

 

AT24C512 EEPROM Özelliklleri

  • 5 volt ile çalışır
  • 2 hat ile ( SDA – SCL) kullanılırlar
  • I2C Protokolü kullanılır
  • ESD korumasına sahiptir.
  • 100.000 kez yazma yapılabilir
  • İçeriğindeki verileri bozulmadan 40 yıl tutabilir
  • 10 ms hızında yazma yapabilir
  • 2 Adet adresleme pini vardır yani den 4 adet AT24C512 aynı I2C hattında birbirinden bağımsız kullanılabilir.
  • ÇOK ÖNEMLİ NOT :  Bazı AT24C512 modellerinde 3. adresleme pini de bulunmaktadır. Bunu kullandığınız parçanın datasheetinden mutlaka kontrol ediniz.
    • Aşağıda anlatım yapılırken AT24C512 nin adresinin” 10100+A1+A0 “şeklinde anlatılmıştır sonda ki 2 bit ise entegre üzerinde bulunan A0 ve A1 pinine göre yazılmalıdır denmiştir fakat bazı AT24C512 lerde adres pini 3 adettir buna göre o tiplerde adres ” 1010+A2+A1+A0 ” olur ve sonda ki 3 adet pin bağlantısına göre değerlendirilir. ( GND ye bağlı ise = 0       +5v bağlı ise =1 )

 

EEPROM Alanı

  • Genelde bu biraz kafa karıştırabilir çünkü klavuzda 512K yazar öncelikle bu kbyte değil kbittir.
  • EEPROM toplamda 524288 bitten oluşan alana sahiptir.
  • 524288/8 = 65536 byte eder
  • 65536/1024 = 64 kbyte alan mevcuttur ki bu PIC için oldukça büyük bir alandır.

 

EEPROM Adresleme ve Sayfa Mantığı

AT24C512-eeprom-alan-haritasi
AT24C512 eeprom alan haritası görülmektedir. (Büyütmek için resme tıklayabilirsiniz)
  • EEPROM 64 kbyte alana sahip olsa da bu alan tek parça değildir.
  • Sayfa dediğimiz yapılar ile bölümüştür.
  • Yukarıda görüleceği gibi  her sayfa 128 byte dır ve 512 adet sayfa bulunur. ( 128 byte *512 = 65536 eder)
  • Adresleme de 0. adresten başlar 65535. adreste son bulur yani toplam 65536 adres vardır.
  • Verileri temel mantık olarak 8 bitlik paketler halinde saklamaktayız.

 

AT24C512 Çalışma Protokolleri

  • AT24C512 de işlem yapmak için gerekli olan işlem sırasını ve detayları göreceğiz.
  • Yapılacak işlemler bazı farklar olmasına karşın temelde I2C protokolü kullanıldığından aynıdır.
  • Bu bölümde sırası ile
    • AT24C512 adresleme sistemi
    • Tek veri yazma
    • Çoklu veri yazma
    • Tek veri okuma
    • Çoklu veri okuma protokollerini göreceğiz.

 

AT24C512 Adresleme Sistemi

AT24C512-adres-semasi
AT24C512 Adres Şeması
  • I2C protokolü ile çalışan parçaların fabrika üretiminde belirlenen bir adresleri bulunur.
  • Yukarıda görüldüğü gibi AT24C512 nin değişmez adresi 10100 dır
  • Ancak Pin işlevlerinde gördüğümüz gibi AT24C512 de 2 adet A0 ve A1 adresleme pinleri mevcuttur
  • Bu pinlerin bağlantıları ne şekilde yapıldıysa burada ki bitlerin konumuda ona göre 1 yada 0 olmalıdır.
  • Örnek olarak ;
    • A0 = GND
    • A1 = Vcc ise
    • Adres = 1010010 olacaktır
    • Not: Bazı AT24C512 modellerinde A2 pinide(3. adres pini) bulunmaktadır.  A2 nin de bağlantısına göre işlem yapılmalıdır.
      • A0=1 A1=1 A2=1 ise adres desimal tabanda 7 olacaktır binary olarak ise  1010111 şeklinde olacaktır. Yani normalde bağlantı yapılmadığından dolayı 0 olan bit eğer A2 adres pini varsa kullanıcı tarafından yönetilmektedir tıpkı diğer 2 adres pini gibi.
  • Yukarıda basedilen adres EEPROM un MCU ile haberleşmede kullanacağı adrestir. Bunu ROM adresi ile karıştırmayın
  • A0 ve A1 olmak üzere 2 adet adres pinimiz bulunduğunu söylemiştik.
    • Bu pinler 1 yada 0 olmak üzere 2 değer alabilir
    • O halde 2² den 4 adet farklı olasılık bulunur
    • Buradan yola çıkara aynı I2C hattında 4 adet farklı AT24C512 kullanabiliriz.
    • Adresleme pinlerinin esas amacı bunu sağlamaktır.
  • AT24C512 adresi tam bir bütün olarak işlem görür.Bu sebeple;
    • Başlangıç biti – 1 bit
    • Adres Bitleri – 7 bit
    • İşlem biti -1 bit
    • Şeklinde gönderim yapılır.
  • İşlem biti yazma yada okuma yapılıp yapılamayacağını bildirmeye yarar.
  • Bu gönderimden sonra AT24C512 bize onay kodu gönderir. (ACK)
  • Böylece adres gönderim işlemi biter ve adresi bildirilen parça ile iletişim başlamış olur
  • I2C hattındaki diğer tüm parçalar hattan koparak bundan sonra iletişime katılmazlar.

 

AT24C512 Tek Veri Yazma Protokolü

AT24C512-tek-veri-yazma-blok-semasi
AT24C512 tek veri (byte) yazma blok şeması. (Büyütmek için resme tıklayabilirsiniz)
  • Tek veri yazma sistemi ile sadece 1 byte veri yazılabilir
  • İlk olarak işlem “Start” işareti ile başlar
  • Ardından EEPROM iletişim adresi ve yapılacak işlem yazma olarak bildirilir
  • Onay geldikten sonra yazma yapılacak ROM adresi yazılır
    • AT24C512 de toplam 65536 adres bulunur bu sebeple adres için 16 bit ayrılmıştır.
    •  örnek olarak adres 6000 ise bunun binary karşılığı ?0001011101110000? dır
    • Bunu 8 şer bit olarak 2 ye ayırıyoruz ?00010111 – 01110000 şeklinde
    • İlk önce gelen 8 bit ilk gönderilecek olandır. ?(00010111)
    • Daha sonra diğer 8 bit gönderilmelidir. (01110000)
  • Adreslerden sonra 8 bit olan yazılacak veri gönderilir
  • Onay geldikten sonra “Stop” ile işlem durdurulur.
  • Yazma işleminde tüm onaylar EEPROM dan MCU ya gelir yani her işlemden sonra onay gelip gelmediği denetlenmelidir.
  • Her yazma işleminden sonra mutlaka EEPROM içerisindeki yazma işlemlerinin bitmesi için 10ms bekleme yapılmalıdır

 

AT24C512 Çoklu Veri Yazma Protokolü

AT24C512-coklu-veri-yazma-blok-semasi
AT24C512 çoklu veri yazma protokolü. (Büyütmek için resme tıklayabilirsiniz)
  • Çoklu veri yazma sistemi ile bir kez iletişim kurulduktan sonra arka arkaya durmadan veri gönderimi yapılabilir.
  • Özellikle büyük boyutlu verilerde oldukça fazla miktarda zaman tasarrufu sağlar
  • Fakat burada dikkat edilmesi gereken bazı noktalar bulunmaktadır.
AT24C512-adres-gecis-sistemi
AT24C512 sayfa sistemi ve adres geçiş sorunu
  • Yukarıda ki görselde toplamda 160 byte veri yazmak istiyoruz.
  • 160/8= 20 adet adrese ihtiyacımız var
  • Ancak veri yazdırmaya 1. sayfanın 113. adresinden başladık
  • Buna göre beklenen veri bitme adresimiz 132 dir.
  • Burada çok önemli bir noktaya geldik. Bu şekilde işlemimiz hatalı olacak ve 127. adresten sonra EEPROM otomatik olarak 128. adres yerine 0. adrese gidecek ve geri kalan 40 byte veri hatalı adreslere yazılacaktır.
  • Bunun sebebi daha öncede anlattığım gibi AT24C512 içerisinde ki alan, sayfalara bölünmüştür ve her sayfa 128 byte dan oluşur. Bu demek oluyor ki aynı zamanda her sayfada 128 adres bulunur.
  • Mevcut sayfanın içerisinde çoklu yazma işlemi sırasında EEPROM otomatik olarak adresi birer arttırır. Yani siz 113. adresten başlayarak çoklu yazdırma yaptığınız her seferinde adresi 1 arttıracaktır.
  • Ancak EEPROM sistemi gereği 127. adresten sonra 128. adrese geçmeyecektir 0. adrese dönecektir. Çünkü 128. adres 2. sayfada bulunur.
  • Bu sebeple bu protokolde verinin sayfa sonuna geldiği hesaplanıp son adresten sonra çoklu yazma işlemi sonlandırılıp yeni sayfa için yeniden başlatılmalıdır.
  • Sonuç olarak çoklu yazma protokolü gerçekte en fazla 128 byte yazabilir bu da tabi ki sayfanın başlangıç adresinden başlarsak aksi halde yukarıdaki gibi orta bölümden başlar ve toplam veri taşma yaparsa bulunduğu sayfanın en baştaki adresine dönüp kalan verileri hatalı olarak oraya yazmaya başlayacaktır.
  • Eğer bu işlem 2. sayfada olsaydı EEPROM 255. adresten den sonra 128. adrese dönecekti.
  • Her yazma işleminden sonra mutlaka EEPROM içerisindeki yazma işlemlerinin bitmesi için 10ms bekleme yapılmalıdır

 

AT24C512 Tek Veri Okuma Protokolü

AT24C512-tek-okuma-blok-semasi
AT24C512 tek veri okuma protokolü. (Büyütmek için resme tıklayabilirsiniz)
  • Tek veri okuma protokolü ile sadece 1 byte veri okunur.
  • Okuma işlemi I2C de yazmadan biraz daha farklıdır.
  • İlk olarak AT24C512 ye yazma yapılacağı bildirilir ve okuma yapılacak alan adresi(ROM adresi) gönderilir.
  • İşlem sonlandırılıp yeniden başlatılır ve tekrardan iletişim kurmak için EEPROM adresi bu sefer okuma yapılacağı bildirilerek gönderilir
  • Devamında 1 byte veri okunur ve kullanıcı yani MCU tarafından mutlaka NACK işareti gönderilir.
  • Bu işaret ile EEPROM okumanın bittiğini anlar aksi halde gönderilecek her clock ile okumaya devam ederek hatalara sebep olur.
  • Oluşacak hata şudur ;
    • Okuma yaparken EEPROM her okumadan sonra kendi içerisindeki adresi 1 arttırır
    • Eğer NACK gönderilmez ise ardından gönderilen “stop” yada herhangi bir işlemde yine adresi okuma yapıyor gibi 1 artttırır
    • Siz bundan sonra tekrar okuma yaptığınızda aslında okuduğunuz adres ilk adresten sonraki adres değil ondan sonraki adrestir.
    • Bu sebeple okuma işleminde NACK işaretini göndermek önemli bir noktadır.

 

AT24C512 Çoklu Veri Okuma Protokolü

AT24C512-coklu-okuma-blok-semasi
AT24C512 çoklu veri okuma protokolü. (Büyütmek için resme tıklayabilirsiniz)
  • Son aşamaya kadar tekli veri okuma ile tüm işlemler aynıdır.
  • Son aşamada görüleceği üzere çok veri okuması yapılacağı için veri okunduktan sonra NACK yerine ACK gönderilir böylece AT24C512 ye veri göndermeye devam etmesi bildirilir taki  biz NACK gönderene kadar
  • Çoklu veri okumanın çoklu  veri yazmaya göre en büyük avantajı istenirse en baştan en sona kadar tek seferde okunabilir. Yani 0. adresten 65535. adrese kadar kesintisiz düz bir şekilde okuma yapabilirsiniz.
  • Çoklu yazmada ki sayfa mantığı çoklu okumada geçerli değildir.
  • Bu büyük verilerin okunmasında bize ciddi bir zaman kazandırmaktadır.

 

AT24C512 Pin İşlevleri

AT24C512-pinler
AT24C512 pinleri
PIN Adı İşlevi
A0  I2C adresleme pini. +5V=1 demektir GND=0 dır
A1   I2C adresleme pini. +5V=1 demektir GND=0 dır
NC  Bağlantı yapılmaz-Bazı modellerde A2 dir
GND  Topraklama
VCC  +5v besleme
WP  Yazma koruması 1 konumunda aktiftir
SCL I2C protokolünde clock pini bağlanır
SDA I2C protokolünde data pini bağlanır
  • A0 ve A1 I2C protoklünde adresleme uçlarıdır. Yani bu uçlarıdan herhangi birisini GND ye bağlamak o adresi sıfır yapmak demektir.
  • Aynı şekilde +5V(Vcc) ye bağlamakta 1 yapmak anlamına gelir.
  • WP – yazma koruması 1 konumunda iken aktiftir.
  • Yani yan Vcc ye bağlanır yada PIC ile kontrol edilebilir.

 

AT24C512 EEPROM Devresi

  • Bu bölümde AT24C512 için gerekli temel devreyi göreceğiz.
  • I2C protokolü bu parçada da geçerlidir.

Devre Şeması

AT24C512-devre-semasi
AT24C512 devre şeması
  • Önemli Not : I2C protokolünde hangi parçayı kullanırsanız kullanın mutlaka SDA ve SCL uçlarına seri olarak ferrit filtre kullanmalısınız. Bunu bir çok deneme ile test ettim. Kullanılacak ferrit özellikleri ise ;
    • 100 mhz
    • 1k değerinde olmalıdır
  • Bir hatta en fazla 2 adet seri bağlanabilir.
  • Bu şekilde parazitleri filtre eder aksi halde işlemlerinizde hata olacaktır.
  • I2C Hatları 20k ile pull-up yapılmalıdır.
  • A0 ve A1 pinleri kullanılarak aynı hat üzerine 4 adet AT24C512 takılabilir

Gerekli Malzemeler

  1. AT24C512 EEPROM – En fazla 4 Adet
  2. 20 k direnç – 2 ADET
  3. Ferrit Filtre  1k 100mhz – 2 Adet

Devrenin Yapılışı

AT24C512-devre-genel
AT24C512 devre genel görünüm
  • Devreyi board üzerinde kurdum.
  • Yaptığım denemelerin sonuçlarını görmek için 128×64 GLCD kullandım

 

AT24C512-devre-yakin
AT24C512 yakın çekim
  • AT24C512 yakından görünüşü.
  • Çok az devre elemanı gerekmektedir.

 

AT24C512-ferrit-1k-100mhz-lehimli
AT24C512  – SDA ve SCL pinlerinde ki seri ferrit filtreler
  • SDA ve SCL pinlerine seri bağlı ferrit filtreler

 

AT24C512-ferrit-1k-100mhz
AT24C512 – 1k 100mhz ferrit filtre
  • Ferrit filtre ve kurşun kalem ucu
  • Filtreler genel olarak çok ufak olmalarına karşı işlevleri çok hayati öneme sahiptir.

 

AT24C512 EEPROM MikroC Kütüphanesi

  • AT24C512 kütüphanesi daha önce yazdığım I2C kütüphanesini kullandığından buradan indirip I2C yi projenize eklemeniz gerekmektedir.
  • Kütüphane GPL lisansı ile açık kaynak olarak yayınlanmıştır.
  • Genel EEPROM işlemlerini karşılayacak şekilde tasarlandı
  • Bazı modellerde AT24C512 nin 3 adet adres pini bulunur. Yazılımda bir fark yaratmaz sadece normalde A0 ve A1 için örneğinde 01(binary) şeklinde ise 10 (desimal) yazıyorduk eğer A2 pini varsa onuda bu adres sistemine dahil ederek fonksiyonda EEPROM Adresi dediği parametreye yazmalıyız. (A0=1 A1=1 A2=1 ise binary olarak 111 desimal olarak 7 olarak yazılmalıdır)

Fonksiyonlar

  • Tamamı kullanıcı fonksiyonu olduğundan ayrım yapılmadı

 

AT24C512_Tekli_Veri_Yazma Fonksiyonu

Fonksiyon : unsigned char AT24C512_Tekli_Veri_Yazma(unsigned char EEPROM_ADRESI,unsigned int VERI_ADRESI,unsigned char VERI)

Amacı : Tek veri ( 1 byte) veri yazmak için kullanılır

Parametreler :

  • EEPROM_ADRESI : Eepromun adres pinleri olan A0 ve A1 in konumuna göre adres bildirilir. Örnek olarak eğer 2 pinde +5v volt ile lojik 1 durumuna getirildi ise lojik binary 11 = 3 olacağından adres 3 yazılacaktır.
  • VERI_ADRESI : Verinin yazılacağı adresi belirler. AT24C512 de 0-65535 adres bulunur.
  • VERI : Yazılacak 1 byte ( 8 bit) veridir

Kullanım Şekli :

AT24C512_Tekli_Veri_Yazma(1,0,5);//EEPROM adresi ve yazma yapılacağı bildirildi

Geri Bildirim :

  • 1 gelirse işlem başarılıdır
  • 0 gelirse işlem başarısız olmuştur

 

 – AT24C512_Sayfa_Veri_Yazma Fonksiyonu

Fonksiyon : unsigned AT24C512_Sayfa_Veri_Yazma(unsigned char *HATA,unsigned char EEPROM_ADRESI,unsigned int VERI_ADRESI,unsigned char *VERI,unsigned int VERI_DIZI_SAYISI)

Amacı : AT24C512 ye sayfa mantığı ile  büyük verileri zaman kaybetmeden çok hızlı şekilde yazmak için kullanılır. Bu fonksiyon ile 0. adresten 65535. adrese kadar aralıksız veri yazılabilir.

Parametreler :

  • *HATA : Fonksiyonda hata kodu gelip gelmediği bu pointer ile okunur .( hata bayrağı)
  • EEPROM_ADRESI : Eepromun adres pinleri olan A0 ve A1 in konumuna göre adres bildirilir. Örnek olarak eğer 2 pinde +5v volt ile lojik 1 durumuna getirildi ise lojik binary 11 = 3 olacağından adres 3 yazılacaktır.
  • VERI_ADRESI : Verinin yazılmaya başlanacağı başlangıç adresinin belirler. AT24C512 de 0-65535 adres bulunur.
  • *VERI :  Main de oluşturulan verileri taşıyan diziyi okumaya yarayan pointerdir. Dizi adı buraya yazılır böylece pointer dizideki verileri okuyabilir
  • VERI_DIZI_SAYISI : Veri dizisinin kaç elemanlı olduğu bildirilir.

Kullanım Şekli :

AT24C512_Sayfa_Veri_Yazma(hata,1,20,dizi,255);

Geri Bildirim :

  • En son yazma yapılan adresi geri bildirir.
  • Fonksiyonda hata olup olmadığı mutlaka “*HATA” pointeri ile test edilmeli. Eğer
    • Hata = 1 ise işlem sırasında hata olmuş demektir ve yazılan veriler geçersiz sayılmalıdır.

 

– AT24C512_Tekli_Veri_Okuma Fonksiyonu

Fonksiyon : unsigned char AT24C512_Tekli_Veri_Okuma(unsigned char EEPROM_ADRESI,unsigned int VERI_ADRESI)

Amacı : Eepromdan tek veri ( 1byte) okur

Parametreler :

  • EEPROM_ADRESI : Eepromun adres pinleri olan A0 ve A1 in konumuna göre adres bildirilir. Örnek olarak eğer 2 pinde +5v volt ile lojik 1 durumuna getirildi ise lojik binary 11 = 3 olacağından adres 3 yazılacaktır.
  • VERI_ADRESI : Verinin okunacağı adresinin belirler. AT24C512 de 0-65535 adres bulunur.

Kullanım Şekli :

AT24C512_Tekli_Veri_Okuma(1,125);

Geri Bildirim :

  • Okunan veriyi geri döndürür.

 

–  AT24C512_Coklu_Veri_Okuma Fonksiyonu

Fonksiyon : void AT24C512_Coklu_Veri_Okuma(unsigned char EEPROM_ADRESI,unsigned int VERI_ADRESI,unsigned char *VERI,unsigned int VERI_DIZI_SAYISI)

Amacı : Kesintisiz olarak tüm eepromda ki verileri okumaya yarar

Parametreler :

  • EEPROM_ADRESI : Eepromun adres pinleri olan A0 ve A1 in konumuna göre adres bildirilir. Örnek olarak eğer 2 pinde +5v volt ile lojik 1 durumuna getirildi ise lojik binary 11 = 3 olacağından adres 3 yazılacaktır.
  • VERI_ADRESI : Verinin okunacağı adresinin belirler. AT24C512 de 0-65535 adres bulunur.
  • *VERI : Okunan verilerin mainde hazırlanan diziye yazılmasını sağlar
  • VERI_DIZI_SAYISI : Dizi sayısını belirler.

Kullanım Şekli :

AT24C512_Coklu_Veri_Okuma(1,20,dizi3,255);

Geri Bildirim :

  • void tipi olduğundan geri bildirimde bulunmaz

 

Fonksiyonların Uygulanması

  • Uygulama bölümünde tek tek veri yazıp okuma ve çoklu yazma okuma işlemlerini göreceğiz.
  • Çalışmada kendi I2C kütüphanemi kullandım. Bu sebeple sizinde projenize bu kütüphaneyi eklemeniz gerekmektedir.
  • I2C kütüphanesini ve GLCD kütüphanesini indirebilirsiniz.

 

AT24C512 Tekli ( 1 byte) Veri Yazma ve Okuma

  • Belirlediğimiz adrese 1 byte veri yazıp ardından bunu okuyup GLCD de göstereceğiz.
//GLCD BİLDİRİMDLERİ
char SAPTRIS at trisd;//data portları
char SAPDATA_giris at portd;
char SAPDATA_cikis at latd;
sbit SAP1024_RD at RC4_bit ;       //GLCD RD UCU BAĞLANTI PİNİ
sbit SAP1024_CE at rc3_bit ;       //GLCD CE UCU BAĞLANTI PİNİ
sbit SAP1024_CD at Rc2_bit ;       //GLCD C/D UCU BAĞLANTI PİNİ
sbit SAP1024_RST at Rc1_bit ;      //GLCD RST UCU BAĞLANTI PİNİ
sbit SAP1024_FS at Rc0_bit ;       //GLCD FS UCU BAĞLANTI PİNİ
sbit SAP1024_WR at RC5_bit ;       //GLCD wr UCU BAĞLANTI PİNİ

sbit SAP1024_RD_Direction  at TRISC4_bit;       //GLCD RD UCU BAĞLANTI PİNİ
sbit SAP1024_CE_Direction  at TRISC3_bit;       //GLCD CE UCU BAĞLANTI PİNİ
sbit SAP1024_CD_Direction  at TRISC2_bit;       //GLCD C/D UCU BAĞLANTI PİNİ
sbit SAP1024_RST_Direction at TRISC1_bit;      //GLCD RST UCU BAĞLANTI PİNİ
sbit SAP1024_FS_Direction  at TRISC0_bit;       //GLCD FS UCU BAĞLANTI PİNİ
sbit SAP1024_WR_Direction  at TRISC5_bit;       //GLCD FS UCU BAĞLANTI PİNİ

//I2C BİLDİRİMLERİ
sbit I2C_SDA at RB6_bit;
sbit I2C_SCL at RB7_bit;

 sbit I2C_SDA_VERI at LATB6_bit;//27.01.2019 güncellemesi ile eklendi

sbit I2C_SDA_Direction at TRISB6_bit;
sbit I2C_SCL_Direction at TRISB7_bit;

 main() 
  {

   char txt[6];
   unsigned char veri;
   
   CMCON=7;//komparatörler kapatılı

   SAP1024_INIT(128,64,6);//kendi GLCD kütüphanemi çağırdım
     
   AT24C512_Tekli_Veri_Yazma(1,120,65);//120. adrese "65" verisi yazıldı

   veri=AT24C512_Tekli_Veri_Okuma(1,120);//120.adresteki veri okunup "veri" değişkenine atandı

   shortToStr(veri,txt);

   SAP1024_YAZI_YAZMA(2,2,txt);//GLCD yazdırma fonksiyonu
 }
AT24C512-tek-veri-yazma-okuma
AT24C512 tek veri ( 1byte) yazma ve okuma
  • Yukarıda ki örnekte ilk olarak 120. adrese 65 verisi yazılmıştır
  • Ardından 120. adresteki veri okunarak GLCD de yazdırıldı.

 

AT24C512 Çoklu Veri Yazma ve Okuma

  • Belirlenen adresten başlayarak veri yazılacak.
  • Verilerin yazılması için dizi oluşturulacak ve bildirilen dizideki elemanlar sırası ile yazılacak
//GLCD BİLDİRİMDLERİ
char SAPTRIS at trisd;//data portları
char SAPDATA_giris at portd;
char SAPDATA_cikis at latd;
sbit SAP1024_RD at RC4_bit ;       //GLCD RD UCU BAĞLANTI PİNİ
sbit SAP1024_CE at rc3_bit ;       //GLCD CE UCU BAĞLANTI PİNİ
sbit SAP1024_CD at Rc2_bit ;       //GLCD C/D UCU BAĞLANTI PİNİ
sbit SAP1024_RST at Rc1_bit ;      //GLCD RST UCU BAĞLANTI PİNİ
sbit SAP1024_FS at Rc0_bit ;       //GLCD FS UCU BAĞLANTI PİNİ
sbit SAP1024_WR at RC5_bit ;       //GLCD wr UCU BAĞLANTI PİNİ

sbit SAP1024_RD_Direction  at TRISC4_bit;       //GLCD RD UCU BAĞLANTI PİNİ
sbit SAP1024_CE_Direction  at TRISC3_bit;       //GLCD CE UCU BAĞLANTI PİNİ
sbit SAP1024_CD_Direction  at TRISC2_bit;       //GLCD C/D UCU BAĞLANTI PİNİ
sbit SAP1024_RST_Direction at TRISC1_bit;      //GLCD RST UCU BAĞLANTI PİNİ
sbit SAP1024_FS_Direction  at TRISC0_bit;       //GLCD FS UCU BAĞLANTI PİNİ
sbit SAP1024_WR_Direction  at TRISC5_bit;       //GLCD FS UCU BAĞLANTI PİNİ

//I2C BİLDİRİMLERİ
sbit I2C_SDA at RB6_bit;
sbit I2C_SCL at RB7_bit;

 sbit I2C_SDA_VERI at LATB6_bit;//27.01.2019 güncellemesi ile eklendi

sbit I2C_SDA_Direction at TRISB6_bit;
sbit I2C_SCL_Direction at TRISB7_bit;

 main() {
   
   unsigned char hata;
   unsigned char dizi[5];

   dizi[0]=10;
   dizi[1]=20;
   dizi[2]=30;
   dizi[3]=40;
   dizi[4]=50;
   
   CMCON=7;//komparatörler kapatılı
   SAP1024_INIT(128,64,6);//kendi GLCD kütüphanemi çağırdım

   AT24C512_Sayfa_Veri_Yazma(hata,1,20,dizi,5);
}
  • Yukarıda 5 elemanlı bir char dizisi oluşturuldu ve değerleri atandı.
  • AT24C512_Sayfa_Veri_Yazma” fonksiyonu ile 20. adresten başlayarak “dizi” de olan veriler yazıdılacak
  • Kullanılacak değişkenin “dizi” adında olduğu ve “5” elemanlı olduğu bildirildi.
  • “Hata” değişkeni sonradan okunarak fonksiyonda hata olup olmadığı anlaşılabilir. Hata=1 ise hata var demektir ve işlem iptal edilmelidir.
//GLCD BİLDİRİMDLERİ
char SAPTRIS at trisd;//data portları
char SAPDATA_giris at portd;
char SAPDATA_cikis at latd;
sbit SAP1024_RD at RC4_bit ;       //GLCD RD UCU BAĞLANTI PİNİ
sbit SAP1024_CE at rc3_bit ;       //GLCD CE UCU BAĞLANTI PİNİ
sbit SAP1024_CD at Rc2_bit ;       //GLCD C/D UCU BAĞLANTI PİNİ
sbit SAP1024_RST at Rc1_bit ;      //GLCD RST UCU BAĞLANTI PİNİ
sbit SAP1024_FS at Rc0_bit ;       //GLCD FS UCU BAĞLANTI PİNİ
sbit SAP1024_WR at RC5_bit ;       //GLCD wr UCU BAĞLANTI PİNİ

sbit SAP1024_RD_Direction  at TRISC4_bit;       //GLCD RD UCU BAĞLANTI PİNİ
sbit SAP1024_CE_Direction  at TRISC3_bit;       //GLCD CE UCU BAĞLANTI PİNİ
sbit SAP1024_CD_Direction  at TRISC2_bit;       //GLCD C/D UCU BAĞLANTI PİNİ
sbit SAP1024_RST_Direction at TRISC1_bit;      //GLCD RST UCU BAĞLANTI PİNİ
sbit SAP1024_FS_Direction  at TRISC0_bit;       //GLCD FS UCU BAĞLANTI PİNİ
sbit SAP1024_WR_Direction  at TRISC5_bit;       //GLCD FS UCU BAĞLANTI PİNİ

//I2C BİLDİRİMLERİ
sbit I2C_SDA at RB6_bit;
sbit I2C_SCL at RB7_bit;

 sbit I2C_SDA_VERI at LATB6_bit;//27.01.2019 güncellemesi ile eklendi

sbit I2C_SDA_Direction at TRISB6_bit;
sbit I2C_SCL_Direction at TRISB7_bit;

 main() {
   
   unsigned char hata,j=0;
   unsigned char dizi[5];
   char txt[16];
   unsigned int i=0,veri=0;
   CMCON=7;//komparatörler kapatılı
   
   SAP1024_INIT(128,64,6);//kendi GLCD kütüphanemi çağırdım

   AT24C512_Coklu_Veri_Okuma(1,20,dizi,5);

   for(i=0;i<5;i++)
      {
       intToStr((dizi[i]),txt);

       SAP1024_YAZI_YAZMA(1,i+1,txt);
       delay_ms(150);
     }
  
}
AT24C512-coklu-veri-yazma-okuma
AT24C512 çoklu veri yazma ve okuma
  • Yukarıda ki örnekte ilk olarak eeproma yazılacak veriler bir dizi oluşturularak diziye aktarıldı.
  • Daha sonra diziden sırası ile “AT24C512_Sayfa_Veri_Yazma” fonksiyonu ile yazdırıldı.
  • Yazma yapılan adresten başlayarak aynı şekilde “AT24C512_Coklu_Veri_Okuma” fonksiyonu ile okuma yapıldı ve sırası ile GLCD de yazdırıldı.

Çalışma Videosu


Sonuç

  • AT24C512 tipi I2C protokolü kullanan bir EEPROM kullanmayı detayları ile beraber gördük.
  • Bu tarz eepromlar var olan I2C hattına basitçe bağlanıp kullanılabilir.
  • Sahip oldukları alan sayesinde devrede kalması gereken sabit değerler yada grafikler PIC ten yer kullanmadan buralarda saklanabilir.
  • I2C iletişiminde ferrit filtrelerin önemini tekrar vurgulamak istiyorum. Mutlaka SDA ve SCL hattına seri olarak ferrit filtre ( 1k – 100mhz) takılmalıdır.
  • Bu kütüphane I2C ile yazıldığından benim yazmış olduğum I2C yi indirip projenize dahil etmeniz gerekmektedir.
  • Yazdığım kütüphane her zaman ki gibi açık kaynak olduğundan fonksiyonları inceleyip başka tip EEPROM lara çok rahatlıkla adapte edebilirsiniz.
  • Dersin sonuna geldik aklınıza takılan sorularınızı “Soru-Cevap” forumuna sorabilirsiniz.

Kütüphane Dosyaları

 


Yararlanılan Kaynaklar


 

 

About ERCAN KOÇLAR

Çalışmalarım çocukken başladı kolonyalı kağıtları yakmak, ilaçları birbirine katmak gibi değişik deneylerim vardı. Kimya kitabında elektroliz ile suyun hidrojen ve oksijene ayrıldığı ve hidrojenin yandığını yazıyordu, o zamanlarda aklım almıyordu sudan nasıl yanan....Devamını okumak için tıklayınız ;)