LH52256-SRAM-kapak

LH52256 SRAM MikroC Kütüphanesi

This post is also available in: English (İngilizce)


 


SRAM Nedir?

LH52256-SRAM
LH52256 Statik RAM Görülmektedir.
  • SRAM yani statik ram yüksek hızlara sahip ramlerdir. Yazma-okuma  hızları ns(nano saniye) seviyesindedir(1ns = 0.000000001 sn demektir)
  • Statik ram denmesinin sebebi şudur;
    • Bilgisayarlara taktığımız ramler dinamik ram olarak geçer çünkü içerisindeki bilgiyi muhafaza etmeleri için bir tazeleme refresh süresi vardır bu sürede bir tazelenmeleri gerekir. Ancak statik ramlarde buna gerek yoktur. Yapılan ayrım bunun ile ilgilidir.
  • Genel olarak bilgisayarlarda işlemciye destek amacı ile kullanılırlar. İşlemci alırken yazan L1 ve L2 bellek sram miktarını belirler
  • Hızlı olmalarına karşın boyutları diğer DRAM(bilgisayarlara takılan genel ram ler) kadar yüksek değildir. Yani yüksek hız gerekli olan yerlerde tercih edilir
  • RAM olduğundan doğal olarak enerji kesildiğinde verilerde silinirler.

PIC ile Neden RAM Kullanılır?

  • Çalışmalarım sırasında hızlı ölçüm yapıldığında herkesinde bildiği gibi ne kadar hızlı olursa olsun HDD-SD Kart farketmeksizin veriyi yazmakta yavaş kalırlar ve bu da verilerin kaybolmasına sebep olur zaten genel bilgisayar mantığını da önce RAM e veri yükler sonra sabit disklere aktarır
  • PIC lerinde belli boyutlarda RAM leri vardır ancak bunlar çok az dır ve genel programdan geriye pek birşey kalmaz.
  • Bunun ile ilgili araştırma yaparken ne yazık ki gerçek bir çözüm yerine 2 adet gereksiz yere PIC in sadece ram için kullanılması gibi saçma bilgiler ile karşılaştım .
  • Bu sorunu aşmanın yolu harici  RAM kullanmaktır.( Mantıksızca fazladan PIC kullanmak değildir)
  • Ben bunu roket motoru gücü ölçmek için tasarladığım cihaz için kullanıyorum çünkü dünya standartlarında bir roket motoru ölçümü yapmak için 1/100 saniyede örnek almak gerekir. Gördüğünüz gibi oldukça hızlı, bu hıza yetişecek bir sabit disk yok çünkü yazma hızları yüksekte olsa sabit disklerin bir haberleşme onay prosedürü vardır bu da gecikme demektir
  • PIC in de mikro ram i yetersiz kaldığı için harici bir ram kullanmaya karar verdim .Bunun için yüksek hızlı ve boyutuda PIC ile kıyaslayınca oldukça yeterli olan LH52256 SRAM i seçtim.

LH52256  ve RAM ler Hakkında Genel Bilgiler

  • İlk olarak ram boyutu nasıl hesaplanır buna bakalım
    • Ram entegresinin kaç adet “ADRES” pini olduğuna bakıyoruz
      • LH52256 nın 15 adet bulunmakta(A0-A14)
      • Dolayısı ile 215  = 32768 eder. Yani bu RAM de en fazla 32768 adet adres bulunur. (Not: her pin 1 veya 0 olabildiğinden 2 olasılık vardır. Bu sebeple 2 üssü olarak hesaplanır)
    • Şimdi RAM in “Giriş ve Çıkış (I/O)” portlarına bakıyorum
      • LH52256 da 8 adet giriş çıkış bulunur. Yani 8 bitlik bir RAM o halde 32768*8 bit = 32768 byte lık bir alan mevcut demektir. 32768/1024 dersek RAM in alanı 32 kbyte a eşittir.
      • NOT: Bazı RAM lerde farklı durumlar olabilir bunun için kullanma kılavuzlarını detaylı inceleyin ancak genel olarak SRAM ler bu şekildedir.
  • RAM boyutunu hesapladım şimdi bana kaç adet RAM gerekli olduğunu örnekle hesaplayalım
    • Yukarıdaki örnekten gidersek bana sensörden 1/100 saniye aralığında veri  alacağım bir sistem gerekli ve verilerin tipi float olsun
    • Float 32 bittir. 32768*8=262.144 bit eder.  Float 32 bit olduğundan 262144/32=8192 eder
    • Ben 1/100 saniyede bir kayıt yapacaktım o halde 8192/100=81,92 saniye eder yani 1 adet RAM ile Float tipinde 1/100 saniye aralığında kayıt yapmak istersem 81 saniye kayıt yapabilirim.
    • Gördüğünüz gibi gerekli RAM i bu şekilde hesaplıyorum. Ben roket motoru test edeceğim için 3-4 saniye gerekli, yani bu RAM, projem için yeterlidir.

LH52256 MikroC Kütüphanesi ve Devresinin Genel Mantığı

74HC164-shift-register-adresleme
74HC164 shift register Entegreleri
  • İleride göreceğiniz üzere ve yukarıda da belirttiğim gibi RAM lerde bir çok pin mevcuttur. Sadece 15 adet adres pini + 8 adet I/o pini ve diğer besleme kontrol vs. pinler vardır. Bunların hepsini PIC e bağlamak pek mümkün değildir.
  • Bu sebeple adresleme bölümüne kaydırmalı kayıt edici “shift register” ekleyerek bu sorunu aştım. Yani adresleme seri olarak yapılırken veri yazma da hız kaybı yaşamamak için veri kısmını direk pararlel olarak PIC e bağladım.
  • Shift Register olarak 74HC164 kullandım. Bu parçaların çalışma mantığını kısaca açıklamak gerekirse;
    • Shift register lar genel olarak pin tasarrufu sağlarlar. Yani seri girişi paralel çıkış yaparlar
    • PIC üzerinden sadece 1 pinden gönderdiğimiz sıralı olarak bir ve sıfırları kendi bünyesindeki çıkışlarda dizer böylece PIC ten tek pin harcarken verimizi paralel hale getirmiş oluruz.
    • Shift Registere veri geldiğinde kendisinde bulunan CP ucu sıfırda bire çekilir böylece veriyi alır her seferinde bu işlem tekrarlanarak veri yüklemesi yapılır.
    • Aşağıdaki görlseli inceleyerek biraz daha mantığını kavrayabilirsiniz.
74HC164-calisma-mantigi
74HC164 Çalışma Mantığı
  • Tüm bunların dışında RAM lerin bir çok pini ortak kullanılabilir. Çünkü CE(chip enable) pini mevcuttur. Dolayısı ile hangi RAM in CE ucu seçiliyse o aktif olur bu sebeple bir çok RAM aynı adres ve data hattına bağlanarak kullanılabilir.
  • Genel olarak 4 adet RAM kullanıldığından bende devreyi bu şekilde çizdim bu sayı elbette arttırılabilir ancak her RAM için CE ucu da ekleneceğini unutmayın.

 

LH52256 Pin İşlevleri

LH52256-SRAM-pinler
LH52256 Pinleri
Pin İsmi İşlevi
A0 – A14 Adres Girişleri
CE RAM Seçer
WE Yazma İşlemi Yapar
OE Okuma İşlemi Yapar
I/O1 – I/O8 Veri Giriş ve Çıkış
Vcc Besleme +5V
GND Topraklama
  • Yukarıdaki fotoğrafta bazı pinler üzerinde çizgi görülecektir. Bir pin üzerinde çizgi görülmesi onun düşük seviyede ( 0 durumunda) aktif olduğu anlamına gelir.

 

74HC164 Pin İşlevleri

74HC164-pin
74HC164 Pin İşlevleri
Sembol Pin Açıklama
DSA 1 Veri Girişi
DSB 2 Veri Girişi
Q0 – Q7 3,4,5,6,10,11,12,13 Çıkış
GND 7 Topraklama
CP 8 Saat Darbesi
MR 9 Master Reset
Vcc 14 Besleme +5v
  • Çalışmada DSB yi direk +5v a bağlayarak kontrolü sadece DSA ucundan yaptım
  • CP düşük seviyeden yüksek seviyeye ( 0 dan 1 e ) çıkarak çalışır
  • MR pini düşük seviyede aktif olur ve çıkışta bulunan tüm veriyi siler.Yani bir anlamda sıfırlar

LH52256 Çalışma Protokolleri

  • LH52256 nın kullanılırken uyulması gereken adımları göreceğiz.
  • RAM entegrelerinde enerji kesildiğinde içerisinde verilerin silineceğini unutmayın. Enerji oldukça içerisinde veri saklanır

 

Genel İşlem Tablosu

CE WE OE Mod I/O1-I/O8 Besleme
H x x Boşta Yüksek Seviye 0.6 mA
L H L Okuma Veri Çıkışı 25 mA
L H H Çıkış İptal Yüksek Seviye 25 mA
L L x Yazma Veri Girişi 25 mA
  • x işareti o durumda 0 yada 1 olmasının önemi olmadığını belirtir.
  • Boşta ve Çıkış iptal durumunun farkı boşta durumunda RAM in uyanması daha uzun süre alır ( tabi nano saniye olarak) ancak bu durumda daha az akım harcar. Çıkış İptal durumunda RAM işleme hazır bekler fakat daha çok akım çeker

 

LH52256 Veri Okuma İşlemi

LH52256-SRAM-veri-okuma
LH52256 Veri Okuma İşlemi
  • İşleme başlamadan önce WE pini 1 konumuna alınır
  • Daha önce LH52256 da 0-32767 olmak üzere toplam 32768 adet adres olduğunu hesaplamıştık. Yani adres olarak 0 ile 32767 arasında bir değer verebiliriz sıralı yada kopuk olmasının bir önemi yok. Adresler bilginin saklı olduğu gözleri seçmenize yarar
  • CE pini 1 den 0 a çekilir böylece RAM aktif olur . (Birden fazla RAM var ise kullanılacak RAM in CE ucu aktif edilmelidir. Diğer RAM lerin CE uçları ise mutlaka 1 konumuna gelmelidir aksi halde hatalar olacaktır.)
  • OE pini 1 den 0 a çekilir ve okuma yapacağı bildirilir.
  • Tüm yukarıdaki işlemlerden sonra I/O uçlarından 8 bitlik veri okunur
  • Okuma ardından yine işlemler tersine yapılara RAM ilk konumuna geri döndürülür.

 

LH52256 Veri Yazma İşlemi

LH52256-SRAM-veri-yazma
LH52256 Veri Yazma İşlemi
  • İlk olarak yine yazma yapılacak adres seçilir
  • OE ucu 0 dan 1 e çekilerek okuma kapatılır
  • CE ucu 1 den 0 a çekilerek RAM aktif hale getirilir.
  • WE ucu 1 den sıfıra çekilerek Yazma İşlemi yapılacağı bildirilir.
  • Bu işlemler den sonra I/O ucundan 8 bitlik veri seçilen adrese yazılır
  • Yazma işleminden hemen sonra işlemler tersine yapılarak RAM ilk durumuna döndürülür.

 

LH52256 SRAM Devresi

  • Devre deneme amaçlı olduğundan delikli pertinaksa kuruldu.
  • RAM lerde adres – veri uçları gibi uçlar ortak olduğundan ve bunları düz pertinaksta yapmak zor olacağından aşağıda göreceğiniz gibi üst üste soketler ile tutturmayı tercih ettim.
  • 3 adet soket olmasına karşın 2 adet RAM ile denemelerimi yaptım
  • RAM sayısı istenildiği kadar arttırılabilir.
  • Adresleme için 74HC164 kaydırmalı kayıt edici entegresi kullandım
  • RAM ler için mutlaka soket kullanın yada kullanma kılavuzunda bulunan lehimleme uyarılarına mutlaka uyun

 

LH52256 Devre Şeması

LH52256-SRAM-devre-semasi
LH52256 SRAM Devre Şeması – Resmi Büyütmek İçin Üzerine Tıklayınız
  • Adres – Giriş/çıkış – OE – WE uçları ortak bağlanıp sadece CE uçları ayrılmıştır.
  • RAM de 15 adet adres olduğundan 2 adet 74HC164 kullanıldı.
  • PIC ten Adres verisi 74HC164 e seri olarak gelir oradan paralel olarak RAM lere gider
  • Giriş-Çıkışlar direk PIC e bağlanmıştır.

Gerekli Malzemeler

  1. 2 adet 74HC164 kaydırmalı kayıt edici entegre
  2. 2 adet 14 pin entegre soketi (74HC164 ler için)
  3. 4 adet LH52256 SRAM entegresi ( yada 1 adet tercihre göre)
  4. 4 adet dar tip 28 pin entegre soketi
  5. 6 adet 0.1uf kondansatör
  6. Delikli Pertinaks
  7. Percision dişi ve erkek soketler ( yapılacak devreye göre değişebilir)

Devrenin Yapılışı

LH52256-SRAM-devre-genel-gorunum
LH52256 SRAM Devre Genel Görünümü
  • Yukarıda RAM apartmanı görülmektedir. :)
  • RAM ler üst üste takıldığında deneme devreleri daha düzenli olmaktadır.
  • Önde bulunan 2 entegre ise 74HC164 tür.
  • Çıkış ve giriş için kullanılan pin kablolarını lehimlemeniz çalışam sırasıda oluşacak hataları azaltabilir.

 

LH52256-SRAM-devre-genel-gorunum-2
LH52256 SRAM Devre Genel Görünümü 2
  • Devrenin arkasından gerekli uçların çıkışı görülmektedir.

 

LH52256-SRAM-ram-soketleri
LH52256 SRAM Soketler
  • RAM soketlerine numara verilerek CE uçları ayrı kablolar ile PIC e bağlanmıştır.
  • Denemeler sırasında karışıklık olmaması için her bir sokete numara verildi.

 

LH52256-SRAM-ram-soketleri-2
LH52256 SRAM Soketler 2
  • RAM lerin takılış biçimleri görülmektedir.

 

LH52256 SRAM MikroC Kütüphanesi

  • MikroC için yazdığım LH52256 SRAM kontrol kütüphanem açık kaynak olduğu için ufak değişiklikler ile başka derleyiciler içinde çalıştırılabilir.
  • LH52256 ya benzer neredeyse aynı olan başka SRAM lerde mevcuttur kodlarda yapılacak basit değişiklikler ile bu RAM lerde kullanılabilir yada daha fazla RAM sisteme eklenebilir bunu yapmak tamamen sizin elinizde.

Fonksiyonlar

  • Şimdi sırası ile fonksiyonları inceleyelim
  • Kullanıcıya yönelik olan fonksiyonlar yeşil , sistem fonksiyonları ise kırmızı renkte belirtilmiştir
  • Sistem fonksiyonlarını genel işleyiş içerisinde çalıştırmak hatalara sebep olabileceğinden dikkatli olunmalıdır.
  • Fonksiyonlar kısaca anlatıldıktan sonra detaylı örnekler verilecektir.

Kaydırmalı Kayıt Edici “Shift Register” Fonksiyonları

 

– LH52256_RESET_RUTINI Fonksiyonu

Fonksiyon : void LH52256_RESET_RUTINI()

Amacı : 74HC164 üzerinde daha önceden yazılmış tüm veriyi silerek çıkışları “0” yapar. Adres bilgisini siler

Parametreler : Bulunmuyor

Kullanım Şekli :

LH52256_RESET_RUTINI();

Geri Bildirim :  void tipinde olduğundan geri bildirimde bulunmaz

 

– LH52256_SHIFT_REGISTER_VERI_GONDERME_RUTINI Fonksiyonu

Fonksiyon : void LH5225_SHIFT_REGISTER_VERI_GONDERME_RUTINI(unsigned char VERI)

Amacı : 74HC164 e veri yüklenmesini sağlar

Parametreler :

  • VERI : Verinin 0 yada 1 olup olmadığı bildirilir

Kullanım Şekli :

LH5225_SHIFT_REGISTER_VERI_GONDERME_RUTINI(1);//shift registera lojik 1 verisi yükler yani sıradaki port lojik 1 olur

Geri Bildirim : void tipinde olduğundan geri bildirimde bulunmaz

 

– LH52256_ADRES_SECME Fonksiyonu

Fonksiyon : unsigned char LH52256_ADRES_SECME(unsigned int RAM_ADRESI)

Amacı : LH52256 SRAM de adres seçilmesini sağlar.

Parametreler :

  • RAM_ADRESI : Veri yazılacak yada okunacak RAM adresi buraya yazılır.

Kullanım Şekli :

LH52256_ADRES_SECME(125);// SRAM in 125. adresi seçilir

Geri Bildirim :

  • 0 verisi geliyorsa adres aşımı olmuştur yani LH52256 da son adres 32767 dir bundan büyük değer girilirse böyle bir adres olmadığından hata kodu verir

 

Genel SRAM Fonksiyonları

 

– LH52256_ANALIZ Fonksiyonu

Fonksiyon : unsigned char LH52256_ANALIZ()

Amacı : Takılı olan RAM leri analiz eder ve ilk pin-port ayarlamalarını yapar

Parametreler : Bulunmuyor

Kullanım Şekli :

LH52256_ANALIZ();//sistemdeki RAM ler analiz edilir

Geri Bildirim :

  • Sistemde bulunan RAM sayısını geri bildirir.

 

– LH52256_RAM_SECME Fonksiyonu

Fonksiyon : void LH52256_RAM_SECME(unsigned char RAM_NUMARASI)

Amacı :

  • Hangi RAM ile işlem yapılacaksa  o RAM in seçilmesini sağlar
  • Yazılımda 4 adet RAM tanımlanabilir ancak kodlarda değişiklik ile sayıyı arttırabilirsiniz.

Parametreler :

  • RAM_NUMARASI : İşlem yapılacak RAM numarası yazılır. Ör : 1 ,2,3,4 gibi.

Kullanım Şekli :

LH52256_RAM_SECME(4);//4. sokete takılı RAM aktif hale getirildi

Geri Bildirim : void tipinde olduğundan geri bildirimde bulunmaz.

 

– LH52256_DERINLEMESINE_TEST Fonksiyonu

Fonksiyon : unsigned char LH52256_DERINLEMESINE_TEST(unsigned char RAM_NUMARASI)

Amacı : Seçilen RAM in tüm adreslerini tek tek kontrol eder

Parametreler :

  • RAM_NUMARASI : Derinlemesine incelenecek RAM seçilir

Kullanım Şekli :

LH52256_DERINLEMESINE_TEST(2);//2 numaralı sokette bulunan RAM de derinlemesine inceleme yapar

Geri Bildirim :

  • 0 değeri gelirse RAM içerisinde herhangi bir adreste hata var demektir
  • 1 değeri gelirse RAM adreslerinde hiçbir hata yok demektir

 

SRAM Veri Yazma Fonksiyonları

 

– LH52256_RAM_VERI_YAZMA_RUTINI_SABIT Fonksiyonu

Fonksiyon : void LH52256_RAM_VERI_YAZMA_RUTINI_SABIT(unsigned char VERI)

Amacı : 8 bitlik veri yazar

Parametreler :

  • VERI : 8 bitlik veri yüklenir

Kullanım Şekli :

LH52256_RAM_VERI_YAZMA_RUTINI_SABIT(125);

Geri Bildirim : void tipinde olduğundan geri bildirimde bulunmaz.

 

– LH52256_RAM_VERI_YAZMA_RUTINI_ARTTIRIMLI Fonksiyonu

Fonksiyon : void LH52256_RAM_VERI_YAZMA_RUTINI_ARTTIRIMLI(unsigned char VERI,unsigned char *HATA)

Amacı : 8 bitlik veri yazar ve otomatik olarak yazma yaptığı adresi bir kez arttırır

Parametreler :

  • VERI : 8 bitlik veri yüklenir
  • *HATA : Hata bayrağı ;
    • Hata bayrağı “0” okunursa adres aşması meydana gelmiş demektir.
    • Bu bayrağı okuma şekli için kullanımı inceleyiniz
    • Bu aynı zamanda bir pointer dir.

Kullanım Şekli :

unsigned char abc;

LH52256_RAM_VERI_YAZMA_RUTINI_ARTTIRIMLI(125,abc);//125 verisi gönderilirken pointerden gelecek kod ise abc değişkeninden okunabilir

Geri Bildirim : void tipinde olduğundan geri bildirimde bulunmaz

 

– LH52256_RAM_VERI_YAZMA_RUTINI_AZALTIMLI Fonksiyonu

Fonksiyon : void LH52256_RAM_VERI_YAZMA_RUTINI_AZALTIMLI(unsigned char VERI,unsigned char *HATA)

Amacı : 8 bitlik veri yazar ve otomatik olarak yazma yaptığı adresi bir kez azaltır

Parametreler  :

  • VERI : 8 bitlik veri yüklenir
  • *HATA : Hata bayrağı ;
    • Hata bayrağı “0” okunursa adres aşması meydana gelmiş demektir.
    • Bu bayrağı okuma şekli için kullanımı inceleyiniz
    • Bu aynı zamanda bir pointer dir.

Kullanım Şekli :

unsigned char abc;

LH52256_RAM_VERI_YAZMA_RUTINI_AZALTIMLI(125,abc);//125 verisi gönderilirken pointerden gelecek kod ise abc değişkeninden okunabilir

Geri Bidirim : void tipinde olduğundan geri bildirimde bulunmaz

 

SRAM Veri Okuma Fonksiyonları

 

– LH52256_RAM_VERI_OKUMA_RUTINI_SABIT Fonksiyonu

Fonksiyon : unsigned char LH52256_RAM_VERI_OKUMA_RUTINI_SABIT()

Amacı : 8 bitlik veriyi RAM den okur

Parametreleri : Bulunmuyor

Kullanım Şekli :

unsigned char okunan_veri;

okunan_veri = LH52256_RAM_VERI_OKUMA_RUTINI_SABIT();

Geri Bildirim : Okuduğu veriyi geri döndürür

 

– LH52256_RAM_VERI_OKUMA_RUTINI_ARTTIRIMLI Fonksiyonu

Fonksiyon : unsigned char LH52256_RAM_VERI_OKUMA_RUTINI_ARTTIRIMLI(unsigned char *HATA)

Amacı : 8 bitlik veriyi RAM den okur ve okuma yaptığı adresi otomatik olarak bir arttırır

Parametreleri :

  • *HATA : Hata bayrağı ;
    • Hata bayrağı “0” okunursa adres aşması meydana gelmiş demektir.
    • Bu bayrağı okuma şekli için kullanımı inceleyiniz
    • Bu aynı zamanda bir pointer dir.

Kullanım Şekli :

unsigned char okunan_veri,abc;

okunan_veri = LH52256_RAM_VERI_OKUMA_RUTINI_ARTTIRIMLI(abc);

Geri Bildirim : Okuduğu veriyi geri döndürür

 

– LH52256_RAM_VERI_OKUMA_RUTINI_AZALTIMLI Fonksiyonu

Fonksiyon : unsigned char LH52256_RAM_VERI_OKUMA_RUTINI_AZALTIMLI(unsigned char *HATA)

Amacı : 8 bitlik veriyi RAM den okur ve okuma yaptığı adresi otomatik olarak bir azaltır

Parametreleri :

  • *HATA : Hata bayrağı ;
    • Hata bayrağı “0” okunursa adres aşması meydana gelmiş demektir.
    • Bu bayrağı okuma şekli için kullanımı inceleyiniz
    • Bu aynı zamanda bir pointer dir.

Kullanım Şekli  :

unsigned char okunan_veri,abc;

okunan_veri = LH52256_RAM_VERI_OKUMA_RUTINI_AZALTIMLI(abc);

Geri Bildirim : Okuduğu veriyi geri döndürür

 

Fonksiyonların Uygulanması

Pin Tanımlamasının Yapılması

  • İlk olarak pin tanımlamasını görelim
 sbit LH52256_CP   at RE0_bit;        //74164 Saat - clk
 sbit LH52256_DSA  at RE2_bit;        //74164 Shift register verisi buradan ayarlanın 1 mi 0 mı
 sbit LH52256_MR   at RE1_bit;        //74164 RESET
 char LH52256_DATA at portb;          //ram data I/O  giriş
 sbit LH52256_CE1  at RA0_bit;        //ram1 chip enable
 sbit LH52256_CE2  at RA1_bit;        //ram2 chip enable
 sbit LH52256_CE3  at RA2_bit;        //ram3 chip enable
 sbit LH52256_CE4  at RA3_bit;        //ram4 chip enable
 sbit LH52256_WE   at RA5_bit;       //ram write enable
 sbit LH52256_OE   at RA4_bit;
 
 sbit LH52256_CP_Direction   at TRISE0_bit;
 sbit LH52256_DSA_Direction  at TRISE2_bit;
 sbit LH52256_MR_Direction   at TRISE1_bit;
 char LH52256_DATA_Direction at TRISB;
 sbit LH52256_CE1_Direction  at TRISA0_bit;
 sbit LH52256_CE2_Direction  at TRISA1_bit;
 sbit LH52256_CE3_Direction  at TRISA2_bit;
 sbit LH52256_CE4_Direction  at TRISA3_bit;
 sbit LH52256_WE_Direction   at TRISA5_bit;
 sbit LH52256_OE_Direction   at TRISA4_bit;
  • LH52256 nın veri giriş-çıkışı 8 bit olduğundan direkt olarak bir porta bağladım. Bu sebeple  “char LH52256_DATA at portb” şeklinde bir tanımlama yaptım
  • LH52256 kütüphanesi belli bir sistem ile çalışır bu sebeple işlemleri uygun sıra ile uygulamak şarttır.
  • Bu sırayı görelim
    1. RAM Analizi Yapılır
    2. Adres Seçilir
    3. RAM Seçilir
    4. Okuma yada yazma işlemi yapılır

 

SRAM Analizi Yapmak

void  main()
{
    unsigned char ram_sayisi=0;
    char txt[12];//çevrim için gereklidir
    ADCON1=0b00001111;//tüm analog girişler dijital yapıldı
    CMCON=7;//komparatörler kapatıldı
  
    SAP1024_INIT(240,128,6);//GLCD ekran kütüpahanesi kurulur
  
    ram_sayisi=LH52256_ANALIZ();//Sistemdeki RAM ler analiz edilir 
  
   //Sonuçlar str ye çevrilip GLCD de gösterilir
   WORDtostr(ram_sayisi,txt);
   SAP1024_YAZI_YAZMA(10,10,txt);

}
  • Yukarıdaki ADCON registeri PIC ile ilgilidir her PIC in farklı olabilir ben denemelerde analog pin kullandığım için hepsini dijital duruma çevirdim.

 

SRAM Okuma İşlemi Yapmak

void  main()
{
    unsigned char veri=0; 
    char txt[12];//çevrim için gereklidir 
    ADCON1=0b00001111;//tüm analog girişler dijital yapıldı 
    CMCON=7;//komparatörler kapatıldı

    SAP1024_INIT(240,128,6);//GLCD ekran kütüpahanesi kurulur
  
    LH52256_ANALIZ();

    LH52256_ADRES_SECME(32766);//32766. SRAM adresi seçilir
    
    LH52256_RAM_SECME(1);//1 numaralı SRAM seçilir
   
    veri= LH52256_RAM_VERI_OKUMA_RUTINI_SABIT();//okunan veriler "veri" değişkenine aktarılır
  
  

   //Sonuçlar str ye çevrilip GLCD de gösterilir
    WORDtostr(veri,txt);
    SAP1024_YAZI_YAZMA(10,10,txt);

}
  • Şimdi bir diğer örnek ile arttırımlı sistemi görelim azaltım ve arttırım aynı mantık ile çalışır
void  main()
{
    unsigned char veri=0,hata_kodu;
    unsigned int i=0; 
    char txt[12];//çevrim için gereklidir 
    ADCON1=0b00001111;//tüm analog girişler dijital yapıldı 
    CMCON=7;//komparatörler kapatıldı

    SAP1024_INIT(240,128,6);//GLCD ekran kütüpahanesi kurulur
  
    LH52256_ANALIZ();

    LH52256_ADRES_SECME(0);//0. SRAM adresi seçilir
    
    LH52256_RAM_SECME(1);//1 numaralı SRAM seçilir
   
    for(i=0;i<32768;i++)
       {
         veri= LH52256_RAM_VERI_OKUMA_RUTINI_ARTTIRIMLI(hata_kodu);//okunan veriler "veri" değişkenine aktarılır ve adres bir arttırlır
       
          if(hata_kodu==0)//eğer adres hatası alırsan
            {
               return;//işlemi sonlandır
            } 

         //Sonuçlar str ye çevrilip GLCD de gösterilir
         WORDtostr(veri,txt);
         SAP1024_YAZI_YAZMA(10,10,txt);
       }

}
  • Yukarıda ki örnekte
    • RAM in 0 . adresi seçilir ve son adrese kadar okuma yapılarak her okunan veri  değişkene atanır
    • Aynı zamanda adres taşma hatasına karşın HATA bayrağı sürekli if koşulu ile test edilir hata varsa veri alınmaz ve işlem sonlandırılır
  • Adres azaltımın mantığı da aynı olduğundan ayrıca örnek yazmıyorum
  • 32768 bildiğiniz gibi en başta hesaplanmıştık. LH52256 nın toplam adres sayısıydı

 

SRAM Yazma İşlemi Yapmak

void  main()
{
    char txt[12];//çevrim için gereklidir 
    ADCON1=0b00001111;//tüm analog girişler dijital yapıldı 
    CMCON=7;//komparatörler kapatıldı

    SAP1024_INIT(240,128,6);//GLCD ekran kütüpahanesi kurulur
  
    LH52256_ANALIZ();

    LH52256_ADRES_SECME(100);//100. SRAM adresi seçilir
    
    LH52256_RAM_SECME(3);//3 numaralı SRAM seçilir
   
    LH52256_RAM_VERI_YAZMA_RUTINI_SABIT(235);//seçilen adrese 235 değeri yazıldı
  
  

   //Sonuçlar str ye çevrilip GLCD de gösterilir
    WORDtostr(veri,txt);
    SAP1024_YAZI_YAZMA(10,10,txt);

}
  • Yazma işlemide aynı sıra ile çalışır. Adres seçilir – RAM seçilir ve veri gönderilir
  • Vcc bağlantısı kesilirse RAM deki bilgilerin silineceğini unutmayın
  • Şimdi yazma işlemininde arttırımlı halini görelim
void  main()
{
    unsigned char hata_kodu;
    unsigned int i=0; 
    char txt[12];//çevrim için gereklidir 
    ADCON1=0b00001111;//tüm analog girişler dijital yapıldı 
    CMCON=7;//komparatörler kapatıldı

    SAP1024_INIT(240,128,6);//GLCD ekran kütüpahanesi kurulur
  
    LH52256_ANALIZ();

    LH52256_ADRES_SECME(0);//0. SRAM adresi seçilir
    
    LH52256_RAM_SECME(3);//3 numaralı SRAM seçilir
   
    for(i=0;i<1200;i++)
       {
         LH52256_RAM_VERI_YAZMA_RUTINI_ARTTIRIMLI(120,hata_kodu);//120 verisi 0 dan 1200 e kadar tüm adreslere yazılır
       
          if(hata_kodu==0)//eğer adres hatası alırsan
            {
               return;//işlemi sonlandır
            } 

         //Sonuçlar str ye çevrilip GLCD de gösterilir
         WORDtostr(veri,txt);
         SAP1024_YAZI_YAZMA(10,10,txt);
       }

}
  • Okumada olduğu gibi işlem yapılır
  • 0 dan 1200. adrese kadar sürekli 120 verisi yazılır
  • Adres aşması yaşanırsa işlem sonlandırılır

 

SRAM Derinlemesine Analiz Yapmak

void  main()
{
    char txt[12];//çevrim için gereklidir
    unsigned char ram_sayisi=0; 
    ADCON1=0b00001111;//tüm analog girişler dijital yapıldı 
    CMCON=7;//komparatörler kapatıldı

    SAP1024_INIT(240,128,6);//GLCD ekran kütüpahanesi kurulur
  
    LH52256_ANALIZ();
  
    ram_sayisi=LH52256_DERINLEMESINE_TEST(1);//1 nolu RAM e derinlemesine test yapılır

   //Sonuçlar str ye çevrilip GLCD de gösterilir
    WORDtostr(ram_sayisi,txt);
    SAP1024_YAZI_YAZMA(10,10,txt);

}
  • Yukarıdaki işlem eğer gerçekten önemli bir kayıt yapılacaksa kullanılmalı çünkü biraz zaman almaktadır.
  • Sürekli kullanılmasını zaman açısından önermem

Çalışma Video


SONUÇ

  • Kütüphanenin sonuna geldik genel anlamda harici RAM kullanımını LH52256 bünyesinde görmüş olduk bu bilgi ile diğer RAM ler içinde kontrol devre ve yazılımları yapabilirsiniz.
  • Yazılım uygulaması ile ilgili bir kaç pratik notu burada paylaşıyorum
    • SRAM de veri yazılmamış gözleri okuduğunuzda mantıksız değerler görebilirsiniz bunları dikkate almayın
    • SRAM de eğer bir adrese sıfır değeri yazarsanız bunu sorunsuz görebilirsiniz yukarıdaki madde hiç yazım yapılmayan adresler içindir
    • Bir kez adres  ve RAM seçtiğinizde eğer bunları değiştirmezseniz sonrasında yapacağınız tüm işlemler aynı adres ve RAM üzerinde olur yani her işlemde yeniden adres ve RAM seçmeye gerek yoktur ne zaman ki farklı adres yada farklı RAM de işlem yapacaksınız o zamana yeniden adres veya RAM seçme fonksiyonlarını kullanabilirsiniz.
    • RAM analiz fonksiyonu mutlaka en başta çağırılmalıdır. Bu RAM lerin genel pin port ayarını yapar ve buradaki RAM sayısı ile sistemin ne kadarlık bir RAM alanına sahip olduğunu hesaplayıp bu bilgiyi kullanabilirsiniz.
    • PIC in SRAM in I/O uçlarına bağlanan pinler pull-up yapılarak daha düzgün çalışması temin edilebilir ben devre üzerinde yaptım ancak PIC üzerin de de yapılabilir fakat bu konuda şart diyemem kullanıcının tecrübesi ile belirlenecektir.
  • Sorularınızı Soru-Cevap Forumuna sorabilirsiniz

Kütüphane Dosyaları

 

 


Yararlanılan Belgeler


 

This post is also available in: English (İngilizce)

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 ;)