This post is also available in: English (İngilizce)
- SRAM Nedir?
- PIC ile Neden RAM Kullanılır ?
- LH52256 ve RAM ler Hakkında Genel Bilgiler
- LH52256 MikroC Kütüphanesi ve Devresinin Genel Mantığı
- LH52256 SRAM Devresi
- LH52256 Devre Şeması
- LH52256 SRAM MikroC Kütüphanesi
- SONUÇ
- Kütüphane Dosyaları – Kodlar
- Yararlanılan Belgeler
SRAM Nedir?
- 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 entegresinin kaç adet “ADRES” pini olduğuna bakıyoruz
- 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ığı
- İ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.
- 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
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
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
- İş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
- İ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ı
- 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
- 2 adet 74HC164 kaydırmalı kayıt edici entegre
- 2 adet 14 pin entegre soketi (74HC164 ler için)
- 4 adet LH52256 SRAM entegresi ( yada 1 adet tercihre göre)
- 4 adet dar tip 28 pin entegre soketi
- 6 adet 0.1uf kondansatör
- Delikli Pertinaks
- Percision dişi ve erkek soketler ( yapılacak devreye göre değişebilir)
Devrenin Yapılışı
- 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.
- Devrenin arkasından gerekli uçların çıkışı görülmektedir.
- 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.
- 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
- RAM Analizi Yapılır
- Adres Seçilir
- RAM Seçilir
- 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ı
- LH52256 SRAM MikroC Kütüphanesi- .mcl – (ÜCRETSİZ)
Bağlantıyı Görmek İçin Giriş Yapın ya da Ücretsiz Üye Olun
Yararlanılan Belgeler
This post is also available in: English (İngilizce)