avatar_Mucit23

I2C Eeprom Veri yazma sorunu

Başlatan Mucit23, 15 Kasım 2011, 21:38:28

ete

Data sheet ilk sayfalarında var.
Ete

zeus48

Arkadaşlar mrb . Eeprom ile ilgili benimde bir sorum olacak.  18F452 ile bir projem var.  Eeproma kaydetmek üzere 5oo adrese ihtiyacım var .pıc dede 255 var.  Harici eeprom kullanmadan sorunumu çözecek bir yöntem varmı ?

ete

500 adet bilginin tamamı elektrik kesildiğinde saklanması gereken bilgiler ise harici eprom kullanmaktan başka yolu yok bu işin.
Ama 500 adet bilginin 250 tanesi elektrik kesildiğinde silinmesi sorun yaratmayacak ise bilgilerin 250 tanesini epromda kalan 250 tanesini ise ,  data var byte[256] şeklinde tanımlayacağın değişkende saklarsın.
Tabiiki elektriği kestiğin an data değişkeni içindekiler silinecektir.

Ete

pwm.c

Alıntı yapılan: zeus48 - 28 Temmuz 2013, 18:26:40
Arkadaşlar mrb . Eeprom ile ilgili benimde bir sorum olacak.  18F452 ile bir projem var.  Eeproma kaydetmek üzere 5oo adrese ihtiyacım var .pıc dede 255 var.  Harici eeprom kullanmadan sorunumu çözecek bir yöntem varmı ?
PIC in program hafızasını eeprom gibi kullanabiliyorsun. şu başlıkta ayrıntılı bilgi verilmiş:
http://etepic.com/index.php?topic=600.0
_/\/\/\_ -[ı- -ı>|- -|ı|ı|ı- -ı< -||- -l[]l-

zeus48

Tşk arkadaşlar açıklamanız için.  Ete hocam   şu şekilde olabilirmi   iki bilgiyi bir adrese yazdırsam
birini  LOWBYTE  diğerini HIGHBYTE olurmu ?

ete

Bir adres 8 bitlik tek byte alır. Bu durumda 2 byte tek adrese yazılmaz öyle değilmi?. Bu 1 litrelik şişeye 2 litre koymaya çalışmak gibi bir şey.

Ete

zeus48


zeus48

Belkide sorunuzu yanlış anladım. Sorunuzda 72340 adresini nasıl hesaplayacağız diye sordunuz belki.
Bunun için 1 word değişkeni 1 de byte değişkeni kullanabilirsiniz.
AdresA (Byte)
AdresB(Word) şeklinde tanımlanır ise
Adres değeriniz 65535 'e kadar ise direk AdresB değerini kullanırsınız.
65535'i aşan her değer için ;
AdresA=1 olur. bu hafızanın 65536 lık kısmını size verecektir. Dolayısıyla,
72340 için 72340-65536=6804 değeride AdresB değişkeninde yer alacaktır.
Bu bilgileri adreslemede kullanmak için şöyle bir yol takip edebilirsiniz.

AdresA=(AdresA & %00000001)+%10100000
AdresB.Byte1   (Bu adresin MSB si)
AdresB.Byte0   (Buda adresim LSB si )

Umarım anlaşılmıştır.

Ete


ete hocam sizin yazınızdan alıntı.  Burda anlatmak istediğiniz  pıc in kendi eepromunda 256 dan fazla adres girebilirsiniz demek olmuyormu ?

ete

Bu yazıyı nerden almışsın bilemiyorum ama konu  pic in dahili epromu ile alakalı olmadığı aşikar. Zira bir 72340 nolu adresin 3 byte halinde gösterilmesi meselesini açıklıyor.
Dahili eprom adres word şeklinde olamaz zira 256 byte (0-255 arasıdır) oluşuyor. O halde adres 1 byte ile gösterilebiliyor demektir.
Senin bulduğun ve benim açıklamam olan konu ise 72340 adresini nasıl 3 byte ile ifade ederiz onu anlatıyor.
Burada önemli olan bir dahili eprom hafızasının kapasitesi olup yalnızca 1 byte değeri hafızada tutabilmektedir. Gerisi hikaye.

Ete



zeus48

Ete hocam hiç harici eerom kullanmadım, nasıl kullanılacağınada bilmiyorum. Bilgi edinmek için formları dplaştım ama çok şey anladığımı söyleyemem. Bu konuda yardımcı olurmusun.  24c512 kullanacağım. Bunun pic e tanımlaması nasıl yazılacak . pic 18f452.  A değişkenini  pıc in kendi eepromunun 0  cı adresini yazdık okuduk  ,  B değişkenini   gene pıc in kendi eepromunun 255  ci
adresini yazıp okuduk Buraya kadar tamam yaptım. Pıc in eepromu bitti gelelim harici eeproma
255 den sonraki  sonraki değişkenlerim harici eeproma naıl yazılacak ,kaçtan başlayıp kaçıncı adreste bitecek.

ete

Ders notlarımda bunları açıklamıştım.
İhtiyacın olan 512 byte lık bir eprom. Neden gidip 65536 byte lık bir eprom kullanmayı düşünüyorsun. İşini zorlaştırmak hoşunamı gidiyor.
İhtiyacın ne ise onu kullan işin kolaylaşır. Mesela;
- 24C04   (512 byte lık)
- 24C08  (1024 byte lık)
- 24C16  (2048 Byte lık)
- 24C32  (4048 Byte lık)
Bunların hepsi olur. 
İlla 24C512 kullanacağım diyorsan data sheet incelemem gerekir. Yardımcı olurum yinede. Ama para ile alacaksan bu dediklerimden birini alırsan daha uygun olur.

Ete

zeus48

Elimde 24c512 var diye bunu seçtim önemli değil. 24C04  işimi görür.  Alırım.

zeus48

Ete hocam 24C04  bu eepromu aldım. Yukarıdaki sorunumu cözebilecekmiyim. Bana  basit iki örnek yazabilecekmisin. Harici eepromun 0 adresine D  değişkenini nasıl kaydederim ve harici eepromun  enson adresini  E  değişkenini nasıl kaydederim.  Bu eepromun pic e tanımlaması nasıl olacak. Yardımlarınızı bekliyorum

ete

Örneği hazırlamıştım. Verdim sanıyordum ama vermemişim nasıl oldu anlamadım.
Her neyse örnek ilişiktedir. Açıklamalar program arasındadır.
Bağlantı şemasına birebir uyman gerek. Bu epromda 512 hafıza adresi (kutusu) mevcut.
Bu hafıza 2 ayrı blok (aslında iki ayrı entegre gibi düşünmek gerek her biri 256 byte alıyor) Blok seçimi kontrol bayte içinde A0 biti ile yapılıyor. Kolaylıkla blok seçimi yapasın diye bir UST birde ALT isimli iki kontrol byte değeri tanımladım. Hangi bloğa yazacaksan (UST yada ALT) ona ait kontrol değerini kullanıyorsun. Örnek programda mevcut. Adresleme hep 0-255 arası yapılıyor. Üst seçip 0-255 arasına yazdırır yada okursan 256-511 adresleri okumuş oluyorsun.
Alt seçip yine 0-255 arasına yazdırıp okursan 0-255 arasını okuyup yazmış oluyorsun.

Ete

Hattuşa

#74
ADR     VAR Byte '0-512 ADRleri
ILK     VAR Bit
UST CON  %10100000
ALT CON  %10100010
LCDOUT $FE,1
Pause 500

BASLA:
'epromda 512 TANE HAFIZA VAR. BU HAFIZA İKİ BLOK HALİNDE HAZIRLANMIŞ
'HER BİR BLOK İÇİN ADRESLEME 0-255 ARASI YAPILIYOR.
'ÜST BLOK SEÇİMİ kontrol BYTE İLE YAPILIYOR BU YÜZDEN UST DİYE BİR SABİT KONTROL BELİRLEDİM.
'ALT BLOK İÇİN DE AYRI BİR KONTROL BYTE BELİRLEDİM.
'ŞİMDİ İLK BLOK (ALT BLOK DİYELİM) DA BİR ADRESE YAZMAK İÇİN,
'I2CWRITE DTA, CLK, ALT,ADR,[YAZILAN]  KOMUTUNU KULLANIYORUZ.
'ÜST BLOK DA BİR YERE YAZMAK İÇİN KOMUTTA YALNIZCA ALT YERİNE UST KULLANIYORUZ.
'KISACA HANGİ BLOĞA YAZILACAK İSE O BLOĞA AİT CİHAZ ADRESİNİ KULLANIYORUZ.
'ADRES DAİMA 0-255 ARASI OLUYOR.


ete hocam I2C ile eproom konusunu inceliyordum. yukarıda sizin verdiğiniz örnekte
UST CON  %10100000
ALT CON  %10100010

kısımlarını anlayamadım. Yani 512 lik bir eproomda 256 lık iki adet adres var demişsiniz bunları ALT ve UST diye ayırmışsınız buraya kadar anladım ama UST  değeri desimal de 160 değerini alıyor, ALT değeri 162 desimalde 162 değerini alıyor. bunlar neye göre alınıyor veya belirleniyor.
üstelik hocam bu hali ile derledim hata vermedi, symbol, var, as, dim vs biliyordukta bu CON komutu nerden çıktı, neyi belirliyor.


Powered by EzPortal